Arquivo para categoria Programação

Appcelerator, alternativa para Apps Mobile Nativas

Olá Caríssimos tudo bem?

Em um post que fiz aqui: https://debulhado.wordpress.com/2012/05/01/na-crista-da-onda-web-mobile-apps-ou-native-apps/

Falei um pouco sobre WebbApps versus Apps Nativas. No fim do post falei sobre o Appcelerator e hoje gostaria de falar um pouco mais sobre este framework.

Com o Appcelerator desenvolvemos uma aplicação utilizando Javascript e compilamos para aplicações nativas Android e IPhone!!! Isso mesmo, todo código é feito em javascript, depois escolhemos para qual plataforma vamos distribuir  e o framework converte em uma aplicação NATIVA!!! Além de termos a opção de compilarmos para uma aplicação HTML5. Outro ponto positivo é o ambiente próprio para desenvolvimento o Titanium Studio.

Outra vantagem é que diferente das WebApps, o framework permite você  criar interfaces utilizando o melhor que cada plataforma tem para oferecer.

Hoje creio que Appcelerator está ao nível do Sencha Touch, cada um com suas vantagens e desvantagens.

A Gartner lançou o Magic Quadrant e classificou Appcelerator e Sencha com visionários. Muito interessante a análise:

http://www.alibabaoglan.com/blog/2012/gartners-2012-magic-quadrant-for-mobile-application-development-platforms/

E finalmente o Appcelerator pode ser encontrado aqui: http://www.appcelerator.com/

Até a próxima!!!!

, , , , , , , , , , , , , , , , ,

Deixe um comentário

Windows Phone 8 – Primeiras Novidades

Caríssimos tudo bem ?

Dentre muitas novidades ainda não divulgadas, 2 coisas me agradaram no SDK do Windows Phone 8:

1 – Será possível utilizar código nativo nas aplicações, assim a velha e boa portabilidade pode ser garantida.

2 – Teremos suporte a aplicações GPS que rodam em background sem necessidade da aplicação estar aberta ou utilizar agents. GPS tracker, antes tarde que nunca…

 

 

Abraços…

,

Deixe um comentário

Serializando objetos para JSON em C#

Olá Caríssimos,

No post de hoje quero dar um exemplo de código de como fazemos para criar uma função genérica para serializar e deserializar objetos para JSON utilizando C#.

Eu utilizo a biblioteca JSON .NET que pode ser encontrada aqui: http://json.codeplex.com/ . Em um post já falei um pouco porque utilizo esta biblioteca (veja aqui), ela tem várias opções de configuração e conseguimos controlar melhor a forma como os objetos são serializados.

Bem, mãos nos bits e vamos lá:

public static string Serialize<T>(T value) where T : class
{

Type type = value.GetType();
Newtonsoft.Json.JsonSerializer json = new Newtonsoft.Json.JsonSerializer();

//ignorando propriedades nulas
json.NullValueHandling = NullValueHandling.Ignore;

// ignorar referencias ciclicas em objetos
json.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
// formato da data, utilizar o iso
json.DateFormatHandling = DateFormatHandling.IsoDateFormat;

if (type == typeof(DataTable))
json.Converters.Add(new DataTableConverter());
else if (type == typeof(DataSet))
json.Converters.Add(new DataSetConverter());

StringWriter sw = new StringWriter();
Newtonsoft.Json.JsonTextWriter writer = new JsonTextWriter(sw);

writer.Formatting = Formatting.None;

writer.QuoteChar = '"';
json.Serialize(writer, value);

string output = sw.ToString();
writer.Close();
sw.Close();

return output;

}
public static T DeSerialize<T>(string value) where T : class
{
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.DateFormatHandling = DateFormatHandling.IsoDateFormat;
// se alguma propriedade nao existir no objeto, ignorar
settings.MissingMemberHandling = MissingMemberHandling.Ignore;

return JsonConvert.DeserializeObject<T>(value);

}

No código acima temos as funções. Para utilizar podemos utilizar desta forma:

public static void Main(string[] args)
{

DataTable dt = new DataTable();
dt.Columns.Add("Teste");
dt.Columns.Add("Data", typeof(DateTime));
dt.Columns.Add("Complemento");
dt.LoadDataRow(new object[] { "Teste 1", DateTime.Now, "Complemento1" }, true);
dt.LoadDataRow(new object[] { "Teste 2", DateTime.Now, "Complemento1" }, true);
dt.LoadDataRow(new object[] { "Teste 3", DateTime.Now, "Complemento1" }, true);
dt.LoadDataRow(new object[] { "Teste 4", DateTime.Now, null }, true);
string json = Serialize<DataTable>(dt);

List<Teste> values = new List<Teste>();
values.Add(new Teste { Data = DateTime.Now, Idade = 12, Nome = "Teste" });
values.Add(new Teste { Data = DateTime.Now, Idade = 12, Nome = "Teste" });
values.Add(new Teste { Data = DateTime.Now, Idade = 12, Nome = "Teste" });
values.Add(new Teste { Data = DateTime.Now, Idade = 12, Nome = "Teste" });
values.Add(new Teste { Data = DateTime.Now, Idade = 12, Nome = "Teste" });
string json1 = Serialize<List<Teste>>(values);



}</pre>

