sexta-feira, agosto 30, 2013

Spring.NET IoC (exemplo prático/tutorial)



Há algum tempo estou desenvolvendo em .Net, utilizando C# como linguagem base e tenho gostado bastante.
A curva de aprendizagem para quem conhece Java é muito tenra. Ainda acho Java mais robusto, organizado e escalável do que a plataforma .Net, mas isso não inviabiliza o uso da plataforma da Microsoft em qualquer tipo de projeto, na minha opinião.

Como todo javeiro cascudo acostumado a testar várias coisas e frameworks, etc. comecei criando um projetinho de library com códigos dos mais fáceis para aprender a sintaxe e depois fui montando a minha arquitetura bem semelhante ao que fazia em projetos Java.

Então esbarrei em IoC (Inversion of Control) eu já havia utilizado o Spring Framework em projetos Java, e para minha grata surpresa ele também existe para .Net, e então decidi utilizá-lo.

A configuração dele é um pouco diferente do Java, na sintaxe apenas, pois o conceito ainda é ter um arquivo com as configurações das classes, propriedades, etc. (não cheguei a pesquisar se há alguma coisa semelhante ao Spring Annotation para .Net).

Mas deixe-me registrar para quem mais isso possa interessar como colocar o Spring.Net para rodar.

O que eu fiz foi criar um projeto do tipo Console Application, chamado TestIoC e via Manage NuGet Packages adicionei o Spring.NET Core ao meu projeto.
Depois disso criei três pastas no projeto:

model
dao
service

Na pasta model eu tenho uma classe de modelo simples, um POCO (Plain Old CLR Object) chamado Product:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace model
{
    public class Product
    {
        public int Id
        {
            set;
            get;
        }

        public String Description
        {
            set;
            get;
        }

        public double Price
        {
            set;
            get;
        }

        public Product(int id, String description, double price)
        {
            this.Id = id;
            this.Description = description;
            this.Price = price;
        }
    }
}

Na pasta dao eu tenho a classe que simula uma pesquisa no banco de dados:

using System.Collections.Generic;
using model;

namespace dao
{
    public class ProductDAO : IProductDAO
    {
        public List ListAll()
        {
            List products = new List();
         
            products.Add(new Product(1,
                                     "Pinarello Dogma road bike carbon frame and forks",
                                     6300.00));

            products.Add(new Product(2,
                                     "Caloi Sprint road bike alloy frame carbon forks",
                                     1161.41));

            products.Add(new Product(3,
                                     "Colnago Move road bike alloy frame carbon forks",
                                     1283.14));

            return products;
        }
    }
}

* Esta classe realiza a interface IProductDAO que define o método List ListAll().

E na pasta service eu tenho a classe que manipula o POCO Product através da classe ProductDAO, a classe ProductService ficou assim:

using System.Collections.Generic;
using dao;
using model;

namespace service
{
    public class ProductService : IProductService
    {
        IProductDAO productDAO;

        public IProductDAO IProductDAO
        {
            get;
            set;
        }

        public ProductService()
        {
        }

        public List FindAll()
        {
            return this.productDAO.ListAll();
        }
    }
}

* Esta classe realiza a interface IProductService que define o método List ListAll().

De cara notamos que há um campo chamado productDAO nesta classe. Então para buscar e retornar uma lista de produtos esta classe service utilizar “alguma classe” que realize essa interface IProductDAO e contenha o método ListAll. No nosso caso a classe que faz isso é ProductDAO ;)

Agora na classe Program, onde está o método main desta aplicação, iremos fazer uma chamada a ProductService.FindAll e exibir os resultados.

using System;
using Spring.Context;
using Spring.Context.Support;
using service;
using model;

namespace program
{
    class Program
    {
        static void Main(string[] args)
        {
            IApplicationContext ctx = ContextRegistry.GetContext();
            IProductService productService = (IProductService)ctx.GetObject("ProductService");

            foreach (Product p in productService.FindAll())
            {
                Console.WriteLine("Id: " + p.Id +
                                  " Desc.: " + p.Description +
                                  " Price: $" + p.Price);
            }

            Console.ReadKey();
        }
    }
}

