quarta-feira, 21 de setembro de 2011

Aplicações Web para Mobile

Enquanto explorava na internet informação para um projecto mobile para um cliente da Simple Solutions, encontrei este vídeo de um funcionário da Google que mostra a grande potencialidade do mercado dos Smartphones!!



No inicio do vídeo demonstra que Smarthphones estão:
·         Sempre ligados!
·         Sempre connosco!
·         Sempre ligados à rede!

Em poucos anos os telefones transformaram-se em “Telefones inteligentes” que têm tudo! Se analisarmos a utilidade de um smartphone temos acesso a redes sociais, e-mail, navegar em sites, ler noticias, consultar o tempo, ouvir musica, tirar fotos, compartilhar arquivos, digitar textos, filmar uma cena, navegar no GPS ou simplesmente telefonar, isto na palma da mão.

E com a internet 3G com cada vez mais planos acessíveis, encoraja cada vez mais o uso desse tipo de tecnologia.
Será que um dia estes “telefones inteligentes” vão substituir a 100% os nossos PC’s?!

Notas sobre criação de mobile sites

Não encontrei muito sobre com desenvolver websites ASP.NET para Mobile e acabei apenas por me basear apenas no http://www.asp.net/mobile, pois aqui temos disponibilizado um exemplo de site base e links para descarregar emuladores e simuladores para testar a aplicação nos diferentes telemóveis.

A decisão inicial da criaçao de um  à parte para a versão mobile ou cria-lo no site actual. Para ambos os casos terá de ser feito o redireccionamento dos visitantes dos telemóveis para o site mobile. È conveniente fazer este redireccionamento apenas no primeiro pedido porque os visitantes podem querer consultar o site normal e disponibilizar um link no site mobile para o site normal.
Ao criamos um site mobile dentro do já existente site, dependendo dos requisitos podemos usar os mesmos Web Forms para todos os visitantes, mas temos de ter duas Master Pages (site normal e para o mobile). Isto dá a flexibilidade de alterar o CSS para se adequarem aos dispositivos móveis sem ter que duplicar a lógica da página.
Tópicos para optimização de sites smartphones

·         Criar url’s curtas (por exemplo: m.site.pt)
·         Usar CSS para optimizar o site em formatos de ecrãs pequenos, assim evita o desconforto do utilizador em sites desconfigurado por causa de resolução.
·         Não esquecer de redimensionar as imagens fisicamente, isso ajuda a melhorar a experiência do utilizador com tempo de carregamento mais rápido.
·         Evitar o uso de frames ou javascript, pois no geral tornam o site muito lento além de que em alguns browsers o JavaScript acaba por parar e fecha o aplicativo.
·         Usar layout diferentes da versão mobile com a desktop.


webografia:
http://www.wsiconsultoria.com/search-marketing/otimizacao-de-sites-para-mobile
http://www.asp.net/mobile

quinta-feira, 30 de junho de 2011

LINQ e a Framework .Net


LINQ

Language Integrated Query (LINQ) é um conjunto de extensões à plataforma .Net que facilita a manipulação de conjuntos de objectos, permitindo também manipular os conjuntos com uma sintaxe muito semelhante à utilizada no SQL.

exemplo 1:
String[] ss = new String[] {"20", "100", "313", "2222", "111"};
IEnumerable<int> numbers = ss
.Where(x => x.Contains("1"))
.Select(x => Int32.Parse(x));

exemplo 2:
String[] ss = new String[] {"20", "100", "313", "2222", "111" };
IEnumerable<int> numbers =
from s in ss
where s.Contains("1")
select Int32.Parse(s);

O exemplo 1 mostra como utilizar LINQ para obter todas as Strings presentes no array ss que contenham o carácter ‘1’ e como as transformar em inteiros. Neste exemplo a variável numbers irá conter os inteiros 100, 313 e 111. O exemplo 2 demonstra como obter o mesmo resultado que o exemplo 1 mas utilizando a sintaxe de query do LINQ.

Algumas das principais características da Framework .Net que possibilitam a existência do LINQ são:
  • Extension methods
  • Object and Collection Initializers
  • Type Inference (var)
  • Anonymous Types
  • Lambda Methods
  • Keyword yield


Extension methods

Um extension method (ou método de extensão) é um método estático que pode ser chamado como se fosse um método de instância de uma outra classe. Basicamente os extension methods foram criados para possibilitar adicionar métodos de instância a classes às quais não se tem acesso ao seu código fonte e não é possível derivar delas.

