quinta-feira, 16 de dezembro de 2010

Safe Factory pattern - private instance state in JavaScript

Apenas quero partilhar convosco um artigo que publiquei no CodeProject acerca de um padrão que descobri que possibilita ter estado privado em instâncias de objectos JavaScript:

http://www.codeproject.com/KB/ajax/SafeFactoryPattern.aspx

A quem interessar!

Duarte Cunha Leão

quarta-feira, 14 de abril de 2010

SQL Injection - É ou não possível?

Sinceramente!? O que motivou-me a partilhar a questão sobre SQL Injection com os colegas, foi o comentário disponibilizado no post do Luís. Nele, há uma ideia clara de que um ataque de SQL Injection é possível. Ora, é mesmo possível? Interroguei-me!
Daquilo que sei a respeito, não me parece. Respondi!

SQL Injection pertence a categoria de execução de comando cujo objectivo é tomar o controlo da Aplicação Web.
Utiliza-se da construção ilegal de instruções de SQL através do input do utilizador.

Para já, fica caracterizado que para haver SQL Injection, deve haver uma porta de entrada para os dados.
Se essa porta -Web form- existir, então a acção de um malicious user consistirá em executar comandos de SQL contra a Base de Dados da aplicação.

Da análise do código em causa, o que realmente importa destacar é o seguinte:

1) Não obedece a nenhum Design Pattern
Spaghetti à parte, concretamente, não há best pratices aqui. Penso que este facto contribui negativamente para a Aplicação na qual este código está inserido. É o que caracteriza a verdadeira ameaça, no âmbito da Arquitectura.

2) Existe um ponto de entrada.
A função insertDoc() despoleta todo o fluxo de informação neste contexto, e os seus parâmetros são, ou deveriam ser, inputs do utilizador. Por exemplo: Centro, Produto e Quantidade.

3) A query sql é @parametrizada.
Aqui está o ponto chave de toda a questão! Esta é a primeira linha de defesa contra o ataque SQL Injection.

Ok. Ao observarmos o ponto nº 2, há algo que devemos nos preocupar: "existe uma porta!"

Rule of thumb
-------------
"Não confie no input do utilizador!"

Na prática, isto significa validar os inputs do utilizador contra tipo, comprimento, formato, etc.

E, em relação ao ponto nº 3!? O que é esta cena de parametrizada?

"The best way to mitigate SQL Injection attacks is to use parameterized SQL queries."

Eu deixei esta sentença na sua forma original, ou seja, em inglês, porque isto é o statement dos Experts. Ou seja, a Microsoft, por exemplo.

Isto quer dizer, na prática, que ao utilizar queries parametrizadas, na verdade, o valor introduzido pelo utilizador está a ser tratado como uma literal e, não, como código executável.
E, ainda, este valor é confrontado com o seu tipo e comprimento. Qualquer coisa fora do que foi definido irá provocar uma excepção. No nosso caso, por exemplo:

declare @Centro as char(3);
declare @produto as char(2);
declare @quantidade as int;

Claro! Melhor seria se isto acontecesse em uma Stored Procedure! Se assim não o for e, ao nível do código .Net, podemos utilizar SQLParameter!

Para concluir, eu sintetizei aqui, um assunto que é muito mais abrangente do que isto. O objectivo foi demonstrar o porquê da minha ideia de que não é possível realizar o ataque SQL Injection com base no código em discussão.

Assim, a minha opinião é:

"Não, não é possível utilizar o ataque SQL Injection com base neste código!"

Agora, "It's up to You!"

Até ao próximo post!

Fernando Oliveira
Agap2 Developer
MCPD - ASP.NET Developer 3.5

segunda-feira, 4 de janeiro de 2010

Para responder ao fernando em ( É ou não possível... )

Vamos analisar a função.

11 parametros de entrada em javascript
Uma vez que nesta linguagem as variaveis não são fortemente tipificadas, são onze possibilidades de entrar codigo pois

Area pode ser 01, ou "Select Sum(quantidade) from tregisto inner join ...) por ai fora.
Isto pode se repetir para cada variavel.
Mais a frente digo como.

Agora o maior problema no meu ponto de vista. A construção de um procedimento em runtime no lado do client com os dados das variaveis:
-> "; select @operacao=" + Operacao + , permite assignar a variavel @operacao do procedimento o que eu quiser:
. por exemplo tornar um debito num credito.
. igualar ao resultado de um outro procedimento que demore imenso tempo ou que não termine e empaque a bd.
. o que quiserem imaginar.
O mesmo para as outras variaveis.

Sem falar que fico com o conhecimento da estrutura de dados do sistema ( nome de tabelas, campos)

