Eduardo Spaki

April 2008 - Posts

F#: linguagem funcional que impulsionou tecnologias .NET!

F# é linguagem funcional, orientada a objetos, anunciada pela Microsoft no final de 2007 e agora integrada ao Visual Studio.

Uma linguagem funcional tem grandes recursos para problemas acadêmicos, como modelagens matemáticas, cálculos de funções e equações, modelagem 2D e 3D etc.

Isso se deve ao fato dass linguagens funcionais dar suporte à simultaneidade, estimulando a existência de estruturas de dados imutáveis que podem ser passadas entre threads e máquinas sem a preocupação com a segurança do thread ou o acesso atômico

Como podemos ver, membro recente da família .NET Framework, a F# fornece segurança de tipos, desempenho e habilidade de trabalhar como uma linguagem de script, tudo parte do ambiente .NET. Essa linguagem funcional foi criada por Don Syme da Microsoft Research como uma variante OCaml de sintaxe compatível ao CLR, mas a F# está se movendo rapidamente do laboratório para a vida prática.

Conforme a programação funcional surge em linguagens mais importantes como C# e Visual Basic através de tecnologias como genéricos do .NET e LINQ, a visibilidade da F# cresceu na comunidade .NET – tanto que em novembro de 2007 a Microsoft anunciou que daria à linguagem F# a estabilidade das linguagens de programação .NET suportadas.

A F# tem um perfil de desempenho semelhante à C#. Entretanto, ela tem um perfil de desempenho muito melhor do que linguagens sucintas semelhantes, em particular as linguagens dinâmicas e de script. E, como muitas linguagens dinâmicas, a F# inclui as ferramentas que permitem que você explore dados, escrevendo fragmentos de programa e executando-os interativamente.

Disponível para download gratuito em http://research.microsoft.com/fsharp/fsharp.aspx, a F# instala não somente todas as ferramentas de linha de comando mas também um pacote de extensão do Visual Studio (isso significa sintaxe de cor, modelos de projeto e de arquivo e suporte a IntelliSense).

Simplesmente aprender a F# ajudará você a compreender muitos dos recursos das versões futuras de C# e Visual Basic, já que muitas dessas idéias e conceitos – incluindo genéricos, iteradores (a palavra-chave “yield” em C#), e LINQ – surgiram de raízes funcionais e da pesquisa conduzida pela equipe da F#. Seja qual for sua opinião sobre a F#, a programação funcional está aqui e veio para ficar.

 

F# dando oi:

printf "Hello, world!"

dê seu oi para ela ;)

 

Mais detalhes nos blogs dos criadores:
http://blogs.msdn.com/somasegar/archive/2007/10/17/f-a-functional-programming-language.aspx
http://blogs.msdn.com/dsyme/archive/2007/10/17/s-somasegar-on-taking-f-forward.aspx#comments

 

Fonte: http://msdn.microsoft.com/pt-br/magazine/cc164244.aspx

Themes, Skins & Master Page in ASP.NET

Antes de começar:

O exemplo foi projetado no Visual Studio 2008 e compilado no .NET framework 3.5.

Usamos uma herança da Classe Page do framework, para assim, poder sobrescrever o método Pre_Render(), podendo assim, atribuir uma skin ao site, aproveitando o recurso da Master Page.

A pouca codificação é uma credibilidade, apesar de certo espanto de alguns, como diriam: Se esta complicado no .NET é porquê você está fazendo errado!


Introdução:

As aplicações web, sites, portais, blogs etc... estão cada vês mais dinâmicos com conteúdo variado e uma rica mídia a disposição, assim como uma flexibilidade enorme de apresentação deste conteúdo.

O desenvolvedor web se flagra em muitas ciladas para desenvolver interfaces de usuários flexíveis, dinâmicas... e por que não “mutantes”!?

Já pararam para usar os temas e skins do ASP.NET, principalmente com Master Pages?

O ASP.NET dispõe destes recursos que dão ao desenvolvedor o poder para trazer flexibilidade e dinâmica do desing do seu projeto web sem sofrer muito com codificação ou repetição de códigos, economizando tempo e trazendo funcionalidades diversas à aplicação.

Isto também nos remete aos modelos de camadas onde há uma separação de funcionalidades e múltiplas interfaces de usuário. Utilizando estes recursos, nós separamos metodicamente as interfaces de usuário das funcionalidades.