exemplo 3:
public static class ExtencoesString {
public static String Prefixar(this string s, string prefixo) {
return prefixo + s;
}
}

No exemplo 3 é criado o extension method Prefixar que irá estender a classe String, ou seja passa a ser possível chamar o método Prefixar sobre instâncias de String. O primeiro parâmetro de um extension method contém a palavra-chave this, indicando assim a classe que está a ser estendida (neste caso a classe String). Esse parâmetro representa a instância da classe sobre a qual o método foi chamado. Os extension methods têm de ser estáticos e só podem ser definidos em classes estáticas. O extension method Prefixar limita-se a prefixar à String sobre o qual é chamado (parâmetro s) com a String passada no parâmetro prefixo.

exemplo 4:
String t = "tarde";
System.Console.WriteLine(t.Prefixar("Boa "));

O exemplo 4 demonstra a utilização do extension method Prefixar. O exemplo escreve na consola o texto “Boa tarde”.

Os extension methods não passam de um facilitismo sintáctico do compilador. Quando o código for compilado as chamadas aos extension methods serão transformadas nas chamadas aos respectivos métodos estáticos. Devido a este comportamento, é também possível declarar extension methods sobre interfaces.

Grande parte dos métodos do LINQ são extension methods que estendem a interface IEnumerable.


Object and Collection Initializers

Object initializer é uma sintaxe que permite afectar campos e propriedades publicas de objectos a quando a sua construção. A ideia da sintaxe de object initializer é a de chamar o construtor do objecto e afectar as propriedades desse objecto na mesma expressão.

exemplo 5:
public class Ponto {
public int X { get; set;}
public int Y { get; set;}
}

Ponto ponto = new Ponto();
ponto.X = 5;
ponto.Y = 10;

exemplo 6:
Ponto ponto = new Ponto { X = 5, Y = 10};

O exemplo 5 mostra a criação de uma instância da classe Ponto, e a afectação das suas duas propriedades. Nesse exemplo para criar a instância e afectar as suas propriedades foram necessárias 3 instruções. A sintaxe de object initializer, demonstrada no exemplo 6, permite que a chamada ao construtor e a afectação das propriedades da instância sejam feitas na mesma expressão. O código do exemplo 6 obtêm o mesmo resultado que o do exemplo 5.

Collection initializer trás a ideia do object initializer para as Collections. Basicamente permite criar Collections e inserir objectos nas Collections numa só expressão (algo semelhante à sintaxe de criação e inicialização de arrays).

exemplo 7:
int[] n = new int[] {1,2,3,4,5};
List strings = new List {"a", "b", "c", "d"};

O exemplo 7 demonstra o uso da sintaxe de collection initializer (bem como a sintaxe de inicialização de arrays).

Os object e collection initializers trazem alguma simplificação na sintaxe de declaração de lambda methods, o que por sua vez simplifica a sintaxe das operações LINQ onde sejam utilizados lambda methods.


Type Inference (var)

O type inference permite criar variáveis sem declarar o seu tipo.

exemplo 8:
var x = new float[2];
//x = "dois"; // erro de compilação

O exemplo 8 demonstra o uso de type inference. É criada uma variável x sem indicar qual o seu tipo. Para tal coloca-se a palavra-chave var no lugar onde normalmente se colocaria o nome do tipo da variável. Quando o código é compilado, o compilador infere o tipo da variável através do valor com que a variável é afectada, no caso deste exemplo a variável x é do tipo array de float porque é afectada por um array de float.

È de notar que type inference não torna o tipo da variável dinâmico. O compilador obriga a que na declaração de uma variável que utilize a palavra-chave var, essa variável seja afectada. È essa afectação que o compilador utiliza para inferir o tipo da variável. Ao tentar-se afectar a variável com uma expressão que devolve uma instância de um tipo não compatível com o tipo devolvido na primeira afectação da variável, será gerado um erro de compilação. Por exemplo se o comentário da segunda linha do exemplo 8 for retirado, o código passa a gerar um erro de compilação. Isto porque o tipo inferido da variável x é array de float e está-se a tentar afectar a variável com uma String.

Esta sintaxe é utilizada normalmente com o uso de tipos anónimos, pois não se sabe o nome do tipo e por isso é necessário utilizar type inference para criar variáveis desse tipo.


Anonymous Types