- > while (incDate <= sysDate) { se tornar este loop infinito posso inserir dados até rebentar a BD temos n inserts a ser criados em runtime -> "insert into tregisto (centro, estrutura, area, produto, operacao, tiporegisto, data, userid, quantidade) " +


Se por fim quiser alterar a variavel msql , visto que é uma string posso em qualquer parte do procedimento fazer drops,
alterar permissões se conhecer a estrutura da tabela de permissões ( que poderia estar exposto em outras partes do codigo)

para isto basta abrir o IE ou o mozilla com um debuger de javascript, por breakpoints no javascript, adicionar watchs para variaveis ( Centro, incDate, msql,etc) e mudar os valores quando parar no breakpoint .
Sem falar que também se pode fazer isto com o Visual Studio, Eclipse, NetBeans que têm ferramentas de depuração mais poderosas.

function insertDoc(Centro, Estrutura, Area, Produto, Operacao, TipoRegisto, ShortDt, User, Quantidade, sysDate, allow) {
var xml, msql, QantFix, incDate;
var doc, docAttr, docChilds, nor;


debugger;
( Break Point Aqui) - a partir daqui alterava os parametros de entrada.
incDate = ShortDt;
QantFix = Quantidade;

if (allow == "A")
QantFix = calculaQuantidadeACT(Centro, Estrutura, Area, Produto, Operacao, TipoRegisto, ShortDt, User, parseInt(Quantidade), sysDate, allow);


while (incDate <= sysDate) {

( Break Point Aqui) - a partir daqui alterava incDate para ser sempre inferior as sysDate .

msql = "declare @Centro as char(3); declare @estrutura as char(2); declare @area as char(2); declare @produto as char(2); declare @operacao as char(2); declare @TipoRegisto as char(30); declare @userid as char(8); declare @quantidade as int; declare @allow as char(1); " +
"select @Centro='" + Centro +
"'; select @estrutura=" + Estrutura +
"; select @area=" + Area +
"; select @produto=" + Produto +
"; select @operacao=" + Operacao +
"; select @TipoRegisto='" + TipoRegisto +
"'; select @userid='" + User +
"'; select @quantidade=" + Quantidade +
"; select @allow='" + allow +
"'; " +
"declare @DTPD as datetime; declare @DT as datetime; select @DTPD='" + ShortDt +
"'; select @DT='" + incDate +
"'; declare @RecebidosD as int; declare @PendentesD as int; declare @PendentesDA as int; ";

( Break Point Aqui) - a partir daqui alterava as variaveis do procedimento .

if (ShortDt == incDate) {
msql = msql + "" +
"select @RecebidosD=(select quantidade from tregisto " +
"where centro=@Centro and estrutura=@estrutura and area=@area and produto=@produto and operacao=@operacao and tiporegisto=@tiporegisto and data=@DT); " +
"if (@RecebidosD is null) begin " +
"insert into tregisto (centro, estrutura, area, produto, operacao, tiporegisto, data, userid, quantidade) " +
"values (@Centro, @estrutura , @area, @produto, @operacao, @TipoRegisto, @DT, @userid, @quantidade); " +
"select @RecebidosD=(select quantidade from tregisto " +
"where centro=@Centro and estrutura=@estrutura and area=@area and produto=@produto and operacao=@operacao and tiporegisto=@tiporegisto and data=@DT); "

( Break Point Aqui) - punha mais inserts ou drops ou delete na variavel msql .

.... (Omitido o resto por questões de brevidade)


}

É claro que não seria para qualquer um, mas basta ter vontade e tempo

É ou não possível...

...com base no código do post 'Um exemplo do que não se deve fazer . . .' do nosso colega Luís Sousa, utilizar o ataque SQL Injection?
As respostas devem ser acompanhadas de justificativas, se possível.

Obrigado ao Luís pelo exemplo!


Abraço e Feliz 2010!


Até ao próximo post!

Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications

segunda-feira, 21 de dezembro de 2009

Model View Controller - MVC

O Natal está a aproximar-se e, como em todos os anos nesta época, nos reunimos em mais um jantar de confraternização Agapiano. Lá, estava presente a Equipa* que está a desenvolver o Portal Corporativo Agap2 e, é em homenagem a eles –da Equipa- que escolhi o tema deste post!

O Model-View-Controller, padrão de arquitectura adoptado pelo ASP.NET MVC não é novo. Pelo contrário, existe, pelo menos, desde a década de 70.

Essencialmente, este padrão está assente no conceito de separação em camadas. Com responsabilidades claras para cada componente. O Model representa a camada de dados, o View, a camada de apresentação(UI) e o Controller, a camada de negócio. Este último, pode ser comparado em parte, ao ‘Code Behind’ do ASP.NET Web Forms uma vez que, gere e responde aos inputs do utilizador.
Tem como diferencial, também, o facto de não utilizar View State e nem Web Forms.
Dos benefícios do ASP.NET MVC, eu gosto particularmente de dois:

URLs ‘roteáveis’ (amigáveis)
Uma vez mais, no ASP.NET Web Forms as URLs ‘apontam’ para ficheiros localizados no disco rígido do Web Server.

Por exemplo:
http://www.agap2.pt/home.aspx pode corresponder a x:\webroot\home.aspx

No ASP.NET MVC não é assim. URLs não esperam nenhuma correspondência com ficheiros sobre o Web Server. Elas são manipuladas no Controller.

O desenho de uma URL routing pode se parecer como isso:
http://www.agap2.pt/rdc { controller = “Competencia”, action= “Rdc” }

TDD - Test-Driven Development
Uma abordagem na qual criamos uma unidade de teste e, então, escrevemos código para satisfazer o teste.
A unidade de teste deve representar o comportamento esperado do código que está a ser escrito.

É importante destacar que, neste momento, o ASP.NET MVC não é o substituto do ASP.NET Web Forms mas, sim, uma alternativa.

Fica aqui, então, a sugestão para que todos dêem uma espreitadela mais atenta nisto.

Um abraço e um Feliz Natal!


*Equipa do Portal Agap2
André Oliveira; Joana Paes; Marco Delgado; Michael Castro; Ricardo Peixeiro; Ricardo Pereira; Rui Raimundo; Vitor Catarino; Vitor Sezefredo.



Até ao próximo post!

Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications

terça-feira, 7 de julho de 2009

Um exemplo do que não se deve fazer . . .

Já há algum tempo que não venho aqui ao blog, os vários projectos por onde tenho passado
no cliente tiram-me o tempo.

Desta vez, deparei-me com algo, que achei que tinha mesmo de ser partilhado convosco.

Encontrei uma função Javascript, que é incluída numa página com um código no mínimo curioso, apreciem:

function insertDoc(Centro, Estrutura, Area, Produto, Operacao, TipoRegisto, ShortDt, User, Quantidade, sysDate, allow) {
var xml, msql, QantFix, incDate;
var doc, docAttr, docChilds, nor;
debugger;

incDate = ShortDt;
QantFix = Quantidade;

if (allow == "A")
QantFix = calculaQuantidadeACT(Centro, Estrutura, Area, Produto, Operacao, TipoRegisto, ShortDt, User, parseInt(Quantidade), sysDate, allow);


while (incDate <= sysDate)
{
msql = "declare @Centro as char(3); declare @estrutura as char(2); declare @area as char(2); declare @produto as char(2); declare @operacao as char(2); declare @TipoRegisto as char(30); declare @userid as char(8); declare @quantidade as int; declare @allow as char(1); " +
"select @Centro='" + Centro + "'; select @estrutura=" + Estrutura + "; select @area=" + Area + "; select @produto=" + Produto + "; select @operacao=" + Operacao + "; select @TipoRegisto='" + TipoRegisto + "'; select @userid='" + User + "'; select @quantidade=" + Quantidade + "; select @allow='" + allow + "'; " +
"declare @DTPD as datetime; declare @DT as datetime; select @DTPD='" + ShortDt + "'; select @DT='" + incDate + "'; declare @RecebidosD as int; declare @PendentesD as int; declare @PendentesDA as int; ";

if (ShortDt == incDate) {
msql = msql + "" +
"select @RecebidosD=(select quantidade from tregisto " +
"where centro=@Centro and estrutura=@estrutura and area=@area and produto=@produto and operacao=@operacao and tiporegisto=@tiporegisto and data=@DT); " +
"if (@RecebidosD is null) begin " +
"insert into tregisto (centro, estrutura, area, produto, operacao, tiporegisto, data, userid, quantidade) " +
"values (@Centro, @estrutura , @area, @produto, @operacao, @TipoRegisto, @DT, @userid, @quantidade); " +
"select @RecebidosD=(select quantidade from tregisto " +
"where centro=@Centro and estrutura=@estrutura and area=@area and produto=@produto and operacao=@operacao and tiporegisto=@tiporegisto and data=@DT); "

.... (Omitido o resto por questões de brevidade)

}

Temos aqui um caso clássico de utilização de SQL client side, e disponível na página . . .

Algo a evitar!

quarta-feira, 14 de janeiro de 2009

A Arquitectura Aplicacional — Factores de Sobrevivência

[Este é o terceiro artigo da série “A Arquitectura Aplicacional” I) Introdução II) Análise de Características]

No último artigo abordei algumas das características que caracterizam (esta é que não sabiam) uma arquitectura aplicacional. Não foi feita uma análise exaustiva, pelo que, com certeza, muitas características importantes terão não sido referidas. Como exemplo, não foi referida, explicitamente, a vulgar característica «expansibilidade» [reconheço que a palavra não me soa perfeita; mas não consegui encontrar as palavras «escalabilidade» ou «escalável», num dicionário de português (de Portugal), mas apenas: escala, escalar, escalada, escalamento, escalagem e escalador. Por isso, acabei por preferir os tradicionais termos «expansibilidade» e «expansível», utilizados aqui à semelhança de em “slot de expansão”], que descreve a aptidão de uma arquitectura para poder crescer, em termos de carga suportada, ou na sua distribuição geográfica.

Neste artigo, exploro algumas características que, julgo, são hoje subestimadas no desenho de sistemas e arquitecturas aplicacionais.

É comum dar-se muita importância a cada um dos componentes ou módulos de um sistema e menosprezar a importância que tem o que os une, os liga e o que partilham e trocam uns com os outros.

A modularidade — as caixas

Estamos na época da modularidade, e de pouco mais. Também já não é mau, reconheço que podia ser pior. É-nos suficiente. Satisfaz-nos. Decora as soluções com traços de inteligência e complexidade, o que fica sempre bem. Enche o olho de quem compra. O deslumbramento é tanto que nem se quer saber o que é que está dentro dos módulos, as caixas, pretas. São quartos escuros, geralmente com tanta luz quanta inspiração e cuidado.

Na pior das hipóteses, se se descobrir que um módulo não presta: deita-se este fora e troca-se por outro. É higiénico, não se toca em mais nada (tal como se faz hoje em dia com as placas de circuito impresso — nem vale a pena tentar descobrir qual o transístor que está queimado).

Relação com a mediocridade

A modularidade é uma característica imprescindível de qualquer sistema e arquitectura. Só não deve é ser utilizada para esconder o lixo debaixo do tapete. Como qualquer arma, esta pode ser usada bem ou mal. Para flexibilizar, separar, proteger e arrumar, ou para esconder a confusão, o desmazelo e a ignorância.

Eis algumas máximas, todas elas válidas em devido contexto, mas que, evocadas de cor, facilmente conduzem a um uso medíocre da modularidade:

“Depois, se houver tempo, faz-se melhor…”

“A qualquer altura se substitui…”

“Faz-se iterativamente e acrescenta-se faseada e oportunamente”

“É uma questão de compromisso entre isto e aquilo…”

“O óptimo é inimigo do bom…”

“Não sejamos mais papistas que o Páapa”.

Notem os seguintes, igualmente válidos, dizeres:

“Raramente há tempo e oportunidade para melhorar o que já está (mais ou menos) feito”

“O que nasce torto (ou incompleto) tarde ou nunca se endireita (ou completa)”

“Quando não há vontade, qualquer razão serve…”

“O bom também é inimigo do óptimo”

“Com o mal dos outros posso eu bem”

“A qualidade compensa, gasta-se agora, ganha-se depois”

“Para hábil executor é tão mais fácil fazer bem do que mal”

A flexibilidade — as ligações

A modularidade é tanto acerca de caixas como de ligações.

Deparados com um monólito de 1000 linhas [porque não em C#, já que este é um blog ligado a tecnologias Microsoft], feito por um qualquer colega insano [que devia ser mandado para o Campo Pequeno e…], a necessidade imperativa de reposição da ordem que invade qualquer programador que se preze, debate-se imediatamente com o seguinte: para separar, há que ligar a seguir. É essa a razão por que mentes preguiçosas, sob a pressão dos prazos, se ficam pelo monólito: “É mais seguro, fica tudo juntinho e não se perde”.

De que são feitas as ligações? De um fio condutor e dos electrões. Isto na electricidade, é claro, porque no caso das aplicações informáticas, é, surpreendentemente, a mesma coisa. Façamos F = “fio condutor” e E = “electrão”. Entre funções de um programa: F = “variável” e E = “um inteiro”, entre uma página web e o seu servidor: F = “canal tcp/ip, protocolo http” e E = “conteúdo do body da mensagem http”, e por aí adiante.

A flexibilidade de um sistema deve-se à flexibilidade das ligações entre os seus módulos.

Uma ligação não é flexível apenas por existir (existo logo sou flexível?). Uma função não está ligada de forma flexível às funções suas chamadoras apenas por ter muitos parâmetros de entrada (e, eventualmente, vários de saída). Não é tanto a quantidade de ligações que traz a flexibilidade, mas antes a qualidade do que as atravessa.

A flexibilidade de um conjunto de ligações é função do número de fins que estas podem produzir.

Eis um exemplo da “vida real”. O corpo humano, assim como muitos outros organismos vivos, é um sistema extraordinariamente flexível. A sua flexibilidade deve-se em grande medida à flexibilidade do seu (sub-)sistema de ligações. Os vasos sanguíneos — o canal condutor, F — ligam todos os pontos do corpo; pelo meio, atravessam barreiras físicas, como as articulações entre os membros, sem prejudicar a sua mobilidade; penetram fundo nos seus órgãos internos. O sangue — o líquido portador — viaja nos vasos sanguíneos levando consigo alimentos, glóbulos e demais agentes de toda a espécie — E.

A reter:

Todos os sistemas bem sucedidos, que sobrevivem, perduram e evoluem, são flexíveis. Têm como suporte às ligações entre as suas partes um (sub-)sistema de ligações flexível.

As coisas

O domínio do que é comunicado, do que viaja através dos canais de comunicação, é, na mais geral das hipóteses, todo o conhecimento (“the sky is the limit”), cujo elemento abstracto se denomina de «coisa». Pode ser uma mensagem, um “objecto”, um número inteiro, uma entidade de negócio, enfim, qualquer «coisa».

Quanto mais tipos diferentes de «coisas» puderem passar por uma ligação, maior será a sua flexibilidade. Maior será, também, a dificuldade de lidar com “tanta «coisa»”. Por isso, a utilização eficiente das ligações, passa por descobrir, para o problema subjacente aos módulos ligados, qual é o menor conjunto de «coisas» que o descreve.

Actualmente, quando se desenham sistemas e arquitecturas, nmho, não se tira partido de um eficiente desenho do modelo de entidades de negócio. É comum que cada módulo ou camada de um sistema tenha o seu bem diferente modelo de entidades, do mesmo negócio. Não são apenas diferentes vistas parciais de um mesmo modelo, de acordo com as necessidades de cada um. São antes diferentes, contraditórias, e igualmente infiéis representações de um mesmo modelo de negócio, que todos mal conhecem.

A utilização de um modelo de dados comum em todo um sistema é o maior potenciador da sua eficiência, a todos os níveis, e da simplicidade conseguida nas suas ligações [reveja-se o corpo humano].

No próximo artigo, abordarei alguns sentidos desafios do desenho de um tal modelo de dados. Até lá. Não resistam. Pensem nisto.

terça-feira, 23 de dezembro de 2008

Parallelization is next performance horizon

http://weblog.infoworld.com/yager/archives/2008/12/parallelization_1.html

sexta-feira, 28 de novembro de 2008

Cábulas de .Net (e não só)

Caros colegas, quantas vezes a nossa produtividade se resume à (rápida) acessibilidade da informação?

Várias vezes dou por mim à procura, pela centésima vigésima primeira vez, daquele help porreiro de JavaScript, ou, a dizer: “onde é que eu tenho aquele snippet para escrever o raio de um DOCTYPE de xhtmlserá que está na pen ou no computador de casa…”

Isto é típico das matérias que não usamos todos os dias, mas só dia-sim, dia-não :-).

Por isso achei um espectáculo encontrar um post que faz um apanhado de várias “cheat sheets”, de várias tecnologias, a maioria, prontas a imprimir numa folha A4, ou ver no Acrobat:

http://john-sheehan.com/blog/index.php/net-cheat-sheets/

É claro que as cábulas só interessam a quem sabe mais do que aquilo que elas tiverem, resultado da elevada compressão (com perdas) da informação constante :-)

terça-feira, 25 de novembro de 2008

A Arquitectura Aplicacional — Análise de Características

[Este é o segundo artigo da série “A Arquitectura Aplicacional” I) Introdução III) Factores de Sobrevivência]