Só uma observação: quando serializamos um DataTable, podemos deserializar como um List<Dictionary<TKey,TValue>>.

 

Por hoje é isso.

 

Até a próxima.

, , ,

1 comentário

Um humilde benchmarking entre F#, C#, C++ e C

Olá Caríssimos…
Hoje gostaria de compartilhar um pouco da experiência que tive essa semana ao matar minha curiosidade em comparar a perfomance entre as linguagens C#, C, C++ e F#.
Bem, a linguagem F# é uma linguagem funcional, diferente das outras linguagens como C, C#, que são linguagens imperativas.
A diferença básica entre uma linguagem funcional e uma imperativa é que enquanto na primeira escrevemos o código em termos de funções matemáticas, dizendo ao compilador o que fazer, na segunda escrevemos o código como uma sequência lógica de passos dizendo como fazer.
Uma ótima refência pode ser encontrada aqui: http://rodrigovidal.net/?p=380 .

O que me motivou a fazer essa comparação foi a curiosidade de saber como as linguagens se comportariam em termos de perfomance, além de é claro, ter uma desculpa para estudar F#.

Você pode encontrar vários benchmarkings na internet e até achar este post repetitivo, mas não tem noção do sentimento em fazê-lo…

Para fazer esta comparação (benchmarking) escolhi as linguagens F#, C#,  C e C++, rodando um código que implementa a sequência de Fibonacci, que é interessante por utilizar recursividade. (http://pt.wikipedia.org/wiki/N%C3%BAmero_de_Fibonacci).

Mãos nos bits:

Todos os códigos foram compilados e executados em um Core I5 segunda geração, 6Gb de RAM em Windows 7 64 bits. (Configurei os compiladores para compilar em 32 bits).

Para compilar em C# e F# utilizei o Visual Studio 2010, equanto que para linguagem C utilizei o compilador GNU MinGW.  Para C++ utilizei o Visual Studio 2010 também, porém criei um projeto em C++ unmanaged para win32, não é o C++ .NET.

Resultados:

Fiz três testes, calculando os números de Fibonnaci entre de 1 à 30, 40 e 50.

O tempo de processamento em segundos foi de:

Algumas considerações:

  1.  Como podemos ver, F# foi a que teve melhor perfomance, e isso se justifica no fato da linguagem funcional ser a tampa da panela para cálculos e processamentos. Sua performance foi avassaladora em relação às outras, e isto porque estamos falando do .NET, imagino que outras linguagens funcionais devam ter perfomance maior.
  2. Me preocupei com a perfomance da linguagem C e C++, esperava um desempenho melhor do que a linguagem C#, embora esta tenha me surpreendido positivamente.
  3. O C++ da Microsoft também chateou, ficou atrás do C# na comparação, por esta não esperava. Será que fiz algo de errado ? Não esperava isto do C#, grande surpresa.

E agora José ?

Vejo uma linguagem funcional como F# muito útil quando precisamos desenvolver códigos que envolvam cálculos mátemáticos e processamentos pesados como funções, polinômios, regressões, matrizes, processamento de imagens, etc… Por isso, considere utilizá-la sempre que possível, você e seu usuário vão ganhar com isso.

Achei fácil o aprendizado da linguagem e implementar funções matemáticas fica muito fácil devido a proximidade da sintaxe.

Esse foi um teste humilde, muito mais pode ser feito para comparar as linguagens, na verdade fui muito raso na avaliação, mas já deu pra ter uma noção do mais importante.

Até a próxima !!!!

PS: Os códigos que criei podem ser baixados aqui: http://sdrv.ms/MtfhDG

, , , , , , , ,

Deixe um comentário

Problemas com Data e Hora ao consumir Web Services WCF no client…

Olá carissímos…
Estou passando por aqui bem rapidinho só pra dar uma dica com um problemão que tive esta semana: Consumir um webservice que retorna dados com data e hora.