Anonymous types permite a criação de tipos anónimos.

exemplo 9:
var morada = new {
Morada = "Av Liberdade",
Localidade = "Lisboa",
CodigoPostal = 1234,
Pais = "Portugal"
};

O exemplo 9 demonstra a criação de um tipo anónimo que representa uma morada. Como não se sabe o nome do tipo, é necessário utilizar type inference para declarar uma variável desse tipo. Um anonymous type não é um tipo dinâmico. Por cada anonymous type com propriedades com nomes e tipos diferentes, o compilador cria um tipo com as propriedades especificadas e com um nome gerado automaticamente.

exemplo 10:
public class Produto {
public String Nome { get; set; }
public int Categoria { get; set; }
public String Referencia { get; set; }
public float Preco { get; set; }
}

Produto[] produtos = new Produto[] {
new Produto() { Nome = "Produto 1", Categoria = 12, Referencia="A3W", Preco = 10 },
new Produto() { Nome = "Produto 2", Categoria = 23, Referencia="E$R", Preco = 20 },
};

var infoNomePreco = produtos.Select(x => new { Nome = x.Nome, Preco = x.Preco });

Os anonymous types são muito utilizados em LINQ, especialmente nos métodos Select onde se quer apenas obter alguns campos de uma estrutura de dados. Invés de estar a criar outra estrutura de dados, que apenas contém esses campos e que apenas será utilizada naquela situação, devolve-se um anonymous type com os campos pretendidos. O exemplo 10 demonstra esse comportamento. Existe um conjunto de Produtos mas apenas se quer saber o nome e preço desses produtos, para isso utiliza-se o método Select para transformar as instâncias de Produtos em instâncias de um tipo anonimo que apenas contém informação sobre o nome e preço dos produtos.


Lambda Methods

Lambda methods é uma sintaxe simplificada para declarar métodos anónimos. Esta sintaxe é muito semelhante à sintaxe lambda utilizada nas linguagens de programação funcional.

exemplo 11:
Func<int, bool> metodo1 = x => x == 0;
Func<int, int, int> metodo2 = (x, y) => x + y;

O exemplo 11 demonstra a declaração de dois métodos anónimos usando a sintaxe Lambda. A sintaxe Lambda está dividida em 2 partes:

(nome das variáveis) => expressão que o método devolve

Como se pode constatar, não se indica o tipo das variáveis, apenas o seu nome. O tipo das variáveis é inferido pelo tipo de delegate ao qual o Lambda method é afectado. O metodo1, do exemplo 11, como é afectado a um delegate que recebe um inteiro e devolve um booleano a variável x tem de ser do tipo inteiro e expressão de retorno do tipo booleano. O metodo1 indica se o parâmetro x é igual a zero.

O metodo2 recebe dois inteiros como parâmetros (x e y) e devolve um inteiro (que será soma dos seus parâmetros).

Caso o Lambda method só tenha um parâmetro, este não necessita de estar dentro de parênteses. Caso o número de parâmetros seja superior a 1, os parâmetros precisam de estar dentro de parênteses.

Em LINQ os Lambda methods são muito utilizados para declarar os delegates que os vários métodos do LINQ utilizam, isto porque os Lambda methods tornam a sintaxe de declaração de métodos anónimos muito mais simples.


Keyword yield

A palavra-chave yield é utilizada para facilitar a construção de iteradores.

exemplo 12:
public static IEnumerable Letras() {
yield return "a";
yield return "b";
yield return "c";
yield return "d";
for (int i = 1; i < 3; i++) {
yield return i.ToString();
}
yield break;
}

String[] letras = Letras().ToArray();


O método Letras do exemplo 12 devolve um conjunto de Strings, mais especificamente uma enumeração de Strings, na qual as Strings são acedidas atraves de um iterador. O método Letras faz uso da palavra-chave yield para construir a enumeração de Strings.

A palavra-chave yield indica ao compilador que aquele método é um bloco de iteração. O compilador gera um iterador que implemente o comportamento especificado pelo bloco de iteração. A instrução yield return indica um dos valores da enumeração, ou seja o resultado de uma iteração pela enumeração. A instrução yield break indica que o iterador chegou ao fim da enumeração, ou seja, que não existem mais elementos na enumeração.