Depois de tão aplaudida estreia não tenho outro remédio senão continuar a série de artigos sobre a “A Arquitectura Aplicacional”. Agradeço, desde já, os hipotéticos futuros aplausos.

Hoje, ao ler (mais que tardiamente) o artigo do Joaquim Ferreira abriu-se-me o apetite para a escrita!

Tal como prometi no último artigo, vamos baixar a altitude. Colegas consultores: peço-vos que desabotoem os punhos das camisas e arregacem as mangas, pois vamos sujar um pouco as mãos [isto do consultor de colarinho branco e botões de punho não joga, nmho, muito bem com a programação, e com o trabalho em particular, também].

No último artigo concluímos que não existe uma só arquitectura aplicacional que seja adequada para servir todos os sistemas. Mas que, por outro lado, existem características de uma arquitectura que nos permitem classificar e escolher de entre as infinitas arquitecturas existentes. Que características são essas? As seguintes características são positivas:

  • simplicidade — a arquitectura é o mais simples possível, sem prejuízo dos seus fins, ou de outras características positivas; facilita a aprendizagem do seu funcionamento, reduz o número de potenciais erros, facilita a alteração
  • modularidade — estruturada por módulos (vários módulos cada um com diferentes funções); estes expõem as suas funcionalidades de maneira a que outros as possam utilizar facilmente; esta característica facilita a análise, a utilização, a alteração, a aferição [efectuar testes com padrões de Entrada/Saída] e possibilita a reutilização
  • composicionalidade — pressupondo um desenho modular,  os módulos podem utilizar outros módulos para cumprir a sua função; tal representa uma dependência que pode ser obrigatória ou facultativa; no último caso, se a dependência de um módulo não é satisfeita, algumas das funcionalidades do módulo dependente podem não estar activas
  • configurabilidade — capacidade de poder alterar ou ajustar a configuração de uma arquitectura através de parâmetros acessíveis externamente [a resposta à alteração dos parâmetros pode ou não ser imediata e automática, podendo estar sujeita a um comando de refrescamento, ou, no pior caso, ao reiniciar da aplicação]
  • adaptabilidade — a capacidade de adaptação/regulação, automática, a características variantes do meio ambiente (características extrínsecas do sistema)
  • robustez — força com que uma arquitectura resiste a condições adversas ou de excepção do meio ambiente; o conhecido teste do “macaco ao teclado” é uma condição de excepção para qualquer arquitectura, assim como lhe são adversas as falhas em linhas de comunicação e os períodos de sobrecarga no acesso a um componente servidor

Outras características positivas, muito abrangentes, mas, de fulcral importância:

  • eficácia — se uma arquitectura satisfaz os seus fins (a cada fim, ou sim ou não); por vezes olha-se para uma arquitectura acabada e apercebesse-se que ficou algo, esquecido ou adiado, de fora [confesso que a ortografia da anterior conjugação do verbo «aperceber» fui vê-la ao dicionário e, ainda assim, tenho dúvidas se a utilizei/escrevi bem :-) ]
  • eficiência (ou o inverso do desperdício) — o grau de aproveitamento dos recursos ambientais consumidos para o cumprimento do seus fins; a eficiência máxima, o valor 100%, corresponde a uma utilização dos recursos ambientais perfeita para o estrito cumprimento dos seus fins (apenas existe produção de valor e não existe desperdício); a eficiência mínima, o valor 0%, corresponde a um desperdício total: todos os recursos ambientais são gastos em fins que não os pretendidos, não sendo estes últimos sequer atingidos: o mesmo que a ineficácia!
  • ajustamento ao problema (ou a fidelidade da representação) — quão ajustada está uma arquitectura ao seu fim; quão fiel é a sua representação do problema; um desenho injusto (desajustado) do problema traz consigo ineficiência na composição e no funcionamento; repetidas vezes observo que a complexidade das aplicações se deve a infiéis representações do problema: é como os parafusos philips (em cruz), podem ser apertados com uma chave de fendas, normal, mas com desnecessário esforço.

Pois, a cada sistema, a arquitectura que lhe seja fiel.

Muitas outras características existem, com certeza [gostaria que o meu leitor imaginário comentasse sobre elas…].

Mas há uma que deixei de fora, de propósito, pois será o tema do próximo artigo.

Acabámos por não sujar mais do que a ponta dos dedos.

terça-feira, 4 de novembro de 2008

Fazer tijolos ou juntar tijolos, eis a questão ...

Apôs tanto tempo a dizer que iria começar a escrever no blog, aqui vai a meu 1º input.Antes de mais nada atenção que isto pode ir com algumas gralhas.Porque além de ser burro e preguiçoso, não vou andar a fazer revisão.

Bem o meu titulo é estranho! Mas se o analisarem com alguma abstracção, se calhar conseguem ver aquilo que eu escondi nele.
Actualmente os programadores debatem-se com o constante trabalho de "fazer tijolos" e perdem pouco tempo a procurar os que já estão feitos. Uma das razões é porque para alguns nunca existe o "tijolo" exactamente como eles querem, outros preguiça de procurar, outros não têm tempo, outros não gostam, etc. Existe sempre uma razão.

No meu trabalho do dia a dia, verifico que cerca de 75% do nosso tempo consiste em refazer o que já esta feito, muitas vezes mal.Mais tarde verificamos que já alguém o fez e bem melhor. Existem alguns que ao fim de algum tempo tem os seus "private tijolos". Então já passam para a fase de os "juntar". Mas muito poucos na realidade utilizam conscientemente "tijolos" de outros para atingir o seu objectivo.

Chega de falar em tijolos e vamos falar do problema em si. Ao fim de algum tempo muitos dos problemas na programação já foram resolvidos por alguém. As vezes essas soluções estão padronizadas e disponíveis para nós utilizarmos. O problema é saber que existem e como utilizar.

Para já vou falar de um conjunto de soluções que a Microsoft disponibiliza para uma série de situações, o Enterprise library.

O Enterprise library não é mais do que um conjunto de unidades "application blocks" configuraveis que podem ser utilizados para resolver uma série de problemas comuns.



Como podem verificar na imagem existem uma série de problemas comuns as aplicações.
Em cada nova aplicação lá vamos nós resolver aquilo que "n" vezes já resolvemos.
Ora com esta solução a Microsoft tenta dar mecanismos que possam ser adaptados as nossas aplicações e que permitam uma forma padrão de resolver os problemas mais comuns.

Inicialmente em janeiro de 2005 a microsoft disponibilizou os seguintes "Apllication Blocks", na versão 1.0.
• Configuration Application Block
• Data Access Application Block
• Caching Application Block
• Exception Handling Application Block
• Logging and Instrumentation Application Block
• Security Application Block
• Cryptography Application Block

Com a versão 2.0, actualizou para a framework 2.0 e alterou os modulos de
• Data Access Application Block
• Caching Application Block
• Exception Handling Application Block
• Security Application Block

E

. O Logging and Instrumentation Application Block , passou so a ser o Logging
Application Block

. O funcionalidade de Instrumentation que existia no "Logging and Instrumentation Application Block" como o Configuration Application Block passaram a ser tranversais as "Application Blocks".

Com a versão 3.0 passou a coexistir com novas funcionalidades da framework dot net.
• Windows Presentation Framework
• Windows Communication Framework
• Windows Workflow Foundation
• Windows CardSpace

Novos "Apllication Blocks" apareceram.
• Validation Application Block
• Policy Injection Application Block

E outros estão disponiveis mas não são oferecidos no core.

• Composite UI Application Block:
• Updater Application Block:
• CompositeWeb Application Block
• Page Flow Application Block
• Mobile Composite Application Block
• Mobile Data Access Block
• Mobile Configuration Block
• Mobile Connection Monitor Block
• Mobile Data Subscription Block
• Mobile Disconnected Service Agent Block
• Mobile Endpoint Catalog Block
• Password Authentication Block

E ainda existe a versão 4.0, que aborda a framework 3,0/3.5, que falarei mais a frente.

No fundo interessa saber é que existem muitas coisa já feitas que podem ser aproveitadas.E o meu objectivo será nestes "posts", falar das principais e se possível de todas.

Agora para terminar, porque ja escrevi muito, deixo só a nota que o próximo post irá falar de como instalar e usar em desenvolvimento e produção estes "Applications Blocks". Se possível falar em detalhe de um, talvez o de "LOG", senão fica no "post" seguinte.

Sabem a vontade é muita o tempo é que não abunda.

Um abraço, comentem ...

quinta-feira, 23 de outubro de 2008

A Arquitectura Aplicacional — Introdução

[Este é o primeiro artigo da série “A Arquitectura Aplicacional” II) Análise de Características III) Factores de Sobrevivência]

Quero partilhar convosco algumas ideias acerca de arquitecturas para o desenvolvimento de aplicações (i.e. software!). Tal como salienta o ambicioso título, vamos descobrir “A Arquitectura Aplicacional” — aquela que será o Santo Graal das arquitecturas aplicacionais. A sério, não vamos descobrir nada de novo. Vamos apenas olhar para aquilo que já conhecemos,  que, provavelmente, já usamos, e dedicar-lhe algum do nosso tempo.  O tema é vasto o suficiente para justificar que o abordemos em vários artigos. Este é o primeiro artigo da série que se seguirá.

Arquitecturas há muitas, tantas quantas se quiser inventar. No limite da interpretação, cada sistema é uma arquitectura, e há infinitos sistemas. No entanto, tais arquitecturas seriam de pouco valor, para lá dos sistemas que as originaram,  por serem tão talhadas para eles. Já não seriam arquitecturas. Seriam só mais uns sistemas.

No outro extremo, existiria uma arquitectura tão geral que se aplicaria a todos os infinitos sistemas. Não teria nada de específico. Não serviria para nada. Não seria uma arquitectura. Mas é pena. Eu adorava que existisse.

Se não existe “A Arquitectura Aplicacional”, existirão pelo menos boas e más arquitecturas. Podemos identificar características destas que nos permitam entendê-las e desenhá-las melhor, quem sabe, até, que permitam abstrair-mo-nos dos sistemas originais.

A arquitectura clássica (quem sou eu para afirmar isto?) trata do problema da organização do homem no espaço. Lida com a relação do “homem com os seus objectos”; estes últimos vão desde o mobiliário, aos edifícios e à paisagem. Os objectos da arquitectura aplicacional são outros (passo a piada). São sistemas, processos, componentes, pacotes, entidades, classes, interfaces, tabelas, camadas, contratos, padrões, interacções e mais uns quantos que, sinceramente, não me recordo. A arquitectura aplicacional trata do problema da organização do homem no espaço, virtual.

É isso então. Temos apenas que compreender melhor a natureza das diferentes relações entre estes objectos (e entre os objectos e o homem). Esse conhecimento, servir-nos-á de guia para desenhar qualquer arquitectura que venha a ser necessária.

No próximo artigo vamos baixar um pouco a altitude. O ar por aqui é rarefeito.

quinta-feira, 7 de agosto de 2008

Microsoft Certification Roadmap

Quais as certificações que existem?
Que exames escolher para obter uma certificação?
E os requisitos? Qual a experiência necessária para cada um deles?

As respostas a estas e outras questões poderão ser encontradas no seguinte link:

http://www.microsoft.com/portugal/technet/formacao/default.mspx#4

Descarreguem os PDFs de acordo com o vosso perfil:

-Profissionais de TI
-Programadores

quarta-feira, 6 de agosto de 2008

Resources for Microsoft Certified Professionals

Ser Microsoft Certified Professional tem algumas vantagens.

Nomeadamente um conjunto de recursos que só estão disponíveis a quem
tem uma certificação.

Um site dedicado aos detentores de certificação:
http://www.microsoft.com/learning/mcp/mcpmembersite.mspx

Um welcome kit que pode ser requisitado do Member Site:
https://mcp.microsoft.com/authenticate/login.aspx?ReturnUrl=https://mcp.microsoft.com/mcp/tools/WelcomeKitValidateAddress.aspx

Publicar o CV online no site de Membros:
http://www.microsoft.com/learning/mcp/career/default.mspx

Explorem os links e descubram todas as vantagens de ser microsoft certified professional.

Até à próxima.
Luís

terça-feira, 5 de agosto de 2008

Microsoft Second Shot: O Regresso!

Nova oportunidade para ir a exame sem receios. A Microsoft voltou a lançar a campanha do Second Shot!

Assim, será possível até 30 de Junho de 2009 agendar novo exame e beneficiar desta campanha. Para os menos atentos recordamos a grande vantagem: em caso de insucesso no resultado do exame, será possível fazer nova marcação sem custos adicionais! Sempre são duas possibilidades...

Apesar do prazo alargado, não vale a pena deixar para depois. Registem-se já.

Em breve publicaremos mais informações sobre as certificações Microsoft.

Microsoft Second Shot:
http://www.microsoft.com/learning/mcp/offers/secondshot/default.mspx

quinta-feira, 3 de julho de 2008

E por falar em Qualidade...

Mais um evento no âmbito da Academia SK, associada ao Training Center da Agap2. Trata-se da 4ª conferência, cujo o tema será Metodologias: PSP e TSP Integração Contínua” que será apresentada pelo colega Luis Sousa.

Quer saber como melhorar a sua própria performance com base em práticas de desenvolvimento de software pré-definidas?

Participe e descubra o que é e para que servem os dois processos abordados nesta conferência.

Dia 21 de julho de 2008, pelas 19:00h
Incrições para o e-mail carlas@agap2.com

Parabéns Luís pela iniciativa!

Até ao próximo post!

Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications

domingo, 29 de junho de 2008

Contra factos, não há argumentos

Segundo o 2007 Symantec Internet Security Threat Report, as vulnerabilidades em Aplicações Web, representam 61% de todas as 'pragas' conhecidas.

FYI, eis aqui algumas delas:

-Cross-Site Scripting
-Cross-Site Request Forgery
-SQL Injection (o famoso!)
-XPATH Injection


É, ou não, motivo de preocupação?


Até ao próximo post!


Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications

Qualidade!? O que é isso!?