Procurei reunir as informações primordiais para implementar um site e/ou aplicação web com uma interface rica e dinâmica no frontend , usufruindo deste simples recurso que o ASP.NET dispõe, criando assim “templates” para o seu site/aplicação.


Criando Projeto:

Crie um novo projeto ASP.NET Web Application ou simplesmente siga os próximos passos para implementar esta funcionalidade em uma aplicação e/ou website existente.

Criando um novo projeto ASP.NET Web Application no Visual Studio 2008.



Adicionando a Mater Page:

Se você não sabe o que é uma Master Page¸ no ASP.NET, é uma alternativa inteligente ao “iframe” do HTML. Basicamente ele define a estrutura básica do seu site, deixando o espaço definido aonde os conteúdos serão inseridos (ContentPlaceHolder), ex: Você pode desenha o cabeçalho e o menu da sua página em uma Master Page, e eles se repetirão nas páginas associadas a ele.

Adicione um novo item, clicando com o botão direito no seu projeto:

Adicionando novo item.

Escolha o template Master Page:

Adicionando a Master Page.

A Master Page tem funcionalidades similares a de uma página APS.NET comum. Seu layout ficará assim:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Principal.master.cs" Inherits="TutorialSkin.MasterPage.Principal" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
    <link href="../Estilos/Geral.css" rel="stylesheet" type="text/css" />
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    <div id="divCabecalho" class="Cabecalho">
        <p>Demonstração de Themas/Skins.</p>
    </div>
    <div class="Menu">
        <asp:DropDownList ID="DdlTemas" runat="server" AutoPostBack="true" >
            <asp:ListItem>Azul</asp:ListItem>
            <asp:ListItem>Verde</asp:ListItem>
            <asp:ListItem>Laranja</asp:ListItem>
        </asp:DropDownList>   
    </div>
    <div>
        <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
       
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>
(ASP e HTML da Master Page)

Layout da Master Page.

Basicamente adicionei uma “div” de cabeçalho e outra “div “de menu. No menu adicionei um “DropDownList” com a lista dos temas, definidos na mão mesmo, com “ListItem”. É importante observar que este “DropDownList” tem a propriedade “AutoPostBack” setada para “true”, mesmo não disparando nenhum evento.

Atente-se à propriedade “class” das “divs”, pois ela estará ligada aos arquivos de estilos que criaremos.

Dica: Cuidado, pois a Master Page repetira o código HTML gerado pelo ASP.NET em cada página relacionada a ela. Para amenizar isto, use de boas técnicas de design, como o CSS, por exemplo.


Adicionando Skin:

Adicione novos itens do tipo Skin, nomeando eles de acordo com a base da skin, no meu caso coloque os seguintes: Azul, Verde, Laranja.

Adicionando uma skin.

Pergunta sobre a pasta onde serão armazenados os temas.

Ao adicionar as skins o Visual Studio perguntará se deseja usar a pasta padrão para o controle de temas, por comodidade organizacional responderemos que sim.

Cada arquivo skin conterá as definições de aparência dos componentes, e cada pasta de tema pode conter os arquivos de CSS necessários. Logo nossa estrutura de pastas e arquivos ficaram organizadas assim:

Pastas e arquivos do projeto.

Note que incluí uma pasta “Estilos” onde ficaram os arquivos de CSS mais gerais. E para cada tema incluí o CSS relativo ao tema. Incluí também uma pasta com algumas imagens de cabeçalho para o exemplo.


CSS:

CSS: são nossos arquivos de estilo, definição de cores, design e layout das páginas.
O arquivo nomeado de “Geral.css” ficou com definições de layout:

body
{
 margin: 0px;
 padding: 0px; 
}

.Menu
{
 width: 698px;
 text-align: right;
}
(CSS do arquivo “Geral.css”)

Obs: A master page deve conter a referência deste arquivo.

<head runat="server">
    <title>Untitled Page</title>
    <link href="../Estilos/Geral.css" rel="stylesheet" type="text/css" />
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
(Definição do “Geral.css” na master page)

Para os arquivos de CSS dentro dos temas apenas defini a imagem cabeçalho correspondente:

.Cabecalho
{
 background-image: url("/Imagens/CabecalhoAzul.jpg");
 font-family: Verdana;
 font-size: 30px;
 font-weight: bold;
 text-indent: 70px;
 width: 700px;
 height: 70px;
 color: #229ABD;
 line-height: 70px;
}
(Definição do cabeçalho via CSS)


Definição da skin:

