segunda-feira, abril 16, 2007

Comprando OnLine com Cartão de Crédito

Há muito tempo compro coisas pela Internet pagando com cartão de crédito, e acho que hoje foi a primeira vez que tive uma experiência (de uso) ruim. Muita gente tem medo de comprar pela Internet, eu tenho mais medo de comprar em loja ou posta de gasolina onde o atendente some por alguns minutos com o seu cartão (e afinal basta xerocar, anotar ou memorizar uns poucos dados para "roubar" o cartão).

O problema que tive foi um problema de usabilidade, não de segurança. A coisa começou meio estranha quando a loja virtual criou um "pré-pedido" sem perguntar sobre a forma de pagamento. No e-mail de confirmação veio um "opção de pagamento disponível em nossa página 24h após o recebimento desta confirmação". Lendo nas entrelinhas, o pedido colocado na loja é conferido (particularmente preços e estoque) antes de permitir o pagamento. Talvez seja até mais seguro, mas é diferente do que se vê na maioria das lojas virtuais.

Algumas horas depois, veio o aviso que o "status do seu pedido mudou para aguardando pagamento". É um erro clássico (no qual também caio com frequência): falar com o usuário como se estivesse falando para o compilador. De qualquer forma, quer dizer que deu tudo certo com o pré-pedido e você pode voltar ao site para escolher a forma de pagamento.

Escolhi cartão de crédito Mastercard. O pagamento em si não é feito pela loja virtual, mas sim por um site padrão de pagamento; quando clico em prosseguir aparece o aviso de popup bloqueado. Volto atrás, habilito popups para o site. Aparece o formulário para entrar com os dados, devidamente desformatado no Firefox. Entre com os dados e ... tenta abrir um novo popup (que é bloqueado, pois agora é um outro domínio). Beco sem saída, será que o cartão foi debitado? Dica para os programadores Web: a maioria dos usuários usa bloqueador de popup, os browsers mais recentes saem com o bloqueador ligado. Se possível, não use popup. Se for usar, avise ao usuário para desbloquear e coloque um link para abrir a janela se o popup for bloqueado. Tem muita gente que faz isto direito.

Consulto o cartão de crédito e parece que não foi debitado. Resolvo arriscar novamente, usando o IE com o bloqueio de popup desligado. As janelas abrem, a formatação está correta. E no final um aviso de "erro no processamento". E novo beco sem saída.

Aguardo mais um pouco e decido tentar com um cartão Visa. O site para entrar com os dados é outro. As coisas vão melhor até que aparece dois botões em branco. Clico em um deles e aparece um message box de confirmação, também com o texto em branco. Sim ou Não. Sim... e acabo de desistir! Repito tudo e clico no outro botão. Aparece uma mensagem dizendo sucesso e um número de confirmação. Mais nada. Numa das primeiras telas aparecia um comprovante bonitinho com o impresso nos PDVs; será que custava muito apresentar de novo no final, para imprimir junto com o número de confirmação?

De qualquer forma, o pagamento parece ter sido feito correto e sem duplicidade. Mas a experiência foi terrível!

Obs.: Continuo na correria, ainda não consegui escrever a próxima parte da construção de compiladores, nem retomar uns outros textos maiores que eu comecei há muito tempo atrás. Só escrevi isto porque precisava desabafar!

segunda-feira, abril 09, 2007

A Dura Vida do Desenvolvedor para Windows CE

A história do Windows CE

Em 1994 a Microsoft iniciou o desenvolvimento de um novo sistema operacional de 32 bits, destinado a sistemas dedicados e/ou embarcados. Dadas as restrições de memória e capacidade de processamento destes sistemas, foi adotado um subconjunto da API Win32, reduzindo a funcionalidade e removendo funções redundantes. Embora tenham sido aproveitadas as APIs e idéias dos outros dois Windows de 32 bits da Microsoft (Windows 95 e NT), o código fonte do Windows CE é em grande parte novo. Como o NT, O Windows CE foi projetado para suportar diversos modelos de processadores.

Uma característica importante do Windows CE é a modularidade. Um fabricante de hardware pode selecionar os módulos que necessita (usando uma ferramenta gráfica, o Plataform Builder) e gerar uma versão do Windows CE contendo apenas os recursos que necessita. Neste processo o fabricante acrescenta os drivers e aplicações específicas ao seu equipamento. Uma das aplicações importantes a serem acrescentadas é o Shell que é o módulo responsável pela interface com o operador (por exemplo, apresentação do desktop para os dispositivos que o tiverem).

Ao contrário das demais versões de Windows, a Microsoft não comercializa o Windows CE diretamente para usuários. A Microsoft licencia o Windows CE para os fabricantes que o disponibilizam para os usuários.

Palm-Sized PC, Pocket PC e Windows Mobile

A própria Microsoft gera versões específicas do Windows CE. Basicamente, a Microsoft define os requisitos da plataforma de hardware (em alguns casos bastante específicos), desenvolve alguns drivers e aplicações (notamente o Shell) e licencia o resultado para os fabricantes de hardware. Os times que geram estas versões específicas são times separados dos que desenvolvem o sistema operacional.

Uma destas versões foi o Palm-sized PC, baseado no Windows CE 2.1. Esta foi a primeira experiência da Microsoft em projetar um PDA. O resultado não foi muito animador: a interface com o usuário era desconfortável e o desempenho irritante no hardware disponível na época.