Os valores da enumeração mantêm a ordem pela qual as instruções yield são executadas, isto é, como a instrução yield return "a"; é executada antes da yield return "b"; isto significa que elemento “a” aparecerá primeiro que o elemento “b” na enumeração devolvida pelo método Letras. No exemplo a variável letras irá conter os seguintes valores: a, b, c, d, 1 e 2.

A palavra-chave yield é utilizada por grande parte dos extension method do LINQ, pois facilita a implementação de iteradores. O exemplo 13 demonstra a implementação do método MyWhere que implementa o mesmo comportamento que o método Where do LINQ.

exemplo 13:
public static class Extensoes {
public static IEnumerable<T> MyWhere<T>(this IEnumerable<T> conjunto, Func<T, bool> predicado) {
foreach (T item in conjunto) {
if(predicado.Invoke(item)) {
yield return item;
}
}
yield break;
}
}

int[] s = new [] { 1, 24, 13, 38, 9, 3 };
int[] numerosImpares = s.MyWhere(x => (x % 2) != 0).ToArray();

A variável numerosImpares irá conter o seguinte conjunto de números: 1,13, 9 e 3.

terça-feira, 31 de maio de 2011

Como criar um web service e integrá-lo com um web site de Sharepoint?

Por vezes necessitamos que um web site Sharepoint comunique com um web service construído à medida e queremos que esse web service esteja acoplado ao próprio site, possibilitando a criação de um único pacote para instalação fácil de todo o projecto. Como é possível realizar isso?

Ferramentas a utilizar:
• Visual Studio 2008/2010
• .NET Framework Web Service Discovery Tool (Disco.exe)
• WSPBuilder


Criar um web service ASP.Net

1. Abrir a solução do web site Sharepoint, a que se pretende adicionar o web service, e adicionar um novo projecto do tipo “ASP.Net Web Service Application”;

2. Assinar o projecto, criando um strong name para possibilitar a inclusão da dll deste na GAC;

3. Adicionar ao projecto todas as referências que serão necessárias no nosso web service, fazer build e colocar a dll resultante na GAC.


Após estes passos será necessário alterar a informação do assembly presente no ficheiro .asmx do web service (por defeito é o ficheiro Service1.asmx), adicionando a informação da dll. Para isso será necessário:

1. Abrir a GAC e verificar as propriedades da dll, tomando nota da public key desta;

2. Abrir o ficheiro .asmx e remover o atributo CodeBehid que se encontra presente na directiva de página do ficheiro. Ou seja, retirar a parte que se encontra marcada a negrito no seguinte exemplo:
<%@ WebService Language="C#" CodeBehind="Service1.asmx.cs" Class="WebService.Service1" %>

3. Alterar o conteúdo do atributo Class de acordo com o exemplo seguinte, sendo que NomeDaClasse deverá ser substituído pelo nome da classe (incluíndo o namespace), NomeDoAssembly deverá ser substituído pelo nome da dll e ChaveDoAssembly deverá ser substituído pela public key da dll:
<%@ WebService Language="C#" Class=" NomeDaClasse, NomeDoAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ChaveDoAssembly" %>

4. Repetir estes passos para todos os ficheiros .asmx e guardar todas as alterações.


Gerar e modificar os ficheiros Static Discovery e WSDL

Devido ao Sharepoint virtualizar os URLs, não é possível utilizar os ficheiros .disco e .wsdl criados automaticamente pelo ASP.NET. Sendo assim é preciso criar estes dois ficheiros com a informação que mantém a virtualização do Sharepoint.
Para isso será necessário utilizar a ferramenta Disco.exe e seguir os seguintes passos:

1. Copiar o ficheiro .asmx para a directoria \Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS

2. Abrir uma command prompt do Vistual Studio e navegar até à directoria indicada, utilizando de seguida o comando (onde NomeFicheiro dever ser alterado para o nome do ficheiro .asmx):
disco http://localhost/_layouts/NomeFicheiro.asmx

3. Serão então criados os ficheiros .disco e .wsdl que, contudo, ainda terão de ser alterados;

4. Será necessário abrir os dois ficheiros (.disco e .wsdl) e registar o namespace do Sharepoint object model. Para isso bastará substituir a linha
<?xml version="1.0" encoding="utf-8"?>
pelas seguintes:
<%@ Page Language="C#" Inherits="System.Web.UI.Page" %>
<%@ Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Import Namespace="Microsoft.SharePoint.Utilities" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<% Response.ContentType = "text/xml"; %>