O arquivo de skin, como já mencionado, define a aparência dos componentes da sua página, ex:

<asp:DropDownList runat="server" ForeColor="Blue"></asp:DropDownList>

<asp:Label runat="server" ForeColor="Blue"></asp:Label>

<asp:TextBox runat="server" ForeColor="Blue" BorderWidth="1px" BorderStyle="Solid" BorderColor="Blue"></asp:TextBox>

<asp:Button runat="server" BorderStyle="Solid" BorderColor="Blue" BorderWidth="1px" ForeColor="Blue" BackColor="#EEEEEE"></asp:Button>
(Definição dos componentes via skin)

Note que é como definirmos um objeto na tela, porém setando apenas as propriedades visuais. Neste arquivo defini o visual dos objetos “DropDownList”, “Label”, “TextBox” e “Button”, más não se limita somente nisto, podemos definir detalhadamente o visual de um “GridView” por exemplo.


As páginas do Site/Aplicação:

Antes de adicionar uma página, adicionaremos um arquivo que servirá de base para nossas páginas: uma classe que herdará a classe “System.Web.UI.Page”, é nele que será realizada a troca das skins de forma simples e transparente.

Classe base para as páginas.

Realizaremos a troca da skin sobrescrevendo o método “Page_PreInit()”, este método é executado antes da página ser renderizada.

using System;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

namespace TutorialSkin
{
    public class PaginaBase : Page
    {
        // -> Realiza a troca de skin antes de renderizar a página.
        protected void Page_PreInit(object sender, EventArgs e)
        {
            string tema = Request[Master.FindControl("form1").FindControl("DdlTemas").UniqueID];

            if (!string.IsNullOrEmpty(tema))
                Theme = Request[Master.FindControl("form1").FindControl("DdlTemas").UniqueID];
        }
    }
}
(Codificação da página base)

Para definirmos o tema atual de nossas páginas tivemos de verificar o “Request” do “DropDownList” , que colocamos na master page e causou um post back devido ao “AutoPostBack”. Resgatamos seu valor pelo seu “UniqueID”, então cuidado na hora de dar os finds, principalmente com o form da master page.

Agora nos resta trabalharmos nas páginas (arquivos “*.aspx”), atentando-nos “ àlguns detalhes.

Primeiramente as páginas devem ser associadas à nossa master page, assim sendo, adicionaremos um item do tipo “Web Content Form”.

Adicionando uma página que terá uma master page associada.

Selecionando uma master page.

Agora com nossa página adicionada, temos o seguinte code behinde:

    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }

(Página ASP recém adicionada)

Devemos simplesmente alterar a herança do code behind para nossa página base, ficando assim:

    public partial class Default : PaginaBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }

(Herança alterada)

Para o exemplo eu apenas coloquei três componentes na página para verificarmos o funcionamento dos temas, são eles: “Label”, “TextBox”, “Button”.

<%@ Page Language="C#" MasterPageFile="~/MasterPage/Principal.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TutorialSkin.Default" Title="Themes & Skin by Eduardo Spaki" Theme="Azul" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <div>
        <p><asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></p>
        <p><asp:TextBox ID="TextBox1" runat="server">Exemplo</asp:TextBox></p>
        <p><asp:Button ID="Button1" runat="server" Text="Button" /></p>
    </div>
</asp:Content>

(“.aspx”” da página recém adicionada)

Layout da página.

Na tag “Page” eu coloquei a propriedade “Theme” como “Azul” para deixar este tema como o padrão da página.

Não tem mais segredo, somente testar e ver o resultado, podendo programar o restante do site de acordo com as necessidades. E toda vez que for selecionado um tema no “DropDownList” que está definido na master page, a aplicação trocará de aparência, de acordo com as skins e CSSs dos temas.


Testando:

Compile e veja os resultados, trocando o tema no “DropDownList”:

Tema Azul.

Tema Verde.

Tema Laranja.



Considerações Finais:

A definição de um tema default pode ser pelo arquivo de configuração da aplicação “web.config”:

<configuration>
    <system.web>
        <pages theme=“Azul” />
    </system.web>
</configuration>

(Definição do tema default  no web.config)

... ou por página, na tag “Page”, propriedade “Theme”:

<%@ Page Language="C#" MasterPageFile="~/MasterPage/Principal.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TutorialSkin.Default" Title="Themes & Skin by Eduardo Spaki" Theme="Azul" %>
(Definição do tema default por página)