A plataforma PDA seguinte veio em 2000 com um novo nome: PocketPC (talvez devido às pressões da Palm contra o nome anterior). Baseado no Windows CE 3.0 e com uma especificação de hardware mais recheada de MHz e Megabytes, permitiu à Microsoft fincar o pé definitivamente no mercado de PDAs.

A versão seguinte foi o Pocket PC 2002 (a versão original do Pocket PC foi retroativamente denominada de Pocket PC 2000), ainda baseada no Windows CE 3.0.

O nome foi alterado novamente na versão seguinte, que foi o Windows Mobile 2003, baseada no Windows CE .Net 4.0 (sim, o nome do sistema também mudou). A ele se seguiram o Windows Mobile 2003 Second Edition e o Windows Mobile 5.0.

Vários fabricantes fabricaram e fabricam para o "mercado de consumo" PDAs baseados nestes padrões. Estes fabricantes costumam lançar com frequência novos modelos. Uma pergunta comum dos compradores destes equipamentos é sobre a atualização do sistema operacional. Como vimos, os fabricantes é que tem a responsabilidade de gerar e disponibilizar estas novas versões, o que normalmente não preferem não fazer.

Um outro mercado que usa estes padrões é o de coletores de dados. Neste caso estamos falando de equipamentos mais robustos e caros (às vezes dez vezes mais caros que um PDA) e que são produzidos com volumes muito menores. Por estes motivo, não é incomum os fabricantes comercializarem a atualização do sistema operacional. Um outro ponto é que as exigências de hardware destes padrões são às vezes rigorosas demais para o mercado de coletores de dados (por exemplo, o Pocket PC exige um microfone e um botão para a função de gravação de voz). Em alguns modelos os fabricantes de coletores preferem fugir destes padrões e gerar a sua própria versão do Windows CE. Mesmo nos modelos compatíveis com os padrões às vezes é oferecida uma opção de menor custo baseada em uma versão customizada do Windows CE.

Desenvolvendo Para o Windows CE

A primeira dificuldade já deve estar óbvia: conviver com uma nomenclatura mutante e confusa.

O segundo ponto é que cada uma destas plataformas tem um SDK próprio. Particularmente no caso dos coletores de dados, existem diferenças de fabricante para fabricante e os modelos antigos (dada a sua robustez) se recusam a morrer. No caso dos coletores baseados em um padrão da Microsoft, normalmente é necessário instalar primeiro o SDK da Microsoft e depois o SDK do fabricante.

Algumas pessoas pensam que sendo o Windows CE um Windows, deve dar para executar os mesmos programas que no desktop. Como vimos, a API do Windows CE é diferente da Win32 do desktop. Na maioria dos casos, o processador é diferente. A memória disponível é muito menor e não existe disco. E, talvez o mais importante, a forma de operação é completamente diferente.

Inicialmente a Microsoft vendia Toolkits para o Visual C++ e Visual Basic (versões 5 e 6) para o desenvolvimento para o CE. No caso do VB, a linguagem era semelhante ao VBA e não ao VB propriamente dito.

Junto com o Pocket PC, a Microsoft lançou o eMbedded Visual Tools, composto pelo eMbedded Visual C++ (eVC) e do eMbedded Visual Basic (eVB). Estes produtos são gratuitos e sairam direto na versão 3. O eVC é bastante completo, incluindo os frameworks ATL e MFC. O eVB continuou sendo baseado no VBA.

Com o Pocket PC 2002 foi lançado o eVC 4 (o eVB morreu na versão 3 mesmo). Os SDKs anteriores continuavam exigindo o eVC3. É possível instalar na mesma máquina as duas versões do eVC, porém o ícone do programa é o mesmo e o Open With... se recusa a distinguir as duas.

Com o Windows CE .Net passou a estar disponível o Compact Framework para desenvolvimento usando C# e VB.Net. Entretanto, isto não ficou pronto a tempo para inclusão no Visual Studio .Net 2002 e acabou sendo disponilizado como um download gratuito. O Visual Studio .Net 2003 incluiu isto (da mesma forma que incluiu outras funcionalidades e correções de bugs que não ficaram prontas em 2002) e o download para o VS 2002 sumiu.

O Visual Studio 2005 absorveu a funcionalidade do eVC. E chegamos assim à data atual, quando resolvo fazer meu primeiro projeto em C para CE no VS 2005. Seleciono Smart Sevice Win32 Project, informo o nome do projeto e ... nada. Discretamente na linha de status aparece a mensagem "project creation failed". Vários minutos no Google e localizo a solução mágica, que reproduzo abaixo, em:
http://blogs.msdn.com/jeffabraham/archive/2007/02/13/are-you-having-issues-creating-native-projects.aspx

1) [opcional] Acenda uma vela vermelha de cada lado do micro. Sacrifique uma galinha preta sobre o teclado.

2) Feche o Visual Studio.

3) Chame o RegEdit e navege para

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Ext\PreApproved

4) Crie uma nova chave com o nome

{D245F352-3F45-4516-B1E6-04608DA126CC}

5) Feche o RegEdit e rode novamente o Visual Studio

É um problema conhecido que ocorre quando se faz upgrade para o Vista ou se instala o Internet Explorer 7. A solução está incorporada no Service Pack 1 do VS 2005.

É mole?