5. O ficheiro .disco necessita ainda de algumas alterações, sendo necessário substituir as chaves contractRef e soap address pelo seguinte:
<contractRef ref=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request) + "?wsdl"),Response.Output); %> docRef=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %> xmlns="http://schemas.xmlsoap.org/disco/scl/" />

<soap address=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %> xmlns:q1="http://tempuri.org/" binding="q1: ServiceSoap1" xmlns="http://schemas.xmlsoap.org/disco/soap/" />

<soap address=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %> xmlns:q2="http://tempuri.org/" binding="q2:ServiceSoap2" xmlns="http://schemas.xmlsoap.org/disco/soap/" />

6. No ficheiro .wsdl devem ser alteradas as chaves soap:address e soap12:address para as seguintes linhas:
<soap:address location=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %> />

<soap12:address location=<% SPHttpUtility.AddQuote(SPHttpUtility.HtmlEncode(SPWeb.OriginalBaseUrl(Request)),Response.Output); %> />

7. Renomear ambos os ficheiros (.disco e .wsdl) com o respectivo formato:
NomeServicodisco.aspx e NomeServicowsdl.aspx


Adicionar os ficheiros ao projecto de instalação criado com WSPBuilder

1. No projecto onde se encontra a solução Sharepoint (.wsp) criada com o WSPBuilder deverá ser adicionada uma nova directoria (12\ISAPI), para onde os três ficheiros (NomeServico.asmx, NomeServicowsdl.aspx e NomeServicodisco.aspx) obtidos nos passos anteriores deverão ser copiados;

2. O projecto “ASP.NET Web Service Application” deverá ser referenciado também neste projecto, de modo a garantir que o WSPBuilder incluí a dll do web service.


Após estes passos bastará criar um novo ficheiro .wsp e realizar o deploy da aplicação para o servidor, para que o web service seja colocado no Sharepoint e fique disponível para o nosso site.
Para aceder ao web service bastará utilizar o seguinte url, onde servidor deverá ser substituído pelo endereço do servidor (incluir porta, se necessário) e service deverá ser substituído pelo nome do serviço:
http://servidor/_vti_bin/service.asmx

Notas:
• É possível “bloquear” o web service de modo a que responda apenas quando é chamado a partir de um determinado endereço;
• Caso o web service necessite de um ficheiro de configuração, para guardar alguma chave, poderá ser utilizado o ficheiro de configuração (web.config) do website Sharepoint.

sexta-feira, 29 de abril de 2011

Making the Web Beautiful!

Há pouco tempo num evento do Sharepoint 2010 um dos oradores iniciou a sua apresentação com este vídeo.




Trata-se do trabalho de Mark Coleran. Quem é? Ele faz aquelas imagens e gráficos que aparecem nos ecrãs e computadores de alguns filmes e séries. Já todos vimos aquela cena em que o Horácio coloca uma impressão digital na máquina e o ecrã começa a passar imagens de suspeitos até encontrar a correspondência certa. É claro que se fossemos nós a fazer o interface daquela aplicação apenas usávamos um botão a dizer “Pesquisar” e uma página a dizer “Resultado da pesquisa”. O mais importante para nós é o que está por trás, a maneira como é feita a pesquisa. Mas a sugestão do orador da Microsoft (Michael Koester) era que devemos preocupar-nos mais com a aparência das nossas aplicações e web sites. Esse é cada vez mais um aspecto importante para que as nossas soluções tenham sucesso. E as interfaces que vemos nos filmes ajudam-nos a perceber isso, apesar de sabermos que nada daquilo funciona na realidade. Senão vejamos, qual é o objectivo daquelas imagens?


1. São apelativas e captam a atenção;
2. Em apenas alguns segundos o espectador consegue perceber o que está a acontecer.

E é exactamente isso que queremos que os nossos clientes sintam em relação às nossas soluções na hora de fazerem uma escolha entre outras propostas. Além disso temos cada vez mais pessoas a usarem equipamentos com ecrãs de alta resolução e televisões de sala a aceder a aplicações on-line. Nesses ambientes a imagem é muito importante.

Para este fim, tratando-se de um evento Microsoft, foi sugerido o Silverlight para enriquecer visualmente as nossas aplicações. Foi feita uma demonstração e o resultado foi este:


Neste caso o objectivo era mostrar o número de vendas de uma empresa em vários países. É claro que um simples gráfico feito no excel serviria. Mas esta forma torna a consulta mais interessante e dá a imagem de uma empresa em movimento (além de se parecer com uma imagem de um filme de espiões).