Notaram que em nenhum momento eu estou criando uma instância do meu DAO? E que aqui eu estou utilizando os dados retornados por ele para o service ProductService?
Eu não sei como a minha classe service está sabendo quem utilizar como realização de IProductDAO. E eu não quero me importar com isso também ;) Alguém teve o trabalho de criar a classe ProductDAO, e onde ela busca os dados para mim não interfere no que eu quero fazer com eles. Não faz sentido eu me preocupar com isso.
E é aqui que a mágica acontece, onde o Spring vai retornar uma instância de ProductService para cá e já vai injetar nela uma instância de ProductDAO. Por isso eu não estou instanciando o service aqui, eu estou pedindo uma instância dele para o “contexto” do Spring.NET.

O contexto do Spring.NET é inicializado com a aplicação, e a partir de um arquivo de configuração ele fica sabendo quem é quem e de que precisam. Confuso? Nâo!

O contexto do Spring.NET sabe que existe uma classe chamada ProductDAO e uma outra chamada ProductService, e que essa última tem uma propriedade chamada productDAO do tipo IProductDAO que precisa ser injetada.
Por isso quando eu peço ao contexto uma instância de uma classe chamada ProductService ela vem completa e pronta para uso, com o respectivo DAO atribuído e pronto para uso, sem que eu ganhe mais um cabelo branco por causa disso me preocupando em instanciar o DAO correto, etc.

Para essa mágica acontecer temos no arquivo de configuração da aplicação o seguinte conteúdo:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</sectionGroup>
</configSections>
<spring>
<context>
<resource uri="config://spring/objects"/>
</context>
<objects xmlns="http://www.springframework.net"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.net/tx"
xmlns:db="http://www.springframework.net/database">

<object name="ProductService" type="service.ProductService, TestIoC">
<property name="productDAO" ref="ProductDAO"/>
</object>

<object name="ProductDAO" type="dao.ProductDAO, TestIoC"></object>

</objects>
</spring>
</configuration>


Notem que cada classe mapeada para o contexto está em uma tag <object> dentro do universo <objects>.
Então mapeamos o ProductDAO:

<object name="ProductDAO" type="dao.ProductDAO, TestIoC"></object>

Onde type é o nome qualificado da classe (namespace.classe) e depois da virgula (,) temos o nome do nosso projeto.

Nota: Na minha primeira tentativa de colocar o Spring.NET para rodar foi lançada uma exception com a mensagem: “Error creating context 'spring.root': Could not load type from string”. Perdi um tempo até entender que no atributo type o que vem depois da virgula é o nome do assembly do projeto, e não da classe. E o nome do assembly deste projeto é TestIoC.exe.

E o mapeamento da classe ProductService:

<object name="ProductService" type="service.ProductService, TestIoC"> <property name="productDAO" ref="ProductDAO"/> </object>

A única diferença é que estamos informando a dependência dessa classe, onde a propriedade chamada productDAO é referente a classe mapeada ProductDAO.

Agora é por tudo para rodar e obter o resultado:

Id: 1 Desc.: Pinarello Dogma road bike carbon frame and forks Price: $6300
Id: 2 Desc.: Caloi Sprint road bike alloy frame carbon forks Price: $1161.41
Id: 3 Desc.: Colnago Move road bike alloy frame carbon forks Price: $1283.14

Então, programando sempre orientado a interfaces e ainda podendo abstrair as dependências, o projeto fica muito mais desacoplado e muito mais escalável.

Vale a pena lembrar que o Spring Framework é um universo de mais alguns bons projetos, tanto para Java quando para .Net. Há um projeto para aspectos, para controle de transações, log, etc.
Visite o site deles e confira.

E eu ainda vou ter uma Pinarello Dogma ;)

segunda-feira, fevereiro 06, 2012

Resistência da tela do HTC Ultimate

Testei sem querer querendo a resistência da tela do meu HTC Ultimate semana passada.

Eis que estava eu montando meus novos pedais clipless da minha bike quando um dos pedais escapou da minha mão e caiu em cheio sobre o meu celular que estava na bancada em que eu trabalhava. Imagine uma peça de puro ferro com mais de 200g caindo de uma altura de 35cm~45cm sobre uma fina peça de vidro!

OMG! I was blessed by God!

Foi aquele estouro forte e o pavor de ter quebrado a tela do meu smartphone. Ainda mais que eu já havia lido que o HTC Ultimate não usa telas da “marca” Gorilla Glass.

Bom, depois de olhar a tela com dois buracos e quase enfartar, constatei que os buracos eram somente na película, que nada havia acontecido com a tela do HTC Ultimate.

Eis o estrago na película.

Eis o pedalzinho que caiu sobre o meu HTC Ultimate.

Como o pessoal do Gizmodo Brasil já falou, telas Gorilla Glass não são mais sinônimos de indestrutividade. A cada dia mais e mais telas resistentes aparecem no mercado como as que equipam os iPads 2, inclusive tem um vídeo mostrando a flexibilidade da lâmina de vidro que mais parece uma folha de lexan usado nas telas do iPad 2.

Tirando dois episódios em que arranhei meu smartphone por bobeira minha, ele se parece muito resistente.

O primeiro arranhão veio quando deixei o telefone cair da minha mão direto no chão de concreto do estacionamento do aeroporto do Galeão, no Rio de Janeiro. O que arranhou nessa ocasião foi o canto da carcaça traseira. Mais nada.
A segunda vez que arranhei o meu smartphone foi ao colocá-lo dentro da saddle bag da minha bike e sair para um role, só que esqueci que haviam ferramentas dentro da saddle bag, e uma delas arranhou a carcaça traseira, perto da lente da câmera.

Só a carcaça traseira custa em média 65 doletas no eBay. Bem, não vou trocar tão cedo isso, a não ser que eu queira fazer um upgrade de smartphone, o que não ocorrerá tão cedo.

quinta-feira, janeiro 19, 2012

O controle de volume do Windows Phone

Uma das coisas que eu acho mais úteis no Windows Phone e uma vantagem absurda em relação ao iPhone, é que além de ser possível comandar o player de áudio (Zune) a partir da lockscreen (como o iPhone também faz) quando você está navegando pelos Windows Phone ou usando alguma aplicação, como o Flickr ou o Facebook, se tu apertares a tecla de volume + ou volume - aparecerá a informação do nível de volume (de 0 a 30), se o telefone está tocando e vibrando ou somente vibrando e, o melhor, os controles do Zune Player!

Sim eu sei, se você apertar a tecla home do iPhone duas vezes para ver as aplicações que estão em background, da para comandar o player, mas é muito menos intuitivo do que tu cutucares a tecla de volume para controlar o player, convenhamos.

Agora o ponto fraco do controle de volume do Windows Phone, é que já me causou problemas conjugais, é que ele é único para todas as funções do aparelho. Ou seja, tu estás assistindo um vídeo e baixa o nível de volume do seu aparelho, esse será o nível de volume adotado pelo sistema inteiro a partir de agora.

O que me aconteceu, e mais de uma vez, foi eu baixar o nível de volume para 0 (zero) para assistir um vídeo (estava sem fones e no busão e não iria pagar de “nem” ou de “funkeiro” sendo o DJ do ônibus), e quando você faz isso no canto direito o Windows Phone já avisa que o telefone está em modo “discreto” e irá somente vibrar. Ok, assisti o vídeo e não aumentei o nível do volume novamente. A lei de Murphy é implacável, minha esposa me ligou e eu não a atendi ao telefone, pois não o vi acendendo o display nem o “ouvi” vibrando sobre o gaveteiro ao lado da minha mesa. Já era meu amigo, flores + cartão + presente (caro) e um jantar para remediar a situação. Alias, aí Microsoft, poderiam me reembolsar? ;)

No iPhone o volume do player não é o mesmo do sistema. Tu podes baixar o volume da aplicação do YouTube para 0 (zero) que quando o vídeo terminar o iPhone está no mesmo nível de volume para a campainha do aparelho. Ponto para a Apple.

sexta-feira, janeiro 13, 2012

A dificuldade do Windows Phone em aprender novas palavras.


Já estou a mais de um mês com o HTC Ultimate usando o Windows Phone e tenho percebido que ele ou não aprende novas palavras ou vai demorar uma eternidade para isso.

Se eu digitar “so” querendo dizer “só” ele me sugere “do”. What?
Isso que o teclado/idioma está configurado para pt_BR (português do Brasil), então não vale dizer que ele tentou assimilar a “to do”, isso na minha lógica de raciocínio.
Se você digitar “pro” ele corrige para “oro”, e assim vai. As sugestões muitas vezes são bizarras.

Fica mais notável para qualquer um que o Windows Phone demora a aprender novas palavras e as adicionar ao dicionário quando todos os dias você escreve um SMS para sua mulher e digita “bjs” e a correção escrotamente sugere “bus” ;)

Alias, eu não sei o porquê dessa confusão que o Windows Phone faz com os idiomas.
Se o teclado estiver em pt_BR e você digitar alguma palavra em inglês ele acusa como errada. Ok. Mas nessas correções de “bjs” e “so” ele me sugere “bus” e “do”? Teste simples de qual idioma o usuário está usando para então sugerir uma correção passou longe né? Padrão Microsoft de ser, depois vem um service pack de 800GB corrigindo tudo que é merdinha que ficou para trás.

O interessante é que palavrões ele não sugere correção, mas se você escrever errado ele aponta o erro. Teste escrevendo “caral&0”. Ele não vai sublinhar o texto em vermelho acusando que a palavra está errada. Agora escreva a mesma palavra errada, tipo troque o “lho” por “lhiu”. O corretor vai informar que a palavra está errada. Motherfucker!
Funciona com o “órgão sexual feminino” também e outras palavras do tipo. Bizarro isso.
Valeu Microsoft, não vou mais xingar ninguém de forma errada!

quarta-feira, janeiro 11, 2012

Evernote no Windows Phone

Evernote na Marketplace Brasil.
Criar uma anotação (nota) no meio da rua e depois querer ver essa anotação no seu computador de casa ou do escritório não é um problema, faz algum tempo.

Quando eu ainda era um crakeiro usuário de iOS, sincronizava minhas notas com o Gmail.
Depois passei a usar o SpringPad para fazer isso, pois ele criava "pastas" onde eu podia separar o que era pessoal, profissional, estudos, etc. Então eu me libertei do crack comprei o HTC Ultimate e me vi na dúvida de o que usar para essa tarefa.

Depois de testar algumas apps bizarras de tão ruim lembrei que um dia tinha usado o Evernote (pela web) e fui conferir se havia versão para o Windows Phone. Não só há uma versão para o Windows Phone como elá é bem legal.

Para explorar o máximo do Evernote experimente instalar no seu PC o cliente desktop. Animal! Tu crias as anotações e arrasta arquivos para dentro dela, de qualquer lugar do seu computador, e o arquivo estará anexado a anotação (no caso de imagens, será exibida na anotação).
De tempos em tempos ele sincroniza as anotações, ou seja, as tornam acessíveis pelo site do Evernote e pela aplicação para o Windows Phone.
Nota com uma planilha anexada.
Depois da sincronia feita, suas anotações ficam disponíveis no site, no PC e no Windows Phone.

Resolveu meu problema!

Existe cliente do Evernote para váriOS sistemas operacionais, tanto desktop quanto mobile (iOS, Android, etc).

segunda-feira, janeiro 09, 2012

O que eu achava que era problema é um bug

Quase todo mundo que tem um smartphone com Windows Phone já passou pela situação de estar redigindo um texto em um e-mail, SMS, post nas redes sociais, etc. e o teclado sumir do nada.

Eu até algumas  semanas atrás achava que fosse privilégio meu esse problema, pois poderia estar tendo problemas ao usar a tela gigante do HTC Ultimate, já que tenho as mãos grandes.

Então vi que os colegas que tem o Samsung Omnia também tinham este problema, e que pior, é um bug conhecido pela Microsoft que será corrigido na próxima versão do Windows Phone.

Mas não é este bug do teclado que some (teclado que fecha sozinho) que fará meus dias com o Windows Phone menos contentes. Agora é esperar ainda mais


Agora é esperar ainda mais ansioso o upgrade da versão 7.5 para a 8 (?), onde espero que seja integrado o Skype ao Windows Phone.

terça-feira, janeiro 03, 2012

Migração de contatos do iPhone para o Windows Phone

Uma das minhas preocupações quando idealizei sair do iPhone e ir para um smartphone com Windows Phone, era como levar meus contatos de um para o outro, tendo em vista que eu não sei de cabeça nem o telefone celular da minha esposa O.o isso era uma prioridade ;)
A forma mais "iCloud" que eu achei foi migrar tudo do iPhone para o Google (para a minha conta do GMail) e depois sincronizar a minha conta com o Windows Phone.
Até aí parecia molezinha. Primeiro cagou meus contatos todos do GMail com entradas repetidas. Imaginem que você tinha o contato Zezinha no GMail, e no telefone o mesmo contato... logo, tu terás duas vezes a Zezinha no GMail agora. Ok, arrumei a bagaça toda de uma vez e mandei importar no Windows Phone.

Apareceram todos os meus contatos, inclusive os que não tinham telefone (por exemplo, pessoas que eu só tenho o e-mail – como contatos profissionais e listas que participo mundo a fora sobre temas de meu interesse). Até aí tudo bem, se eu quiser mandar um e-mail para um desses "contatos" ele está lá. É o conceito de "conta" mesmo, onde tu não tens uma agenda de telefones no teu smartphone, tu tens tua conta de contatos mesmo. Enfim.

Então um dia fui tentar discar para um contato e vi que o mesmo só tinha um número de celular atribuído a ele. Hum, estranho... depois de uns dias fui ligar para um restaurante e... cadê o número do telefone de lá? Só tem o nome e o endereço!

Então descobri que nem todos os "tipos" de telefones são importados do GMail para o Windows Phone assim como se o contato tiver mais de um telefone do mesmo tipo ele (WP) só vai importar o primeiro!
Putz, então aquele contato que tem 2 telefones fixos em casa (meu Deus, década de 80 isso) só vai constar 1 telefone no Windows Phone? SIM!

Até ai tudo bem, não tem lógica isso, mas eu me rendi a POG e fui dando um jeitinho distribuindo os vários números de alguns contatos em tipos diferentes, por exemplo, a Zezinha que tinha dois celulares agora tem um celular e um residencial (que é o segundo celular). Não é elegante, a meu ver e em minha opinião de merda, mas é a forma que dá.

Então fui ver porque aquele restaurante estava sem número de telefone algum e descobri que o tipo "Principal" do GMail não é suportado pelo Windows Phone. Holy crap!

Veja o que ocorreu com esse contato que só tem um número de telefone atribuído a ele e este telefone está marcado como sendo do tipo principal:

No GMail:




No Windows Phone:



* Até o presente momento o Windows Phone 7.5 não tem a função de screenshot. Por isso da imagem a cima estar tão tosca (a foto foi tirada com um Samsung Galaxy S!). Desculpem.

Oh shit! Então garotinho juvenil, ao criar seus contatinhos na porra do iOS não saia usando aquele tipo de telefone "iPhone" para seus amiguinhos que tem iPhone e nem Principal (main) para os demais contatos, pois na hora de importar...

Lá fui eu passar pelos contatos acertando essa bagaça um por um (quem estava marcado no iOS como "iPhone" no tipo do telefone, estava em branco o tipo dele no GMail. Ou seja, nem exportar do iOS para o GMail esse tipo tu consegue. EVITEM!). Que felicidade em passar por todo esse trabalho! #not

É a sensação do quase, quase deu tudo certo... mas...

quinta-feira, dezembro 29, 2011

Escutar podcasts no Windows Phone não tem se mostrado uma tarefa tão simples assim

Escutar meus podcasts favoritos no Windows Phone não tem se mostrado uma tarefa tão simples assim. Isso graças ao Zune Player do Windows Phone, que é um lixo comparado com o player “iPod” do iOS.

O que acontece é que quando estou ouvindo um episódio qualquer de um podcasts no Zune Player e atendo uma ligação ele para de tocar o podcast e eu atendo a ligação (pelo headset). Quando eu desligo a ligação ele volta a tocar o podcast, mas volta para o início! Que ridículo isso!

Isso também ocorre quando eu estou ouvindo um podcast e paro a execução do áudio e depois de algum tempo (minutos) tento voltar a executá-lo. Nada acontece, então eu acesso o Zune e recomeço a ouvir, do início, ou seja, ele perde a referência de onde que ponto eu estava ouvindo o episódio.

Agora, não sei se isso só ocorre quando estou usando o headset (pois nunca usei fones de ouvido com fio no telefone) e se só ocorre com episódios de podcasts, pois a impressão que eu tenho é que nunca passei por isso quando estou escutando músicas.

Também não sei se isso é um privilégio do Zune Player no Windows Phone, para testar isso vou instalar e configurar o BringCast para ver se o player dele também vai dar esse problema.
Alias, depois eu posto um review sobre o BringCast (já que abandonei o Podcasts! graças as limitações escrotas que a versão atual dele possui).

Alguém mais já passou por isso? Comente ai.

É o final dos tempos para a Apple?


A 3 meses atrás éramos 5 pessoas no setor, todos proprietários de iPhones (3GS/4G). 

Então entrou um colega vindo de outro setor com seu Samsung Galaxy S e agora um novo colaborador com um Samsung rodando sei lá eu o que... ainda eram 5 iPhones até começar a debandada da plataforma da Apple para o Windows Phone 7.5. Ao todo são 3 WP agora.


É o final dos tempos para a Apple?

Para sacanear os fanboys, segue o gráfico quantitativo ;)


terça-feira, dezembro 27, 2011

Bluetooth no Windows Phone/HTC Ultimate



Uma das coisas que eu notei de cara no meu HTC Ultimate com Windows Phone 7.5 foi a facilidade de usar meu headset Philips SHB6110.

Eu sou um ex-usuário de iPhone/iOS em recuperação :) Brincadeira, nunca fui um dependente do iPhone. Então é lógico eu comparar algumas coisas do meu ex-smartphone com o atual. Uma dessas coisas é a facilidade com qual o HTC Ultimate reconecta meu headset bluetooth.

No iPhone eu ligava o bluetooth do aparelho e depois o headset em modo de pareamento (segurando o botão de liga/desliga), ai então eu mandava o iPhone parear e... voilà!

Se por algum motivo eu desligasse o headset e/ou a função bluetooth do iPhone e depois ligasse tudo e não pareasse o headset, ferrou! Até funcionava o headset, mas as chances de o pareamento parar de funcionar eram bem grandes! E eu tinha que parar tudo e parear os dois.

Com o Windows Phone isso não existe! Eu deixo ligado direto a função bluetooth ou a ligo quando preciso e o headset 5 segundos depois de ligado já está pareado! E eu não preciso entrar na tela de dispositivos para isso nem nada. Estou navegando na minha timeline e ligo o headset, pronto, em 5 segundos o telefone apita e o headset está conectado.

Epic win! ;)

Mais um feliz motivo pelo qual não tenho saudades do iPhone/iOS.

domingo, dezembro 18, 2011

Comercial do HTC Ultimate

Vi este comercial hoje em um canal da Sky, como não sei se o mesmo já foi vinculado nas emissoras brasileiras, ai vai o link para que vejam:


http://www.youtube.com/watch?v=8TcxDAzivi4



segunda-feira, dezembro 12, 2011

Google doodles: Robert Noyce



O Google está homenageando no seu doodle de hoje o 84° aniversário do inventor do circuito integrado e co-fundador da Intel Corporation, o prefeito do Vale do Silicio, Robert Noyce.

Ele morreu em 1990 aos 60 anos, mas deixou a imensa contribuição para a humanidade.

domingo, dezembro 11, 2011

A primeira gaguejada - Internet Explorer

Uma coisa que é visível nos telefones/smartphones com Android é a falta de fluidez na rolagem das telas.

Um colega de trabalho, que é o fanboy máximo da Apple que eu conheço, sempre faz a mesma coisa quando coloca as mãos em um device Android: rola as telas de contatos e a do browser para ver se o sistema gagueja. Ah meu amigo, se isso ocorrer lá vem a pérola: "viu, essa porcaria de Android pesado pra caramba... isso não acontece no iPhone!".