Algumas outras idéias podem ser utilizadas para fazer com que os temas sejam personalizados por funcionalidades e/ou usuários, como: cookies, membership etc.

Os componentes também podem conter uma referência pela propriedade “SkinID”.

Algo um pouco chato talvez seja algumas repetições de CSS e linhas nas skins.


Conclusão:

Sintetizado, estas funcionalidades e dicas agregam um valor ao resultado final de seu projeto que, em muitos outros casos, desenvolvedores gastaram tempo e dinheiro para fazer algo que funciona-se de forma duvidosa.

Combinamos tecnologias e boas práticas para desenvolver algo correto, leve e funcional.

Não se deve ficar engessado, devemos usufruir desta tecnologia que nos poupa codificação e repetição de inúmeras linhas de códigos e tags. O ASP e o .NET estão aí para facilitar e flexibilizar!

Qualquer sugestão ou dúvida: comentem ou entrem em contato, seu feedback é importante!

Caso queiram, posteriormente posso estar falando sobre Master Page e Master Page aninhada... talvez sobre aplicação multi-idiomas, depende do que opinarem...

Espero ter sido útil e aberto algumas mentes. Abraços...


Referências:
http://www.codeproject.com/KB/aspnet/ThemesAndSkins.aspx
http://aspalliance.com/959
http://www.linhadecodigo.com.br/Artigo.aspx?id=958


Download do Exemplo!

Abraços... Eduardo Spaki.

Email com .NET

Só registrando então... o Vanderlei Pina teve algumas dúvidas sobre o envio de email com as classes do .NET Framework, e eu disponibilizei o seguinte código para ele, que espero que seja de proveito de todos:

        public void EnviarEmail(string emailDestino, string titulo, string mensagem)
        {
            // -> Necessário: System.Net; System.Net.Mail;

            MailMessage email = new MailMessage();
            SmtpClient smtp;

            try
            {
                smtp = new SmtpClient("smtp.seuhostsmtp.com.br");

                // -> esta linha só é necessária caso o servidor de smtp pedir autenticação.
                smtp.Credentials = new NetworkCredential("usuário", "senha");

                email.From = new MailAddress("seuemail@seuprovedor.com");
                email.To.Add(emailDestino);
                email.Subject = titulo;
                email.Body = mensagem;

                // -> Notificação de sucesso
                email.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;

                // -> A confirmação de leitura é realizada alterando o cabeçalho Disposition-Notification-To
                email.Headers.Add("Disposition-Notification-To", string.Format("<{0}>", email.From));

                smtp.Send(email);
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("Erro ao Enviar e-mail. Detalhes: {0}", ex.Message));
            }
        }

Neste exemplo temos os controles de notificação de recebimento e leitura... em breve estarei postando um artigo sobre como enviar e-mail com anexo e formatação html e outros detalhes

até mais

Sistema Operacional Microsoft Singularity

Se você não ouviu falar do Singularity saiba que ele é um projeto da Microsoft para desenvolver tecnologias que a empresa acha que terão lugar nas próximas gerações de sistemas operacionais.

Provavelmente ele não será substituto do Windows mas sim a incubadora de muitas características técnicas que as próximas versões de Windows terão.

Entre seus conceitos fundamentais estão arquitetura verdadeiramente microkernel, uso de código gerenciado para partes fundamentais do sistema, como controladores de dispositivo e o próprio kernel e isolamento de processos por software através do uso de linguagens com gerenciamento de memória como o C#.

Vídeo: http://channel9.msdn.com/Showpost.aspx?postid=227260

No vídeo o sistema aparece funcionando. Mas não corra lá pensando em ver algo maduro ou realmente fazendo algo de útil. A única coisa que aparece é uma tela em modo texto (um shell) do Singularity rodando sobre Virtualização no Windows. Os programadores até brincam com isso, dizendo que sua interface parece com a do Windows XP. E quando o Singularity realmente roda em modo texto dizem que é a interface em estado-de-arte ;-)
...aliás, a interface texto no Singularity é chamada Shell como no UNIX e não cmd ou command como no Windows. Para quem tem intimidade com o UNIX muitos outros detalhes estarão visíveis e chamarão atenção, como um /dev na estrutura de arquivos para os dispositivos de hardware e um comando kill para matar aplicações mal comportadas e até mesmo o sistema de arquivos do HD rodando como um processo separado e transparente. Engraçado perceber que a visão de futuro da Microsoft parece e comporta-se muito mais como o passado do que como o presente.