No próximo dia 6 de Maio teremos o WebCamp da Microsoft. Lá serão abordados os tópicos HTML5 e CSS3, ferramentas importantes para no futuro produzirmos sites mais atraentes.
Basta fazermos uma pesquisa sobre estes tópicos e rapidamente encontramos boas sugestões. Por exemplo, encontrei um tutorial em que podemos transformar uma simples lista de items em algo como isto:


Outra sugestão: para começarmos a melhorar o aspecto dos nossos sites porque não começar por escolher melhor as fontes que usamos? O Google Web Fonts contem fontes recentes e criativas que podemos consultar e usar facilmente.


Links:
http://www.google.com/webfonts/preview#font-family=Cabin+Sketch
http://html5gallery.com/
http://labs.mandogroup.com/
http://designlovr.com/use-css3-to-create-a-dynamic-stack-of-index-cards
http://net.tutsplus.com/articles/news/create-a-sticky-note-effect-in-5-easy-steps-with-css3-and-html5
http://www.silverlight.net/learn/tutorials/pete-brown/general-tutorials

sexta-feira, 11 de março de 2011

Uma Nova Fronteira

O serviço de emissão de televisão tal como o conhecemos está cada vez mais perto do seu fim. Aproximamo-nos de um novo ponto de viragem, semelhante ao que existiu na indústria da música, mas desta vez associado à criação de conteúdos para televisão.

Existem cada vez mais Set-Top Boxes preparadas para disponibilizar serviços de Internet na televisão, adaptando-os a este tipo de ecrãs. Inclusive já existem televisões que vêm com estes serviços pré-instalados, o que brevemente passará a um standard.

Já estão no mercado vários tipos de Set-Top Boxes dedicadas, tais como o Google TV, Apple TV ou Boxee. Os serviços de internet estão também disponíveis através de consolas de jogos Xbox, PlayStation e Wii. Alguns dos serviços mais conhecidos e que já estão disponíveis para TV são o Facebook, Youtube, Wikipedia, Flickr e muitos mais. Nos Estados Unidos é inclusive possível alugar filmes na Internet através de serviços como o Netflix ou Amazon.

Talvez a Set-Top Box mais conhecida no nosso País seja o Meo, da Portugal Telecom.

Para onde caminhamos afinal?

Para a utilização da internet como canal de publicação de conteúdos para televisão, inclusive dos canais a que estamos habituados a ver na TV por cabo ou satélite. Haverá uma aproximação real entre o consumidor e o criador de conteúdos, passando o consumidor a pagar apenas aquilo a que pretende ter acesso. A maior parte dos criadores de conteúdos para televisão já disponibilizam a emissão no seu website, se bem que com um baixo nível de qualidade devido à largura de banda e aos servidores disponíveis. Este aspecto será brevemente ultrapassado com a evolução das tecnologias.

Abre-se então uma janela de oportunidade para as empresas que apresentarem novos serviços, mais eficientes e inovadores, para televisão. Contudo, existe um longo caminho a percorrer na definição de normas para construção de conteúdos Web para TV. Cada Set-Top Box disponibiliza os conteúdos e serviços de forma distinta, existindo uma luta terrível na tentativa de criar uma plataforma de eleição. Ou seja, cada Set-Top Box usa a sua própria tecnologia, não sendo possível às empresas criarem programas compatíveis com as diversas plataformas.

O Google TV apresentou um browser específico para facilitar a navegação na Internet através da televisão, algo que potencialmente não fará muito sentido quando comparado com a facilidade de utilização de um PC, mas é sem dúvida muito interessante se pensarmos que poderemos criar sites específicos para TV, que já estejam adaptados à dimensão dos ecrãs. Ou seja, estamos a falar de HTML, não precisamos de aprender nada de novo, apenas algumas boas práticas para este tipo de ecrãs.

Existirá algo mais abrangente do que um site que pode estar disponível para todas as televisões, independente da Set-Top Box que assegura a ligação à internet?

A outra solução é adaptar o serviço a cada uma das Set-Top Boxes. Simplesmente não faz sentido!

sexta-feira, 25 de fevereiro de 2011

Web Marketing e SEO

O Web Marketing é o nome dado ao conjunto de medidas que realçam a presença ou a existência de uma empresa na web. Neste artigo, falaremos de uma dessas medidas: a divulgação de sites aos motores de busca existentes.

Os motores de busca - Google, Bing, Yahoo etc. - são responsáveis pela maior parte dos acessos aos sites. São dos mecanismos mais utilizados para consulta de um contacto ou de um serviço.
No entanto quando fazemos uma pesquisa qual o critério utilizado para a apresentação dos resultados?

Fazer uma pesquisa num motor de busca é como consultar um índice de um grande livro. Quando é feita uma pesquisa é consultado esse índice e são apresentados os resultados mais relevantes com base no que foi pesquisado.
No caso do motor de busca Google existem três processos na apresentação de resultados de uma pesquisa, que são:

Crawling - O rastreio é um processo realizado pelo Googlebot e consiste na descoberta de actualizações ou de novas páginas existentes na Web para serem adicionadas ao índice.

Indexing - O Googlebot processa todas as páginas que tenha encontrado no processo de rastreio de forma a compilar um índice com todas as palavras encontradas e a sua localização em cada página.

Serving - A relevância de uma página é determinada por mais de 200 factores, um dos quais o PageRank. Esta inovadora tecnologia examina toda a estrutura de hiperligações da Web, de forma a determinar a importância e a relevância de uma página. O Google mantém uma lista de biliões de páginas ordenadas pela importância, isto é, cada página tem a sua importância na Internet como um todo. Essa lista armazena desde a página mais importante do mundo até à menos importante. Essa importância dá-se pelo número de votos que uma página recebe. Um voto é um link em qualquer sítio da Internet para aquela página. Votos de páginas mais importantes valem mais do que votos de páginas menos importantes.
Para que um site tenha uma boa posição nos resultados de uma pesquisa é importante que o Google consiga fazer o rastreio e indexar correctamente o site.
Então o que posso fazer para melhorar a posição do meu site nas pesquisas do Google?

O SEO (Search Engine Optimization, em português Optimização para Motores de Busca) é um processo que visa melhorar a quantidade e também a qualidade dos visitantes para um site através dos resultados.

Estudos demonstram que os primeiros resultados recebem mais de metade dos visitantes que efectuam uma determinada pesquisa. Todavia, não há nada que garanta que estejamos na 1ª posição dos resultados de uma determinada pesquisa mas há algumas linhas orientadoras bem como boas práticas que potenciam um melhor posicionamento na lista de resultados.

Estrutura do site:


  • Usar títulos de páginas que identifiquem o conteúdo da própria página;
  • Utilizar palavras-chave interessantes e abrangentes;
  • Usar a meta-tag descrição apresentando assim um resumo da página;
  • Se possível, implementar o mapa do site com hiperligações para todas as páginas do site;
  • Um site deve ter uma estrutura hierárquica e hiperligações. Todas as páginas do site devem ser acessíveis a partir de pelo menos uma hiperligação;
  • Utilizar heading tags para estruturar uma página;


Optimização de conteúdos:

  • Tornar o conteúdo do site exclusivo e interessante;
  • Usar URLs simples e legíveis;
  • Utilizar uma escrita fácil de ler, organizada e original;
  • Utilizar hiperligações para outras páginas perceptiveis de entender o que se vai encontrar;
  • Utilizar o atributo "alt" para fornecer informações sobre a imagem;
  • Utilizar uma directoria dentro da estrutura de directorias do site apenas para guardar imagens;
  • Pensar nas palavras que os utilizadores utilizariam para encontrar o site. Utilizá-las nos conteúdos;

Promoção do site:

  • Partilhar o endereço do site - redes sociais, blogs, comunidades que partilhem interesses com o tema do site, directórios;
  • Se for um negócio local, criar uma ficha no Google Places;
  • Utilizar o Google Webmasters Tools;
  • Submeter o endereço do novo site ao Google;

Depois de aplicadas as medidas necessárias para dar resposta às linhas orientadores definidas é necessário um acompanhamento do site: fazer a análise das estatísticas de acessos, acompanhar os progressos do site nas páginas dos resultados das pesquisas, rever o que poderá funcionar melhor, fazer testes comparativos e actualizar o site para acompanhar a constante evolução dos motores de busca. O Google Analytics permite fazer esta análise tornando-se assim numa ferramenta fundamental para verificar se os resultados estão a ser os esperados e como melhorá-los.

Fontes: Wikipedia, Google, Marketing de Busca e SEO, Google Search Engine Optimization Starter Guide