Na passada sexta-feira, 27-06-2008, eu estive presente a um evento na Microsoft sobre Qualidade e Rapidez no Desenvolvimento de Soluções, que faz parte do Ciclo Application Lifecycle Management. Em um dos temas apresentados, nomeadamente, A qualidade no Desenvolvimento de Softaware, cuja a 'vedeta' principal era o VS 2008, um dos recursos abordados foi o Code Analysis e, foi aqui que eu fiquei completamente estarrecido! Imaginem que, em um auditório com mais de cem pessoas - sem medo de errar - uma pergunta foi 'lançada': 'Quem conhece a 'ferramenta' Fxcop?' Sinceramente, nem mesmo umas dez pessoas levantaram o dedo :-(
Eu conheço o Fxcop desde a sua primeira versão, lançada em 2002 e, trata-se de uma ferramenta para Análise de Código, chamado, estático. Ela foi aperfeiçoada e, junto com a ferramenta Code Metrics, foi incorporada ao VS 2008.

E, eu insisto, 'não existe Rapidez sem Qualidade'. E, deixo aqui uma pergunta: 'Qual é Qualidade do Softaware desenvolvido em Portugal?'.


Até ao próximo post!


Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications

quarta-feira, 18 de junho de 2008

Microsoft Security Development Lifecycle (SDL)

Para quem ainda não leu, vale a pena. O SDL, é o processo adotado pela Microsoft para o desenvolvimento de software, na própria Microsoft (sem ser redundante).
O objectivo é a descoberta de vulnerabilidades de segurança durante as várias etapas do desenvolvimento de software.

O documento pode ser obtido em:

http://www.microsoft.com/downloads/details.aspx?FamilyID=2412c443-27f6-4aac-9883-f55ba5b01814&displaylang=en


Boa leitura!


Até ao próximo post!

Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications

terça-feira, 10 de junho de 2008

'Discutir' segurança(2)

Eu penso nas ameaças e naquilo que posso fazer para combatê-las(contramedidas). Para conhecerem algumas dessas ameaças e suas respectivas contramedidas, dêem um 'salto' em http://www.microsoft.com/portugal/seguranca/dadescanso/default_home.mspx - A Microsoft Portugal, criou o sitio chamado 'Security MitingPoint' - lá, assistam ao webcast 'Threats and Countermeasures' em português. Entre outras coisas, este webcast aborda o 'STRIDE Threat Model', que é a técnica usada para identificar e categorizar as ameaças de que uma Aplicação está exposta. Não percam!

Até ao próximo post!

Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications

domingo, 8 de junho de 2008

'Discutir' segurança

Quando ouvem falar sobre Segurança em Aplicações Web, o que pensam sobre isto? Partilhem os vossos pensamentos/opiniões aqui, no Blog!


Até ao próximo post!

Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications

Princípios fundamentais

"...If, as a software developer, you are not considering the correctness, performance and security of the code you are writing, the case can be made that you are not doing your job. When you initially start considering Correctness, Performance and Security, you will find yourself having to focus on one aspect at a time. As they become part of your day-to-day practice you will find that you do not need to focus on a specific aspect, they will simply be part of the way you work. When you have mastered them you will be able to intuitively make tradeoffs, and focus your efforts appropriately..."

Gregor Noriskin
Microsoft CLR Performance Team


No meu caso, isto já faz parte do meu trabalho. Qual é o vosso caso?


Até ao próximo post!


Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications

sexta-feira, 6 de junho de 2008

"Não concatene Strings dentro de loops"

No post anterior(Reflectir sobre performance(2)), o exemplo utilizado viola esta Regra. Porque, concatenar Strings nesta condição (dentro de loops), faz com que novos Objectos String sejam criados, assim, precisam ser Garbage Collected. A Classe StringBuilder, ao contrário, evita o overhead provocado pela criação de Objectos e o Garbage Collection. Possui,
adicionalmente, a capacidade de desfazer-se do seu buffer original e criar um novo buffer, com o dobro do tamanho, para 'acomodar' a String.
Eu sempre que, ao revisar um código, encontar-me diante de algo que viole uma regra qualquer, aplico o 'fix' para tal violação. Mesmo em particulares situações, que poderia não aplicá-lo. Desta forma, mantenho a conformidade. Para mim, é uma questão de coerência de uma cultura que não a quero perder.

Está é a minha opinião.

Obrigado pelos comentários e,

Até ao próximo post!

Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications

Reflectir sobre performance(2)

O Visual Studio(VS) disponibiliza vários recursos que nos permitem desenvolver de forma rápida, nossas Aplicações. Essa rapidez, associada, intrinsicamente a produtividade, pode não refletir-se em "desempenho" para a Aplicação. No nosso contexto, tomemos o exemplo mais básico possivel:
Para escrevermos uma estrutura de decisão, digitamos If e, logo em seguida, carregamos a tecla TAB. O VS cria a seguinte estrutura:

=Produtividade

if (true)
{
}


Mas, se reflectirmos sobre performance, quando aplicável, o melhor seria pensarmos em uma estrutura deste tipo:

=Produtividade e Performance

switch (switch_on)
{
default:
}

Reflectir sobre performance requer algumas prerrogativas, entre elas, saber o que é melhor para o desempenho de uma Aplicação. Isto pode também chamar-se best pratices.

Já agora, o que está mal no código a seguir?

static void ReflectirSobrePerformance()
{
string digitos = string.Empty;
for(int i = 0; i < 10; i++)
{
digitos += i.ToString(currentCulture);
}
Console.WriteLine(digitos);
}

Reflictam sobre performance!


Até ao próximo post!

Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications

quarta-feira, 4 de junho de 2008

Eu prometo!

Levante-se, erga a mão direita e repita:


"I promise I will not ship slow code. Speed is a feature I care about. Every day I will pay attention to the performance of my code. I will regularly and methodically measure its speed and size. I will learn, build, or buy the tools I need to do this. It's my responsibility."

Jan Gray
Microsoft CLR Performance Team


Até ao próximo post!

Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications

Atenção: alerta vermelho!

Em uma dessas minhas leituras sobre segurança, nomeadamente, um artigo que falava sobre SQL Injection, um trecho de um comentário chamou a minha atenção. O trecho:

"...Se estás a desenvolver websites e não sabe sobre SQL Injection, então não devias estar a desenvolver websites..."

Nós sabemos sobre SQL Injection e sabemos como evitá-lo, não é, pessoal?


Até ao próximo post!

Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications

terça-feira, 3 de junho de 2008

Reflectir sobre performance

O Visual Studio é, sem dúvida nenhuma, uma 'Ferramenta' de alta produtividade. Ela nos permite escrever código com muita facilidade e rapidez. Mas, escrever código rápido significa que ele é de rápida execução?

Reflictam.


Até ao próximo post!



Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications

segunda-feira, 2 de junho de 2008

Segurança e Performance em Aplicações .NET

Colegas Agapianos,

Estes são os temas que vou partilhar convosco aqui no Blog. De certeza que toda a gente já ouviu falar a respeito mas, na pratica, como lidam com estes temas no vosso dia-a-dia? Ao longo das nossas 'conversas', vamos abordar o CLR, Garbage Collection, recursos 'engraçados' do VS, ferramentas de desempenho, técnicas de Code Review para a detecção de vulnerabilidades no código, só para citar alguns.

Vamos 'bombar' este Blog pessoal! Então, o encontro fica marcado!

Até ao próximo post!

Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications

sexta-feira, 9 de maio de 2008

Complexity - Object Oriented

Hoje ao ler um livro sobre modelação utilizando o paradigma object oriented, deparei-me
com algo que me fez pensar uns minutos, não pude deixar de me rir, pois o que o autor
diz já o presenciei por diversar vezes em projecto.

Passo a citar:

" "The more complex the system, the more open it is to total breakdown".
Rarely would a builder think about addin a new sub-basement to an existing
100 - story building. Doing that would be very costly and would undoubedly invite
failure. Amazingly, users of sotware systems rarely think twice about asking for
equivalent changes. Besides they argue it it only a simple matter of programming. "

Depois continua a discução sobre a problemática da complexidade do software e
o seu impacto no software, custos prazos de entrega manutenção.

E agora a questão, como medimos a complexidade de um dado programa ?
O que isso nos permite inferir ?

Cumps

Luís

p.s. O livro: "Object Oriented Analysis and Design with Applications, Third Edition"

quarta-feira, 23 de abril de 2008

Learning Plan for Getting Started with Visual Studio 2008 for Developing Silverlight Applications

Viva,

há uma data de material novo, principalmente a nível de e-learning disponibilizado pela microsoft.

Ainda não me foi possível processar todas as novidades, esta tal como o titulo indica é
para quem quer começar a desenvolver em Silverlight e Visual Studio 2008.

Cumps

Luís

terça-feira, 15 de abril de 2008

Exams Live Today (.NET 3.5)

Após alguns dias sem colocar posts aqui no fórum aqui vai mais uma noticia.

Três exames da versão 3.5 da .net framework estão finalmente disponíveis na sua versão final.
São eles:

70-502: Windows Presentation Foundation
70-503: Windows Communication Foundation
70-504: Windows Workflow Foundation

Isto contráriamente ao que se via nas versões anteriores da .net framework tráz algumas novidades.

A que é mais óbvia, é que vamos passar a ter exames focados na tecnologia, isto é, temos um Exame de WPF, um de WCF, um de WWF, um de ASP.NET e um de ADO.NET.

Na versão anterior da .net framework, algumas das tecnologias, estavam "agrupadas", isto é, tinhamos um MCTS em Windows Applications, onde eram avaliados conhecimentos de Windows Forms mas também de ADO.NET, não existindo por exemplo um exame especifico de ADO.NET.

Vamos aguardar mais novidades para esta versão da .NET Framework

quinta-feira, 10 de abril de 2008

Numero de MCP's em todo o mudo

Já alguma vez pensaram, voces que são certificados, quantas pessoas existem no mundo com a mesma certificação que voces?

Será que és especial e pertences a um lote restrito de pessoas com essa certificação?

dá uma olhadela a MS publicou estes numeros e vai fazendo updates :)