Overview: http://research.microsoft.com/research/pubs/view.aspx?msr_tr_id=MSR-TR-2005-135

A Microsoft também liberou para download a versão 1.1 do Singularity Research Development Kit (RDK), sob uma licença que permite seu uso para fins acadêmicos e não-comerciais (ou seja, não é "open source" no sentido de se poder fazer o que quiser com o material, inclusive ganhar dinheiro). Ainda assim, é um conceito interessante de sistema operacional, onde tudo, de drivers a aplicativos, roda em processos totalmente isolados conhecidos como SIPs (Software Isolated Processes) sem depender de suporte do hardware para tal (como acontece hoje com Windows e Linux). Isso garante um nível de segurança não disponível em nenhum outro sistema operacional comercial. Antes que alguém pergunte: não, o próximo Windows não vai se basear no Singularity, mas eventualmente a tecnologia nele desenvolvida vai ser usada em algum momento nas futuras versões. Nos fóruns do projeto na Microsoft há comentários de usuários que conseguiram instalar e rodar este release com sucesso usando o Virtual PC, porém outros tiveram dificuldades para instalá-lo em hardware real.

SDK: http://www.codeplex.com/singularity


Fonte: http://www.meiobit.com/

Robotics Studio SDK

A Microsoft está entrando num novo mercado no qual ela disse ter sido travada pela ausência de normas e uniformidade: a robótica. A tecnologia tem sido amplamente utilizada há anos, como na montagem de automóveis e, mais recentemente, dispositivos domésticos como o iRobot Roomba, um aspirador de pó automatizado.

O desafio para conseguir um uso mais amplo, de acordo com Tandy Trower, gerente geral da Microsoft Robotics Group, é parecido com o início da indústria de PCs. Não existe nenhuma plataforma comum, não há um ambiente comum de desenvolvimento, nada que possa ser reutilizado de um projeto para outro.

Isso inclui conhecimento profissional. Dois chips sensores similares podem exigir maneiras totalmente diferentes de programação, obrigando os desenvolvedores a criar peças específicas de hardware.

Portanto, hoje, a Microsoft está introduzindo o Microsoft Robotics Studio SDK (software development kit), um kit de desenvolvimento que esteve em teste durante meses. É constituído por três componentes: O runtime para controlar diferentes robôs, ferramentas de autoria para escrever códigos em C#, Visual Basic ou Python, e serviços e amostras de código.

O Robotics Studio SDK da Microsoft já está disponível para desenvolvedores por US$ 399,00, para fins comerciais, ou disponível para download gratuito por acadêmicos, pesquisadores e estudantes.

Download: http://msdn.microsoft.com/robotics/

Fonte: http://www.babooforum.com.br/forum/index.php?showtopic=633343

Posted: Apr 14 2008, 11:56 AM por spoky | com 1 comment(s)
Abaixo de: , ,
Dicas SQL Server 2005

Aí vai um link com algumas dicas rápidas e úteis do SQL Server 2005...
Dentre elas temos destaques como: paginação, uso de try catch, transformar linhas em colunas... aproveitem ;)

 http://www.scribd.com/doc/490503/Sql-Server-2005

Abraços

Eduardo Spaki.

Posted: Apr 10 2008, 09:38 PM por spoky | com no comments
Abaixo de:
Simplificando com .NET

Hail!!!
Primeiramente parabéns ao Carlos e ao Márcio Fábio pela iniciativa do SharpCode e oportunidade de estar compartilhando informações e tecnologia com vocês.
Eu e o Márcio estaremos atuando como líderes da comunidade .NET em Maringá/PR, então fiquem antenados: Novidades, eventos e outras iniciativas estão sendo publicadas por aqui.
Trabalho com .NET há algum tempo. Neste tempo já tive um contato variado com as técnologias que cercam este mundo de produtividade em software. Do ASP.NET até o .NET Compact Framework for Pocket Pcs & Smartphones houve uma gama de experiências que estou aperfeiçoando e estarei relatando aqui também.
Nos posts sobre tecnologias, tutoriais e afins... procurarei discutir assuntos que agregam valores às aplicações, más, como não temos um contato tão freqüênte, sua implmentação fica comprometida.
.NET é simples, e vou mortrar-les isto!

Abraços,
Eduardo Spaki.

 

Posted: Apr 10 2008, 02:22 PM por spoky | com no comments
Abaixo de: