Recentemente tenho postado sobre a Guideline do iOS, é conhecido o fato de que a Apple se preocupa bastante com a parte psicológica da Experiência do Usuário. Interessante é ver que depois do grande sucesso conseguido pela mesma através do iOS (iPhone e iPad), muitos dos seus concorrentes começaram a dar mais importância ao…
Psicologia do UX Design – 1
Guideline – O que é?
Recentemente percebi que muitos profissionais ainda possuem uma certa dificuldade em entender as tais nomenclaturas do ramo… como UX / UI / IxD / Guideline etc. Mas o que tenho visto de mais comum é o uso do termo Guideline para referenciar a User Interface, UI. É fato que a diferença entre ambos na idéia…
Atualizações automáticas silenciosas no Internet Explorer a partir de Janeiro/2012
Uma excelente notícia para quem desenvolve para Web: Hoje Ryan Gavin anunciou no blog oficial do Internet Explorer (em inglês) os planos para implementação de atualizações automáticas silenciosas no IE, começando já em janeiro de 2012 no Brasil e Austrália (isso mesmo, Brasil fará parte do piloto).
Essas atualizações ocorrerão, como o próprio nome diz, de forma automática e silenciosa, sem necessidade de nenhuma intervenção do usuário e possivelmente (pele menos é o que esperamos) sem reiniciar o computador. Esse tipo de atualização já é comum para usuários do Google Chrome.
Mesmo sendo automáticas e sem intervenção, ainda será possível optar por não atualizar (há casos de empresas que têm aplicações que dependem de versões específicas do browser e não podem simplesmente atualizar), ou mesmo remover a atualização e voltar para a versão anterior, mas o padrão agora será a atualização automática para a última versão.
A atualização será para a última versão disponível na plataforma do usuário, ou seja, usuários do Windows XP receberão o IE8 e usuários do Vista e Windows 7 receberão o IE9 (e IE10, quando for lançado).
Agora é esperar que essa atualização realmente diminua de forma substancial o tamanho da base instalada de IE6 e IE7 (e talvez IE8 também, mas não tanto) para que possamos desenvolver sites e aplicações com mais tranquilidade e menos dores de cabeça, além de ajudar a convencer os clientes de que não será mais tão imprescindível suportar versões tão antigas do browser da Microsoft.
versão traduzida para português do post sobre este anuncio
Play Framework – alta produtividade em Java
O Play ? um framework open source para aplica??es web, escrito em Java, que possibilita o desenvolvimento de aplica??es web que seguem o padr?o MVC. Tem por objetivo otimizar a produtividade do desenvolvedor atrav?s do uso de configura??o sobre conven??o (CoC). Com recompila??o feita durante a execu??o da aplica??o, e caso ocorra algum erro, o respectivo ? exibido no browser, indicando a linha do erro.
Aten??o: o objetivo desse post ? realizar uma vis?o geral do que se trat? o Play Framework que temos ouvidos os coment?rios na internet.
O Play Framework torna o desenvolvimento de aplica??es Java e Scala uma tarefa f?cil para o desenvolvedor.
Site: Play Framework
Descubra uma alternativa limpa e leve para as atuais aplica??es Java Enterprise. O Play ? focado na produtividade do desenvolvedor e tem por alvo a arquitetura RESTFul.
Apesar do Play ter sido escrito em Java, ele suporta a linguagem Scala desde a vers?o 1.1 (hoje[Dezembro/2011] est? na vers?o 1.2.4). Este ano a empresa Typesafe (respons?vel pela linguagem Scala), anunciou a aquisi??o do Play Framework e este ser? mantido pela empresa. Uma das novidades relacionado a este anuncio ? que a vers?o 2.0 o n?cleo do Play Framework est? sendo totalmente reescrito em Scala.
Um v?deo para uma breve apresenta??o do Play Framework: Desenvolcendo uma aplica??o web em 10 minutos
Motiva??o
O Play foi muito inspirado no Ruby on Rails e Django. Um desenvolvedor familiarizado com qualquer um desses 2, ir? se sentir em casa.
Algo que ? fato, Ruby on Rails e Django s?o produtivos, ent?o por que n?o ter o mesmo n?vel de produtividade com java?
O Play utiliza do poder das aplica??es Java, por?m sem o “sofrimento” necess?rio para o desenvolvimento de aplica??es centradas no modelo Java Enterprise. Libertando das metodologias e ideologias relacionadas ao desenvolvimento de aplica??es Java EE, o Play prove para os desenvolvedores uma maneira f?cil e elegante de trabalhar, visando o aumento da produtividade.
Caso voc? queria, basta um editor de c?digo e ser? mais que o suficiente para o desenvolvimento de aplica??es, chega a ser incr?vel pensar que conseguiremos desenvolver aplica??es Java Web sem a necessidade de um IDE (Eclipse, Netbeans, …), mas vale lembrar, que estas IDE's ainda possuem seus atrat?vos e auxiliam em nossa produtividade.
Apesar de que as aplica??es desenvolvidas com o Play, foram projetadas para executar dentro do JBoss Netty Web Server, as aplica??es podem ser empacotadas em arquivos WAR e distribu?das para outros servidores de aplica??es Java EE (ex.: Apache Tomcat).
Maiores diferen?as com os demais frameworks
Stateless: o Play ? totalmente RESTful – n?o existe conex?o por sess?o Java EE. Isto torna o Play muito mais escal?vel que os demais frameworks.
Sem configura??o: realizar o download, descompactar e desenvolver.
F?cil ida e volta: sem necessidade de deploy no servidor de aplica??o, apenas edite o c?digo e atualize o browser.
Teste unit?rio integrado: suportes nativos para JUnit e Selenium.
API elegante: raramente um desenvolvedor ter? a necessidade de importar alguma lib. O Play j? disponibiliza a maioria dos recursos necess?rios para o desenvolvimento de uma aplica??o.
M?todos est?ticos: todos os controles de entrada e m?todos de neg?cio s?o declarados como est?ticos. E isto ? de fato bem diferente o que vemos nos demais frameworks Java.
I/O Ass?ncrona: atrav?s do uso do servidor web JBoss Netty, o Play consegue disponibilizar e tratar uma enorme quantidade de requisi??es ass?ncronas.
Arquitetura Modular: assim como Rail e Django, o Play utiliza o conceito de m?dulos. O que possibilida um meio elegante e simples de expandir o core do Play.
M?dulo CRUD: f?cil constru??o de UI administrativas com pouco c?digo.
M?dulo Scala: disponibiliza um suporte completo para Scala.
Componentes
O Play utiliza massivamente algumas bibliotecas populares:
- JBoss Netty para o servidor web.
- Hibernate para a camada de dados.
- Groovy para a os templates.
- O compilador do Eclipse para atualiza??o da aplica??o sem necessidade de realizar um deploy da aplica??o para testar as altera??es (hot-reloading).
- Apache Ivy para gerencimanto de dependencias.
Funcionalidades presentes no n?cleo do Play:
- Um framework RESTful limpo e leve.
- CRUD: um m?dulo para simplicifar a edi??o de modelos de objetos.
- Secure: um m?dulo para habilitar um sistema de autentifica??o de usu?rios.
- Um framework de valida??o baseado em anota??es.
- Um Job Scheduler (agendamento de tarefas).
- Suporte para emails SMTP de maneira simples.
- Suporte para JSON e XML.
- Uma camada de persist?ncia baseada em JPA.
- Uma base de dados embutida para r?pido deploy e testes da aplica??o.
- Um framework completo para realiza??o de testes.
- Funcionalidade para upload de arquivos.
- Suporte para m?ltiplos ambientes de desenvolvimento.
- Uma poderosa engine de templates baseadas em Groovy com templates, hierarquias e tags.
- Arquitetura modular, que possibilita criar novas funcionalidades para o n?cleo facilmente.
- Suporte para OpenID e clientes de Web Service.
Links ?teis
Informa??es a mais da Wikipedia
Overview do Play Framework 1.2.4
Documenta??o Play Framework 1.2.4
A documenta??o foi algo que achei interessante, me parece bem completa com bastante exemplos e informa??es de como utilizar as funcionalidades presentes no Play Framework.
Suporte para a linguagem Scala
Utilize a IDE de sua prefer?ncia (Eclipse, Netbeans, …)
Se por um acaso voc? utilize o Sublime Text 2, veja esse suporte para este editor de c?digo [github]
Dentre eles temos: MongoDB, GAE, Gera??o de PDF, GWT, SASS e SCSS, entre outros.
E agora?
Bom agora que j? temos uma boa id?ia do que se trata o Play Framework ? baixar e come?ar a testar e ver se na pr?tica ele ? bom mesmo.
Hora de fazer o download, instalar e colocar a m?o no c?digo: Tutorial para seguir e ver uma aplica??o do in?cio at? o “fim”
Eu particularmente ainda possuo algumas quest?es em aberto para descobrir as respostas, dentre elas est? uma: - Como ? que eu utilizo o Play Framework em um projeto com uma equipe? At? o momento s? tenho visto casos onde s?o apresentados desenvolvimetno de aplica??es r?pidas, por?m com um ?nico desenvolvedor…
No meu caso eu vou atr?s dessa reposta.
Veja também:
CoffeeScript, lidando com JavaScript sem sofrimento
Como estou retornando ao mundo do HTML+JS ? inevit?vel ter que voltar a codificar em JavaScript, certo? Bom, talvez n?o… para isto temos o CoffeeScript que apresenta uma proposta bem interessante de sintaxe e codifica??o que no final o resultado gerado ? JavaScript.
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
O que achei interessante nessa apresenta??o foi a apresenta??o dos demais geradores de JavaScript, como GWT em java, entre outros, bom ao final dessa apresenta??o achei bem interessante e consider?vel o uso do CoffeeScript para gerar o JavaScript, utilizando uma sintaxe melhor e obviamente n?o apenas uma nova sintaxe, pois o CoffeeScript possui algumas facilita??es de codifica??o bem interessantes.
No pr?prio site do CoffeeScript possui alguns exemplos e um local onde voc? pode escrever um coffeescript e ver o javascript resultado.
Um fato que me chamou aten??o o compilador do CoffeeScript est? vinculado ao NodeJS.
Aten??o: vale lembrar que o CoffeeScript nada mais ? que uma maneira diferente de codificar JavaScript, ou seja, caso queria utilizar jQuery ou outra lib JavaScript codificando via CoffeeScript ? poss?vel (How CoffeeScript makes jQuery more fun than ever).
Links ?teis para instala??o do CoffeeScript:
How To Install CoffeeScript On Mac OS X
5 Steps to Get Started with CoffeeScript (Mac OS X)
Node.js and CoffeeScript on Windows, Redux
CoffeeScript compilador para windows (GitHub)
Installing CoffeeScript on Ubuntu
Segue alguns links de introdu??o ao CoffeeScript:
Simple CoffeeScript Introduction
A brief introduction to CoffeeScript
Introduction To Coffeescript & Node.Js By Pedro Teixeira
Plugin para os editores de c?digo:
Veja também:
Voltando ao mundo HTML+JS e agora?
N?o adianta chorar o leite derramado, depois que a Adobe lan?ou as ?ltimas not?cias vemos que o mercado indo de vez para o HTML5 e n?o adianta reclamar, daqui para frente mais projetos ir?o demandar conhecimentos em HTML5 (novas tags), Javascript e sobre as novidades do CSS3.
Voltando ao mundo HTML teremos que voltar inevit?velmente ao uso do Javascript, mas ao menos a boa not?cia hoje ? que diferente de anos atr?s temos dispon?veis boas bibliotecas javascript para nos ajudar na dif?cil tarefa de fazer uma aplica??o (que tente) funcionar em todos os principais web browsers do mercado (Google Chrome, Mozilla Firefox e o tem?vel IE)
Quanto ao Javascript, hoje pelo que tenho visto ? quase imposs?vel se falar em javascript sem associar ao JQuery, que ajuda muito a criar um c?digo mais limpo e organizado e at? podemos dizer, sofrer menos com o uso do javascript.
Sobre Javascript e JQuery recomendo os respectivos materiais para observar:
The JQuery Essentials
Aos que ficaram interessados pelo JQuery o @bielversallini mandou uma dica muito boa de curso web de JQuery, o jQuery Air, tamb?m jQuery Fundamentals e Livro fundamentos de jQuery 100% traduzido para pt-BR
jQuery Proven Performance Tips & Tricks, 2011
Confesso que desanimei ao ver esta apresenta??o, pois basicamente todos os recursos que gostei no JQuery s?o os mais lentos e recomendados para que n?o sejam usados a menos que n?o haja outra alternativa ou extremamente necess?rios.
jQuery & Responsive Web Design
Excelente dica de como projetar uma p?gina/sistema que se adeque as dimens?es dispon?veis (por alguns este recurso ? chamado de layout fuido/adaptativo). Como estou falando sobre layout recomendo olhar tambem o Knockout.js que possui recursos interessantes para auxiliar na defini??o da view.
Agora para falar a verdade mesmo o melhor material sobre desenvolvimento HTML+JS que vi que o autor foi real e sincero sobre o tema ? o respectivo abaixo:
Taking JavaScript Seriously (feat. Backbone.js)
Como ? dito nos slides, o javascript n?o ? a melhor linguagem do mercado, ela foi escrita em 10 dias, possui muitas defici?ncias, mas temos que aprender pois n?o temos nenhuma outra op??o.
Outro detalhe que me chamou aten??o e achei muito ?til foi a apresenta??o do Backbone.js como uma alternativa para suprir a necessidade de organizar o c?digo em algo que tenta ser o mais pr?ximo poss?vel do MVC.
Mas e sobre arquitetura aplica??es de larga escala? Bom recomendo observar este material abaixo, o qual indica as boas prat?cas de mercado e atuais recursos dispon?veis:
Large-scale JavaScript Application Architecture
Cheguei at? esta apresenta??o atrav?s deste post.
Aten??o este texto a seguir expressa minha oponi?o pessoal
Sinceramente esta apresenta??o foi o santo gral da agonia, pois para mim se trata de uma regress?o tecnol?gica brutal, irei mudar esta minha opini?o no dia em que, eu consiga ter uma arquitetura com um mesmo n?vel que possuo hoje com Adobe Flex + Swiz, como a descrevi neste post, quando este dia chegar (se ? que vai) irei dizer que podemos ent?o come?ar a pensar em utilizar o HTML+JS para solu??es corporativas.
E vamos a luta, retornando ao velho mundo do HTML, por alguns chamados de revolucion?rio mundo do HTML5…
Veja também:
Onde está o futuro do Flex?
Palavras perfeitas do Igor Costa, vale a pena ler todo o post dele:
http://www.igorcosta.com/blog/?p=1472
Windows Phone Mango – Local Database
Na versão Mango do Windows Phone, você pode manipular uma base de dados localmente, chamada de local database na documentação oficial, o recurso permite que o desenvolvedor crie aplicativos com registros de dados em tabelas, além de manipular seus registros utilizando o LINQ to SQL.
Uma base de dados local no WP7 fica localizada no Isolated Storage, um local acessível somente pela aplicação corrente, a arquitetura fica conforme a figura abaixo, onde temos a aplicação que contém um DataContext e através de LINQ to SQL, fazemos o acesso a base de dados local no Isolated Storage
Arquitetura Local Database
Para saber mais sobre Isolated Storage acessem os links:
http://msdn.microsoft.com/en-us/library/ff402541(v=vs.92).aspx
No WP7 as aplicações ficam eram áreas isoladas uma das outras, ou seja, uma aplicação não tem acesso ao Isolated Storage de outra aplicação, portanto até o momento não é possível compartilhar uma base de dados local com diversas aplicações. Diferente de uma base de dados SQL Server, um local database não pode rodar como um serviço continuo, visto que ele é executado somente durante o processo da aplicação.
Você pode criar um local database para manipular uma quantidade de dados razoável utilizando as facilidades de consultas do LINQ to SQL juntamente com o relacionamento de tabelas, similar a uma base de dados comum, o local database é uma implementação do SQL CE para o WP7, permitindo realizar facilmente tarefas com incluir, alterar , excluir e realizar consultas com LINQ.
Até o momento não existe uma ferramenta de designer visual e oficial para criar as tabelas, relacionamentos, etc, com a base de dados local, o que poderia facilitar muito, neste artigo faremos um exemplo simples, somente com uma tabela, porém, em um projeto mais complexo, essa tarefa poderia ser um pouco trabalhosa, uma forma não oficial de criar o modelo seria utilizar o SQL Metal, para mais informação, acessem o Centro de Treinamento Oficial do Windows Phone no MSDN ou através do link : http://windowsphonegeek.com/articles/Using-SqlMetal-to-generate-Windows-Phone-Mango-Local-Database-classes .
Com o SQL Metal podemos criar o Data Context através de um comando e com poucas modificações deixá-lo compatível com o Mango e poupar a codificação manual da criação de tabelas e relacionamentos.
Exemplo de comando do SQL Metal:
%ProgramFiles(x86)%Microsoft SDKsWindowsv7.0ABin>SqlMetal.exe
/code:”C:CaminhoClienteDC.cs” “C:CaminhoClienteDB.sdf”
Outras formas:
http://claudiufarcas.blogspot.com/2011/10/windows-phone-mango-sql-ce-tips-and.html
http://blogs.ugidotnet.org/corrado/archive/2011/06/05/using-local-database-in-wp7-mango.aspx
Nesta primeira parte do artigo vou criar uma base de dados muito simples, com uma tabela somente e um único campo, dessa forma podemos focar em como criar e entender os conceitos envolvidos Vou criar uma base de dados Cliente.sdf, com uma tabela chamada Cliente e um campo chamado Nome.
A primeira classe que vamos criar é a entidade Cliente e decorar com alguns atributos utilizados para a manipulação da base de dados, a classe servirá de apoio para a criação da tabela cliente. Para que você possa inserir os atributos nas propriedades da classe, é necessário adicionar o using System.Data.Linq.Mapping, em seguida adicione o atributo [Table] logo acima da criação da classe e adicione o atributo [Column()] em cada propriedade, na primary key da tabela, personalize com :
[Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)]
Dessa forma a coluna será criada na tabela como sendo Primary Key, não permitindo registros duplicados e gerando automaticamente um número a cada inclusão. Com a adição do atributo Column() nas outras propriedades, cada coluna correspondente será criado na tabela.
Com os atributos de colunas você pode definir uma série de recursos, para saber quais são os atributos de colunas que você pode utilizar no LINQ to SQL para WP7 acesse o link http://msdn.microsoft.com/en-us/library/system.data.linq.mapping.columnattribute(VS.95).aspx
Um atributo em especial que adiciona uma coluna de versão pode auxiliar no desempenho de grandes atualizações de dados, apresentando uma significativa melhoria na aplicação, é o IsVersion=true, essa otimização é exclusiva para o LINQ to SQL do WP7 e usado internamente para identificar a versão da coluna modificada:
[Column (IsVersion = true)]
_VERSION Binary privado;
Igualmente importantes são os atributos de associações, que permitem realizar o relacionamento entre as tabelas, para mais informações acesse:
http://msdn.microsoft.com/en-us/library/system.data.linq.mapping.associationattribute(v=VS.95).aspx
Exemplo de Associação:
[Association(Storage = "_cliente", ThisKey = "_clienteId", OtherKey = "Id", IsForeignKey = true)]
Código da Classe Cliente:
? ? ? [Table]
? ? ? public class Cliente : INotifyPropertyChanged, INotifyPropertyChanging
? ? ?
?
? ? ? ? ? ? ? #region INotifyPropertyChanged Members
?
? ? ? ? ? ? ? public event PropertyChangedEventHandler PropertyChanged;
?
? ? ? ? ? ? ? private void NotifyPropertyChanged(string propertyName)
? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? if (PropertyChanged != null)
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? #endregion
?
? ? ? ? ? ? ? #region INotifyPropertyChanging Members
?
? ? ? ? ? ? ? public event PropertyChangingEventHandler PropertyChanging;
?
? ? ? ? ? ? ?
? ? ? ? ? ? ? private void NotifyPropertyChanging(string propertyName)
? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? if (PropertyChanging != null)
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PropertyChanging(this, new PropertyChangingEventArgs(propertyName));
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? #endregion
?
?
? ? ? ? ? ? ? [Column(IsPrimaryKey = true, IsDbGenerated = true, DbType = "INT NOT NULL Identity", CanBeNull = false, AutoSync = AutoSync.OnInsert)]
? ? ? ? ? ? ? private string id;
? ? ? ? ? ? ? public string Id
? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? get
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return id;
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? set
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (id != value)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NotifyPropertyChanging("Id");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? id = value;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NotifyPropertyChanged("Id");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? }
? ? ? ? ? ? ?
? ? ? ? ? ? ? [Column()]
? ? ? ? ? ? ? private string nome;
? ? ? ? ? ? ? public string Nome
? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? get
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return nome;
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? set
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (nome != value)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NotifyPropertyChanging("Nome");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? nome = value;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NotifyPropertyChanged("Nome");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? }
? ? ? ? ? ? ?
?
? ? ? }
Em aplicações Silverlight é comum implementar a interface INotifyPropertyChanged para monitorar mudanças nas propriedades da classe , e tirar um melhor proveito do recursos de databinding da tecnologia, para auxiliar o LINQ to SQL, também vamos implementar a interface INotifyPropertyChanging, com ela é possível monitorar quando uma propriedade será modificada e com isso o DataContext é informado e pode identificar as mudanças e melhorar a performance da aplicação.
O Data Context é o local onde definimos o contexto dos dados que servirão para criar a base de dados local, o LINQ to SQL depende do mapeamento entre o modelo de objetos e o esquema da base de dados. Dependendo da complexidade do modelo, esse arquivo pode ser trabalhoso de ser criado manualmente, mas existem formas de utilizar alguma ferramenta para cria-lo, o SQL Metal é uma delas conforme comentado acima no artigo.
Crie uma classe chamada ClienteDataContext , ela vai herdar de DataContext, o DataContext contém diversas propriedades e métodos que auxiliam na manipulação de base de dados, como por exemplo, verificar se uma base de dados existe, criar e excluir uma base de dados, entre outros, mais adiante vamos utilizar o método CreateDatabase() para criar fisicamente a base de dados local no Windows Phone.
A próxima etapa é criar a string de conexão com a base de dados, utilizaremos a palavra chave “isostore” para informar que o arquivo ficará no Isolated Storage, após isso informaremos o nome da base de dados como Cliente.sdf. É na string de conexão que você pode inserir um senha de acesso a base de dados, informar uma cultura específica ou até mesmo criar uma base de dados somente leitura, para mais informações sobre string de conexões para o WP7 acesse http://msdn.microsoft.com/en-us/library/hh202861(v=vs.92).aspx
Por último vamos definir uma tabela Cliente de acesso público e única no DataContext através de public Table
No App.xaml.cs da aplicação , localize o construtor da classe e no final adicione o código abaixo, neste momento vamos criar uma base de dados usando o DataContext criado anteriormente, o código verifica se existe uma base de dados e caso não exista ele já cria uma nova base de dados.
using (ClienteDataContext ctx = new ClienteDataContext(ClienteDataContext.DBConnectionString))
? ? ? if (ctx.DatabaseExists() == false)
? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ctx.CreateDatabase();
? ? ? ? ? ? ?
?
}
Para finalizar o artigo vou criar uma tela simples em Silverlight, sem se preocupar com o layout, a tela tem um botão chamado “add” que vai adicionar um registro na base de dados e logo abaixo um ListBox chamado “lst”, que está ligado através de databinding a propriedade ItemSource com uma ObservableCollection chamada Items, na propriedade Text vamos mostrar o nome do cliente também ligando através de databinding.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Grid.Row="1" Margin="12,0,12,0">? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ?
No constructor do MainPage vamos criar uma instância do DataContext chamado clienteDB :
clienteDB = new ClienteDataContext(ClienteDataContext.DBConnectionString);
No evento ? Loaded da MainPage, realizamos um consulta LINQ to SQL e já adicionamos o resultado em uma ObservableCollections chamada Items, que está ligado ao ItemSource da ListBox, veja como é prático ligar as informações na tela, neste exemplo como o foco é o conceito de local database, o projeto foi criado todo no code-behind da MainPage, mas você poderia criar usando o ViewModel e ligando o ObservableCollection com a View.
var result = from Cliente r in clienteDB.Cliente
select r;
Items = new ObservableCollection(result);
Para mais informações sobre LINQ:
http://msdn.microsoft.com/en-us/library/bb397897.aspx
http://msdn.microsoft.com/en-us/library/bb386976.aspx
http://msdn.microsoft.com/en-us/library/bb386913.aspx
Vamos agora para o código do botão “add” que vai adicionar os registros na base de dados, através do InsertOnSubmit() adicionamos o objeto ao DataContext e através do SubmitChanges(), o objeto é registrado na base de dados, por último, inserimos o objeto na coleção para que seja apresentado na tela.
Cliente c = new Cliente();
c.Nome = txtNome.Text;
clienteDB.Cliente.InsertOnSubmit(c);
clienteDB.SubmitChanges();
Items.Add(c);
?
Código completo da MainPage:
? ? public partial class MainPage : PhoneApplicationPage, INotifyPropertyChanged
? ? ?
? ? ? ? ? ? ? ? ClienteDataContext clienteDB;
? ? ? ? ? ? ? ? #region INotifyPropertyChanged Members
? ? ? ? ? ? ? ? public event PropertyChangedEventHandler PropertyChanged;
? ? ? ? ? ? ? ? private void NotifyPropertyChanged(string propertyName)
? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? if (PropertyChanged != null)
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? #endregion
? ? ?
? ? ? ? ? ? ? private ObservableCollection_items;
? ? ? ? ? ? ? public ObservableCollectionItems
? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? get
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? return _items;
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? set
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (_items != value)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? _items = value;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NotifyPropertyChanged("Items");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? }
? ? ? ? ? ? ?
? ? ? ? ? ? ? // Constructor
? ? ? ? ? ? ? public MainPage()
? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? InitializeComponent();
? ? ? ? ? ? ? ? ? ? ? clienteDB = new ClienteDataContext(ClienteDataContext.DBConnectionString);
? ? ? ? ? ? ? ? ? ? ? this.DataContext = this;
? ? ? ? ? ? ? ? ? ? ? Loaded += new RoutedEventHandler(MainPage_Loaded);
? ? ? ? ? ? ?
? ? ? ? ? ? ? void MainPage_Loaded(object sender, RoutedEventArgs e)
? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? var result = from Cliente r in clienteDB.Cliente
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? select r;
? ? ? ? ? ? ? ? ? ? ? Items = new ObservableCollection(result);
? ? ? ? ? ? ?
? ? ? ? ? ? ? private void add_Click(object sender, RoutedEventArgs e)
? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? Cliente c = new Cliente();
? ? ? ? ? ? ? ? ? ? ? c.Nome = txtNome.Text;
? ? ? ? ? ? ? ? ? ? ? clienteDB.Cliente.InsertOnSubmit(c);
? ? ? ? ? ? ? ? ? ? ? clienteDB.SubmitChanges();
? ? ? ? ? ? ? ? ? ? ? Items.Add(c);
? ? ? ? ? ? ?
? ? ? }
Links:
Boas Práticas:
http://msdn.microsoft.com/en-us/library/hh286406(v=vs.92).aspx
Mais informações sobre local database no Windows Phone :
http://msdn.microsoft.com/en-us/library/hh202860(v=vs.92).aspx
http://msdn.microsoft.com/en-us/library/hh202876(v=VS.92).aspx
Alterações do esquema da base de dados:
http://msdn.microsoft.com/en-us/library/hh394018(v=VS.92).aspx
Html5 – Gráfico com range de meses
Como todos já devem saber, o Canvas é um elemento muito poderoso do HTML5, com ele podemos desenvolver diversos tipos de componentes e aplicações. Tenho certeza que ainda não descobri 5% de seu potencial, ainda mais que meu estudo hoje está limitado a javascript/html puro, sem a introdução de frameworks auxiliares.
Para o exemplo abaixo, utilizei como base um outro exemplo que encontrei na internet, pois ele tinha as funções de desenho das linhas dos gráficos. Com ele em mãos resolvi desenvolver algo mais próximo do que fazemos em dashboards no Flex, como um range de datas para filtro no gráfico, e não é que ficou legal?
Your browser does not support iframes.
Html5 – Gráfico com range de meses (Exemplo)
Como todos já devem saber, o Canvas é um elemento muito poderoso do HTML5, com ele podemos desenvolver diversos tipos de componentes e aplicações. Tenho certeza que ainda não descobri 5% de seu potencial, ainda mais que meu estudo hoje está limitado a javascript/html puro, sem a introdução de frameworks auxiliares. Para o exemplo abaixo,…