Isso não acontece no Windows Phone! Ufa, ouvi muita coisa dele mas disso ele não pode falar :-) Mas eis que hoje ao navegar pelo Globo.com o Internet Explorer travou! Fui rolar a tela para ir lendo a noticia e a tela gaguejando.
Tem um agravante aí, minha conexão esta um lixo nesta área em que estou agora.
E tambem não apurei saber se a culpa não era do site.

Vou testar mais esse assunto, poque nesse tempo todo só aconteceu desta vez isto. E eu estou agora, por exemplo, editando esse post pela interface web do Blogger, que é pesadíssima, sem problemas.

De fato o Internet Explorer não é tão bom quanto o Safari. Digo isso pelas abas do Safari que no Internet Explorer funciona como novas janelas do browser e você muda entre uma e outra pela mágica tecla voltar do HTC Ultimate (como se você estivesse alternando entre programas distintos funcionando em secundo plano). Meio bizarro.

De resto tudo as mil maravilhas :-)

sábado, dezembro 10, 2011

Podcasts no Windows Phone

No primeiro dia com o HTC Ultimate eu ainda não o havia sincronizado com o Zune, então para não ficar sem nada para ouvir durante o trabalho e as idas e vindas entre casa – trabalho – casa fui procurar uma maneira de baixar podcasts.

Eu sempre odiei o iTunes no iPhone para essa tarefa. Isso porque eu não baixo todos os episódios dos podcasts que ouço, vou baixando por afinidade com o tema. Então ter a descrição do episódio é primordial para mim... eis o pecado número um da Apple! Se você fizer uma procura por “Matando Robôs Gigantes” e entrar na lista de episódios, vais ver algo do tipo:






Holy crap! Como é que eu vou saber do que se trata o episódio de quadrinhos dessa semana? E o de cinema?

Enfim, quando dava eu olhava antes no site para saber o que era, quando não dava ia na sorte.

Bem, como eu estava com o HTC Ultimate somente a um dia, não sabia da função de sincronizar pelo Zune os podcasts, então fui procurar algum software para a tal tarefa e encontrei o Podcasts! na Marketplace.




Baixei a versão free dele e gostei de cara do que vi:




 * Até o presente momento o Windows Phone 7.5 não tem a função de screenshot. Por isso da imagem a cima estar tão tosca. Desculpem.


Caraca, até que enfim além de ler o título do episódio eu poderei ler a sinopse completa!

Mas nem tudo são flores!

A versão gratuita do Podcasts! lhe limita a poder fazer download de apenas um episódio por dia dos seus podcasts favoritos. Ok, então eu comprei o programa por R$ 3,99 na Marketplace, foi muito rápido cadastrar-me e comprar o programa, e agora posso baixar ilimitados episódios dos meus podcasts favoritos no mesmo dia.

Aí veio uma sucessão de rasteiras!

Ao clicar para baixar um epsódio o programa avisa que por limitações do sistema operacional você não pode fazer mais nada no seu telefone! Ou seja, se você mudar do Podcasts! para outro programa ele para o download.
Por limitações do sistema? É que até a versão Mango (7.5) do Windows Phone, o sistema operacional realmente era monotarefa. Então estou na espera de uma atualização do Podcasts! que tire essa limitação escrota.

Outro #fail vai para o fado de que após tu adicionar um feed aos seus favoritos, ele será acessado como um link de internet atribuído a uma imagem (o avatar do site). Essa imagem aparece na hora em que você adiciona um feed e é exibido o resumo do mesmo. Assim: 





Então olhe como ficou minha galeria de podcasts favoritos depois que adicionei o MRG, Rapaduracast e o Nerdcast:





Holy crap²! Eu não posso acessar o MRG ou o Rapaduracast para baixar os episódios! Alias, galera desses blogs, por favor corrijam isso! ;)

E para fechar com chave de cocô, você também não pode fechar o Podcasts! enquanto ouve um episódio, ou seja, a limitação do monotarefa novamente que eu espero ser resolvida em breve!