http://www.microsoft.com/learning/mcp/certified.mspx

quarta-feira, 9 de abril de 2008

Enterprise Library 4.0 Community Technology Preview

Viva,

encontra-se disponível a última versão da Enterprise Library mais o seu conjunto de Application Blocks.

Confesso que nestes dias, foi algo em que voltei a pensar e muito e de forma muito séria.

Senão vejamos, necessitamos de criar uma abstracção para ler parâmetros de configuração
para a nossa aplicação, existirá algum motivo para que isto de um modo geral não seja feito
de uma forma mais ou menos standard ?

Um dos últimos argumentos que ouvi, era algo do género, necessitamos de distribuir, uma parte da configuração que é comum a toda a gente na empresa. Essa parte da configuração pode sofrer um update e depois terá de ser reflectido em todo o lado.

A solução era "martelar" um App.config e depois copiá-lo para as centenas de postos de trabalho que existem por aqui onde me encontro. Isto, tinha como prejuízo "destruir" as configurações de cada um, pois se está tudo no mesmo lado o Copy do Windows ainda não faz merge de ficheiros de texto. Portanto os utilizadores teriam de alterar tudo de novo para configurarem os seus settings pessoais (paths de compilação, directorias de solution, etc ....)

Analisando o Configuration Application Block, vejo coisas que utilizei num outro projecto, que penso poderiam ser uteis aqui, citando directamente:


"Configuration stored in standard XML .config files by default
•Alternative “Configuration Sources” can be used
•Ships with System, File, Manageable and SQL configuration sources "

Ora bem, se neste cenário todos os utilizadores têm acesso a um servidor de sql, porque não colocar lá a configuração comum a todos nessa data source ?

Outra vantagem de utilizar o Application Block, quer se consumam os parâmetros de um ficheiro XML, ou de outra Data Source, o código que tem de ser escrito para consumir estes parâmetros é exactamente igual. Para que não hajam dúvidas, o código que consome os parâmetros, não o código que implementa o acesso ao ficheiro, ou ao sql ou ao MSMQ...

Algo que fica para pensar :) estou curioso para analisar esta última versão da Enterprise Library e vocês ?

terça-feira, 8 de abril de 2008

Chip Industry Confronts 'Software Gap' Between Multicore, Programming

Viva,

também eu estive uns dias sem colocar pots, pelo título podem verificar que os fabricantes
de microprocessadores alertam para algo como um "gap" entre o software e que o hardware
nos proporciona.

Antes de termos os sistemas multi-core (não interessa para a discussão se são dual core, quad core, ...), o nosso sistema operativo, permitia-nos ter vários fios de execução, threads, bem como vários processos.

Aprendemos também que através de alguns mecanismos de sincronização que poderíamos garantir a coerência do nosso programa, lidando com o acesso concorrente a recursos partilhados.

Contudo, num sistema single processor, apesar de podermos lançar várias threads, só "corre" uma de cada vez, ficando a cargo do sistema operativo, saber quando e qual a próxima thread a "correr".

Verifica-se qua a maioria dos sistemas que estão actualmente em produção não tiram partido nenhum da utilização de várias threads nem estão optimizados para tal. Com estes novos CPU's, com vários cores, as threads podem ser "entregues" a um core diferente e aqui sim temos na realidade duas threads a correr em simultaneo.

Será que isto não virá fazer com que as técnicas da programação concorrente venham a ser muito mais relevantes do que o foram até aqui no mercado de trabalho ? Tipicamente era algo que recordávamos dos tempos de faculdade, mas que depois muito poucas vezes se utilizavam a nível profissional.

Outra questão, prende-se com a questão do desenho. Fazer debug e testar um sistema single thread é muito mais fácil do que testar e fazer debug um sistema multi thread.

Será que estamos preparados para desenhar os nossos sistemas e aplicações de modo a evitar dores de cabeça durante o desenvolvimento ?

Algo que fica para pensar, desvia-se um pouco do tema Microsoft, mas também aqui no mundo .Net apesar de termos muito suporte à programação concorrente poucas vezes se vê isto utilizado, contudo convém lembrar que nem sempre faz sentido este tipo de técnicas e que por vezes é melhor deixá-las de fora.

segunda-feira, 7 de abril de 2008

Windows 7

Peço desculpa, mas estive uns dias sem "bloggar" :), está nos meu horizontes realizar uns examezitos para breve e as atenções têm de naturalmente ser dividas.

Bom mas vamos ao que interessa ... Tem-se falado do novo Windows, code named "Windows 7", sendo este a nova versão cliente distribuido em Home e Business, 32 e 64 bits.

Apesar de não ter visto nada oficialemente, dizem que o nosso amigo Bill (Gates) falou entusiasticamente deste novo SO, referindo também que estaria a publico qualquer coisa como no próximo ano devido ao facto de estar muito adiantado o seu desenvolvimento. No entanto, alguns bloggs, avisam o Sr. Bill nunca falou que seria o substituto do Vista, eu pessoalmente também não acredito na substituição do Vista, principalemente depois de ter sido o SO com maior investimento de marketing pela MS até ao momento... Acredito no entanto numa versão R2 do Vista ... que acham ?

quinta-feira, 3 de abril de 2008

Curiosidade C#/ Windows Forms

Viva,

este post é sobre algo curioso que encontrei hoje no código :)

Imaginem que tinham este código para gravar as settings do utilizador no ficheiro App.Config
de uma aplicação Windows forms em .net Framework 2.0.


System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
xmlDoc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
try
{
System.Xml.XmlNode xmlTreeDepth = xmlDoc.SelectSingleNode("configuration/Configuration/TreeDepth");
xmlTreeDepth.InnerText = tBoxPArvore.Text;
ApplicationConfig.TreeDepth = Convert.ToInt32(tBoxPArvore.Text);
xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
}
catch (Exception) { ..... }

Agora, vejam esta maneira diferente de gravar exactamente o mesmo parâmetro mas num ficheiro de settings, que permite exactamente o mesmo:

Properties.Settings.Default.TreeDepth = Convert.ToInt32(tBoxPArvore.Text);

Está longe de ser um post completo, contudo levanta aqui uma questão, será que exploramos de forma conveniente o que a Framework nos coloca disponível ?

:)

Prazo alargado Exames Beta ASP.NET ADO.NET

Para os interessados o prazo dos exames Beta para .net framework 3.5
em ASP.NET e ADO.NET foram estendidos.

Quem quizer tentar pode fazê-lo até ao dia 4 de Maio.

Mais informações em:
TS: Microsoft .NET Framework 3.5, ASP.NET Application Development
http://www.microsoft.com/learning/exams/70-562.mspx

TS: Microsoft .NET Framework 3.5, ADO.NET Application Development
http://www.microsoft.com/learning/exams/70-561.mspx