Meu web service (WCF RESTful em C#) retorna uma tabela serializada em JSON, que tem campos do tipo data e hora. O problema é que ao deserializar os dados no client as datas são ‘ajustadas’ ao fuso local,  e a hora fica incorreta.

Estava usando o JSonSerializer do namespace System.Web.Script.Serialization.

Após muito tempo gasto com pesquisa, descobri que o problema é na forma de serialização utilizada pelo algoritmo, que não especifica o time zone da hora na serialização.
Acabei utilizando a espetacular biblioteca JSON .NET (http://json.codeplex.com/), com ela foi possível configurar como o algoritmo serializa a data e hora, que, no meu caso foi em formato UNIX, assim é preservado o time zone da hora e ela não é ajustada após a deserialização.

Existem vários exemplos da utilização na WEB.

Até a próxima…

, , ,

1 comentário

Progress Dialog no Windows Phone 7

Olá Caríssimos!!!

Estou bastante tempo sem postar no blog, os dias não têm sido fáceis…

Passei só pra dar uma dica.

No desenvolvimento com Windows Phone 7.1 caso você precise de um ‘progress indicator’, ou também conhecido como wait cursor (windows mobile), progress dialog, barra de progresso, loading, etc, etc, etc… , achei um post bem interessante.

Nativamente o Windows Phone fornece o progress indicator, mas este só aparece no topo da janela e também não dá àquele efeito bacana de um fundo preto transparente, tipo um ajax loading cursor. Pois bem, vejam este link: http://blogs.msdn.com/b/priozersk/archive/2010/09/20/creating-progress-dialog-for-wp7.aspx . O cara fez um user control que podemos configurar de várias formas.

Segue alguns prints:

Enjoy It !!!!  meus caros…

Estou preparando um artigo de como deixar isso genérico e que você possa chamar de qualquer lugar da aplicação.

Até a próxima!!!!

, , , , , , , ,

Deixe um comentário

Na crista da onda: Web Mobile Apps ou Native Apps ?

Smartphones e Tablets deixaram de ser promessas e se tornaram uma agrádavel novidade, na crista da onda se tornaram cólera, ultrapassando 157.8 milhões de unidades vendidas só no quarto trimestre de 2011.

Mas e daí programador ? E daí que nessa ingrata profissão onde tudo muda todo dia, com tantas possibilidades e oportunidades surgem algumas dúvidas: Pra qual plataforma desenvolver ? Qual é a melhor ? Faço multiplataforma ? E as linguagens ? E se amanhã muda tudo ? Faço pra Web ou faço nativa ?

O que é melhor é aquilo que se adequa ao seu custo, equipe e necessidade.

Mas isso não é tudo… não é tão simples assim…

Aplicações nativas são desenvolvidas utilizando uma linguagem e referências fornecidas pelo fabricante da plataforma, em geral se adequam e se sentem em ‘casa’ no aparelho (perfomance, recursos, etc), justamente por serem nativas, e temos maior controle sobre os componentes e recursos que o SDK oferece. Web mobile apps são desenvolvidas utilizando algum framework que combinam HTML 5, Jscript e CSS3, rodam no browser ou em alguma aplicação que serve como hub (HTML5 pode rodar off line e se comportar como uma aplicação nativa).

 Já é possível desenvolver Web Mobile Apps e distribuí-la como aplicação. Para tanto, podemos utilizar uma bela combinação: Jscript (frameworks Sencha Touch, Jquery Mobile, WqebApp .Net, JQTouch, etc) + PhoneGap.

O PhoneGap tem a capacidade de encapsular nossa aplicação criada utilizando HTML5; por exemplo com Sencha; e distribuirmos como aplicação instalável para vários Oss. O PhoneGap também supre a necessidade de acesso a GPS, Câmera, telefone, e outros recursos do aparelho, que não seriam acessíveis se a aplicação rodasse em um browser.

Pese os prós e contras e decida o que é melhor pra você e seu objetivo.

Quando me deparei com esta dúvida, montei uma tabela comparativa, considerando somente um desenvolvimento para Android, Iphone / Ipad e Windows Phone:

 

Web Mobile Apps

Native Apps

Interface de Usuário Como desenvolvemos apenas uma vez, corremos o risco de não manter o mesmo padrão de interface do sistema operacional. Conseguimos garantir que o mesmo padrão será mantido, já que o desenvolvimento é separado para cada plataforma.
Recursos da Aplicação Desenvolvemos nossos controles e recursos e garantimos que rodará bem em todas as plataformas. Como a navegabilidade e usabilidade muda de um OS para outro, talvez tenhamos um pequeno engodo para desenhar uma interface multi plataforma.
Banco de Dados Apesar de oferecer suporte ao WEBSql, nem todos os browsers oferecem esse padrão. O PhoneGap tem uma API especifica, mas se quisermos deixar a aplicação acessível via Browser pode ser um problema. Todas as plataformas oferecem suporte nativo e uma boa perfomance.
Perfomance Aqui utilizamos Jscript, não é compilada, dispensa explicação das diferenças com as linguagens compiladas. Utilizamos linguagem compilada, SDK do fabricante. Utiliza o que há de melhor que o aparelho possa fornecer.
Roda Off-Line Sim, HTML5 oferece este recurso. Sim.
GPS, Câmera, Disco Se utlizarmos um HUB como o PhoneGap é possível. Futuramente o HTML5 oferecerá suporte nativo e será acessível também via Browser. Isso e muito mais.
Custo de Desenvolvimento Desenvolve uma vez, compila e distribui para todas as plataformas. É mais barato. Para cada plataforma um desenvolvimento, torna o processo mais caro.
Futuro É mais garantido que não vai morrer amanhã. A qualquer hora pode mudar, mesmo com a hegemonia do Android, o futuro é incerto.
Outros A opção por Web App pode ser boa quando não precisamos de uma grande massa de dados local e acessamos dados online com frequência. Se precisamos de performance e uma massa considerável massa de dados local, aplicação nativa é uma boa pedida.

Existe ainda um framework chamado AppAcelerator, onde desenvolvemos em Jscript e compilamos nativamente para várias plataformas, inclusive como Web App.

 

Até a próxima!!!!

, , , , , , , , , , , , , , , , ,

3 Comentários