Já os podcasts baixados pelo Zune podem ser ouvidos em segundo plano sem problemas. E outra hora eu posto como fazer a sincronia do Zune para o HTC Ultimate (ou qualquer outro telefone/smartphone com Windows Phone.


Por hoje é isso. Até breve.

sexta-feira, dezembro 09, 2011

HTC Ultimate/Titan: Primeiro contato (review)


  
Não podia deixar de começar a minha saga de posts sobre o Windows Phone sem falar do meu novo smartphone, um HTC Ultimate (que lá fora se chama HTC Titan).

Tela

Comigo desde terça-feira, o aparelho impressiona pelo tamanho da tela de 4,7". Sabe o que isso significa? Que você lê, navega, escreve, joga e assiste filmes e seriados de uma maneira muito confortável. Até mesmo ao navegar pelo sistema do telefone (entre contatos, aplicativos, etc) a telona se mostra excelente pelo simples fato do seu dedo não estar encobrindo 5 ícones da tela ao mesmo tempo ;)

Desempenho

Além do fato de ser um smartphone com Windows Phone, o que chama a atenção de cara é a rapidez do sistema operacional da Microsoft rodando no HTC Ultimate. Com um processador de 1,5GHz de apenas um núcleo, o telefone faz miséria! Mesmo depois de várias apps instaladas, minhas músicas no Zune, etc. ainda não passei pela situação de desbloquear o telefone e ficar esperando as coisas acontecerem, como ocorria direto no meu iPhone 3GS com iOS 5.0.1. Por exemplo, me irritava muito no iPhone começar a ouvir música, deixar em segundo plano a função "iPod" e começar a usar outra app. Depois você alternava o programa em execução para o iPod e via que ele ficava congelado alguns segundos até liberar o acesso as funcionalidades dele e atualizar a barra de progresso e a cronometragem da música que estava tocando.

Design

Eu acho o design do iPhone 4 e 4S bem mais atrativo do que o do 3G e 3GS, o HTC Ultimate se aproxima do design do iPhone 4 sendo quadrado nas bordas mas tem quase a mesma curvatura da parte traseira que encontramos no 3G/S. Todavia o telefone é, de formas gerais, mais quadrado do que os iPhones 3G/S.
Os botões de home, voltar e pesquisa que estão na barra inferir do telefone são sensíveis ao toque, então restaram 4 botões "físicos" no telefone: ligar/desligar, volume +, volume - e disparo da câmera.
Eu gostei!

Windows Phone 7.5 Mango

A estrela do telefone com certeza é o Windows Phone da série 7.
Começamos pelo "desktop" do sistema, que apresenta os aplicativos em hubs animados. As notificações ficam em um hub chamado Eu. O hub dos contatos fica animado com as fotos que meus amigos colocam no perfil das redes sociais como Facebook, Google, etc. É irado! Além da tela inicial com os hubs você tem a segunda tela principal com a lista, em ordem alfabética, de todas as aplicações instaladas no seu telefone. Qualquer uma delas tu pode "fixar" na área principal, no desktop.

Outra coisa que eu achei muito útil é que as aplicações interagem com o conteúdo do teu telefone. Se tu estiver com na sua galeria de fotos, aparecerá a lista de programas instalados que lidam com fotos (um dos mais irados é o PhotoFunia). O iOS está anos luz desta visão de interação entre conteúdo e aplicações, o mais perto que chegaram disso é o fato de poder colocar uma foto da sua galeria no Twitter!


Nesta imagem podemos ver o Flickr listado como aplicativo útil no trato com imagens. Perfeito!
Repare também na navegação horizontal do Windows Phone. Indo da esquerda para a direita temos: o menu principal do hub Fotos, as imagens favoritas, as imagens que seus contatos estão postando nas redes sociais e por último (mais a direita) os aplicativos lgados ao hub.

É uma experiência fantástica de uso. Recomendo que testem um dia, peguem o smartphone de um amigo ou em uma loja das operadoras da sua região. Vais ver o que estou falando.

Assessórios

Ainda não achei capa de silicone ou película a venda para esse smartphone aqui no Brasil (em lojas e no Mercado Livre). Fora do Brasil consegui comprar no eBay apenas a película protetora, nada de capas de silicone.

Fora que não há ainda uma gama de acessórios para ele. Como uma dock station, etc. Vou aguardar pacientemente por isso ;)



Conclusão

Eu recomendo o HTC Ultimate. Até agora não está me devendo nada em desempenho e funcionalidades (se bem que depois postarei aqui alguns softwares que eu procurei e não achei na Marktplace brasileira).