quarta-feira, 2 de abril de 2008

Exames SQL 2000 - disponiveis ate Marco de 2009

A par dos exames de desenvolvimento que serão retirados em 2009, será dado o merecido descanso também aos exames de SQL 2000

Microsoft SQL Server exams retiring on March 31, 2009
Exam 70-228: Installing, Configuring, and Administering Microsoft SQL Server 2000 Enterprise Edition
Exam 70-229: Designing and Implementing Databases with Microsoft SQL Server 2000 Enterprise Edition

Data de Retirada de Exames

Viva,

como todos sabem neste momento a última versão da .Net Framework é a versão 3.5.

Contudo há ainda alguns exames na versão 1.0 e 1.1 da Framework que ainda se encontram disponiveis para realizar.

Estes exames irão ser retirados no dia 31/03/2009

Podem ler mais sobre isto em: http://www.microsoft.com/learning/mcpexams/status/examstoretire.mspx

Entretanto a quem se pretender propor a fazer exames nesta versão da Framework .net ponderem também a questão do upgrade que terão de fazer para a versão 2.0.

Isto implica pelo menos mais um exame, mas isso tem de ser visto caso a caso para se validar se existe essa migration path.

Cumps

Luís

Service Pack 3 para XP em RC2

O Service Pack 3 para o Windows XP chegou a RC2 e está agora disponível ao publico em geral para download e instalação.

Windows XP SP3 RC2 download

Estava prevista lançamento em RTM para 31 de Março de 2008, no entanto, o Gigante de software ainda não anunciou nada publicamente.

É dito que esta situação poderá estar a acontecer para encorajar as vendas de Windows Vista. Eu sinceramente não acredito que seja este o motivo ... mas qual será?

Acredito também que esta versão RC2 esteja praticamente igual à que sairá em RTM, eu instalava ;) se usasse XP hehehe

Dia das Mentiras

Pois é Hugo e Flávio mentira e com toda a razão :) a Microsoft, que eu tenha conhecimento não comprou mais nada desde 20 de Março com a aquisição da empresa de Segurança KOMOKU.

Mas já imaginaram o "Looking Glass" (SUN) em todo o seu explendor com a capacidade de distribuição da Microsoft ?

Não sabem o que é o Projecto Looking Glass ?? então vejão um video de apresentação aqui.

E lembrem-se que esta apresentção ocorreu em 2003 :P

Abraço a todos

terça-feira, 1 de abril de 2008

Microsoft compra SUN

Acreditem ou não Microsoft adquiriu a SUN por 1000 Milhoes de Euros

Empregados da SUN despediram-se em massa.

Darei mais novidades amanhã

segunda-feira, 31 de março de 2008

Upgrade MCSA e MCSE para W2K3

Amigos, boas noticias!!!

Foi alargado o prazo para os exames 70-292 e 70-296 upgrade de MCSA e MCSE de windows 2000 para windows 2003.

Se houver alguem interessado em realizar o exame ... é só avisar para procedermos à marcação.

No entanto a marcação terá que ser realizada o mais cedo possível ... Força nisso pessoal!

sábado, 29 de março de 2008

2 Oportunidades para fazer um exame Microsoft

Acredito que a maioria das pessoa já saiba, mas nunca é demais divulgar.

Pois é, o prazo foi extendido, agora é possível fazer um exame Microsoft e caso o resultado não seja "passed", podemos repetir o exame, SEM CUSTOS.

Excelente oportunidade para todos os que querem fazer aquele exame que ... ou para quem nunca fez um exame e tem receio porque não sabe o que esperar ... é de arriscar não?

Mas, como sempre existe um mas, apesar de podermos fazer quantos exames quisermos com esta oferta, a 1ª chance de cada exame terá de ser sempre realizada antes de 31 de Maio e a segunda chance do mesmo exame tem um prazo ligeiramente mais alargado, até 30 de Junho.

Apostem que sabem ... e boa sorte

Mais informações podem ser lidas no site oficial

terça-feira, 25 de março de 2008

Certificações .Net Framework 2.0 MCTS

Com este post, pretendo informar os consultores que se encontram na área de desenvolvimento,
em tecnologia .Net da Microsoft, para que possam saber quais os exames que estão disponíveis
para esta versão da Framework.

Vou descrever um dos níveis, a que se podem chegar com as certificações,
neste caso o primeiro.

MCTS - Microsoft Certified Tecnology Specialist

Para MCTS, temos os seguintes percursos:

1 - .NET Framework 2.0 Windows Applications
2 - .NET Framework 2.0 Web Applications
3 - .NET Framework 2.0 Distributed Applications

Para todos o exame 70-536 é obrigatório, alerto que este exame é válido no novo ciclo de certificações em .NET Framework 3.5.

Para se ser MTCS Windows Applications, necessitamos de dois exames:
70-536 TS: Microsoft .NET Framework 2.0 – Application Development Foundation
70-526 TS: Microsoft .NET Framework 2.0 – Windows-Based Client Development

Para se ser MCTS Web Applications, necessitamos de dois exames:
70-536 TS: Microsoft .NET Framework 2.0 – Application Development Foundation
70-528 TS: Microsoft .NET Framework 2.0 - Web-Based Client Development

Para se ser MTCS Distributed Applications, necessitamos de dois exames:
70-536 TS: Microsoft .NET Framework 2.0 – Application Development Foundation
70-529 TS: Microsoft .NET Framework 2.0 – Distributed Application Development

Portanto, a reter, para se obter o grau de MCTS são necessários sempre dois exames.
O 70-536 é comum a todos e como tal só necessita de ser feito uma vez.
Este exame (70-536) uma vez feito com aproveitamento confere o "grau" de
TS: Microsoft .NET Framework 2.0 – Application Development Foundation.

Se só se fizer um exame, o consultor fica um TS - Technology specialist, por exemplo se um consultor fizer o exame 70-526, fica um TS em Windows Based Client Development.

No próximo post, irei descrever o nível seguinte de certificações o MCPD - Microsoft Certified Professional Developer, adianto que este nível obriga a que se seja um MCTS.


quinta-feira, 20 de março de 2008

Certificação em Windows 2008

Desde o inicio de Março, as certificações Windows Server 2008 technology specialist estão disponíveis. Se não soubeste me primeira mão ... aqui via em segunda :)

Bom, são estes os exames de MCTS (Microsoft Certified Technology Specialist) par aWindows 2008

* Exam 70-640 TS: Windows Server 2008 Active Directory, Configuring
* Exam 70-642 TS: Windows Server 2008 Network Infrastructure, Configuring
* Exam 70-643 TS: Windows Server 2008 Applications Infrastructure, Configuring

Mais noticias sobre os novos exames virão ... estejam atentos

quarta-feira, 19 de março de 2008

Exams Retiring on 31 March

A Microsoft anunciou que existirão exames que deixarão de se poder realizar a partir de 31 de Março de 2008.

Abrangem diversas áreas como Windows Server 2000, Windows NT 4.0, Exchange Server 2000

A meu ver, o mais significativo é o facto do upgrade de MCSA/MCSE em 2000 deixar de ter um upgrade para 2003.

Relembro que a unica certification path de "upgrade" para Windows 2008 é através do MCSA/MCSE em Windows 2003.

Podem consultar aqui

BEM VINDOS

Olá

Este é um blog não oficial e de estilo descontraido relatando tudo o que a AGAP2 tem para oferecer no que diz respeito ao mundo Microsoft.
Aqui dão-se noticias, esclarecem-se duvidas, dão-se conselhos ... e tudo mais que pudermos oferecer :)

Sejam bem vindos esperamos que voltem sempre!