Alberto Silva

Um blog sobre mobilidade, desenvolvimento para plataformas Windows Mobile e os obrigatórios Off-topic!

This Blog

Syndication

Search

Tags

News

  • Você escolheu um software de gestão que se adapta ao seu negócio... Porque há-de deixar que lhe imponham uma solução de mobilidade para as suas forças de venda? Contacte a moving2u e teremos todo o prazer em lhe apresentar as nossas soluções!


    Grab this badge here!

Community

Email Notifications

Archives

Eventos

Desenvolvimento .net CF

Mobilidade em Português...

Sobre mim...

MSDN

Assim chega mais um ano ao fim, momento habitual para balanços de como correu o ano face às expectativas que foram sendo criadas.

No plano pessoal, aspecto importante ao condicionar o sucesso nas outras áreas, o maior destaque vai para a confirmação da reguilice da Inês, agora com 2 anos, e das boas referências que a Anita tem dado na escola, e mais recentemente no violino!

Agora no plano ‘comunitário’, apresentei duas sessões no DevDays em Fevereiro, apresentando numa delas uma aplicação que o Jack Bauer se orgulharia de ter no seu PDA, fui ao MVP Global Summit a Redmond pela 4ª vez, apresentei uma sessão num evento do PocketPT.net para profissionais em Março, e outra sobre o papel que o Windows Mobile pode tomar nas organização no Politécnico de Vila do Conde em Abril. Em Outubro recebi o título de MVP pela Microsoft pela 7ª vez consecutiva. A actualização do blog tem sido um pouco irregular, o Twitter vou actualizando a maior parte das vezes com assuntos off-topic, os newsgroups nacionais não têm tido grande actividade e tenho vindo a acompanhar o fórum da MSDN destinado ao SQL Compact, onde tenho sido um considerado um dos ‘top answerer’. 2009 era suposto ser o ano em que o meu projecto sucessivamente adiado tomaria forma, mas por razões profissionais terá de continuar na sua condição de… adiado…
No âmbito do Windows Mobile este foi um ano que não trouxe muito de novo, o Windows Mobile 6.5 embora interessante, ainda não é o marco que temos vindo a esperar, para os programadores para a plataforma Windows Mobile, o único destaque são os widget para 6.5. Esperamos que 2010 dê mais frutos neste campo.

E por falar em razões profissionais, este foi um ano que para a moving2u não começou muito mal, bem melhor que o início de 2008, mas ao longo do ano, o adiamento de tomada de decisões por parte de muitas empresas, algumas com projectos que estavam praticamente adjudicados, levaram a que só na rampa final o panorama tenha melhorado de forma animadora, antecipando o que esperamos que seja um bom 2010. Esta parada do mercado permitiu-nos investir na nossa solução de pré-venda e auto-venda, tendo-lhe adicionado uma componente de ‘assistência técnica’, ao mesmo tempo que migrámos a solução para .NET CF 3.5 e SQL Compact 3.5, de modo a podermos acompanhar a evolução das tecnologias do lado dos servidores, como o Windows Server 2008, o SQL Server 2008 e as suas versões a 64 bit. Do lado dos PDA propusemo-nos uma revolução da UI, mantendo em termos gerais os elementos das versões anteriores, mas passando a acompanhar algumas tendências como os gestos, ou a garantia da aplicação correr em qualquer equipamento com ecrã táctil Windows Mobile 5.0 ou posterior, independentemente da sua resolução (240x320, 480x640, 320x320, 240x400 e 480x800) ou da sua orientação, sendo das poucas aplicações empresariais capaz de correr num equipamento como o TMN Bluebelt, adaptando-se em tempo real à mudança de orientação de ecrã, como quando se abre um teclado lateral deslizante. A nossa aposta continuada de 5 anos nesta solução tem vindo a dar os seus frutos, passando a ser considerada por grandes empresas de âmbito nacional em projectos em Portugal e Angola, estando a aplicação neste momento integrada com Primavera, PHC, SAP Business One, Eticadata, Gexor e outros menos conhecidos. 2010 vai também marcar um grande marco na evolução da solução m2uMobileSales, ao passar a ser distribuída pelos parceiros de uma das principais software house Portuguesas em regime OEM. Em termos gerais, a moving2u renovou o estatuto de ‘Microsoft Certified Partner – Mobility Solutions’.

A duas horas do novo ano, a minha atitude é… VENHA ELE!!! Espero que 2010 Vos traga pelo menos aquilo para que trabalharem, e que as surpresas o sejam apenas pelas melhores razões!

Posted by Alberto Silva | with no comments
Filed under: ,

Recebi no meu agregador de feeds RSS um conjunto de 7 artigos muito interessantes publicados no CodeProject sobre o desenvolvimento para Windows Mobile em diferentes vertentes.

Parte I – Instalação do Visual Studio 2008, ferramentas necessárias e primeira aplicação
http://www.codeproject.com/KB/mobile/MOB4DEVS01.aspx

Parte II – Utilização do Device Emulator, do Cellular Emulator e automação do Device Emulator
http://www.codeproject.com/KB/mobile/MOB4DEVS02.aspx

Parte III – Desenvolvimento de aplicações baseadas em forms com .NET Compact Framework
http://www.codeproject.com/KB/mobile/MOB4DEVS03.aspx

Parte IV – UserControls, integração com GPS e utilização do ‘emulador’ de GPS
http://www.codeproject.com/KB/mobile/MOB4DEVS04.aspx

Parte V – Introdução à utilização do SQL Compact com DataSet e SqlCeResultSet
http://www.codeproject.com/KB/mobile/MOB4DEVS05.aspx

Parte VI – Compreender o modelo de segurança do Windows Mobile e deployment de aplicações .NET CF
http://www.codeproject.com/KB/mobile/MOB4DEVS06.aspx

Parte VII – Desenvolvimento Web para Windows Mobile
http://www.codeproject.com/KB/mobile/MOB4DEVS07.aspx

Os artigos estão ligados ao ‘track’ de desenvolvimento para Windows Mobile do projecto RampUp:

http://msdn.microsoft.com/en-us/rampup/dd807370.aspx

windowsphone Na próxima semana, mais em particular no dia 6 de Outubro, será apresentada a nova versão do sistema operativo da Microsoft para telefones, que ganha a nova designação Windows® Phone. A versão 6.5 conhecerá as mesmas declinações que conhecemos desde a versão 6.0 (com ecrã táctil e com ou sem telefone, e sem ecrã táctil mas com telefone), mas surge agora mais atraente e funcional naquilo que os olhos conseguem perceber, trazendo um conjunto de novas funcionalidades, gestos e recursos. A Microsoft Portugal associou-se ao lançamento mundial desta nova versão, e anuncia a disponibilidade de equipamentos desde o dia do lançamento, como é anunciado neste comunidado à imprensa:

Microsoft anuncia a disponibilidade da nova geração de Windows® Phones a partir de 6 de Outubro
http://www.microsoft.com/portugal/presspass/press/2009/set09/09-1phonesnewgen.mspx

Conto estar presente nesta apresentação e espero poder partilhar as minhas primeiras impressões com o Windows Mobile 6.5 logo a seguir :)

Posted by Alberto Silva | with no comments
Filed under: ,

Desde 2003 que tenho sido nomeado MVP pela Microsoft, nos primeiros anos com a competência “Mobile Devices”, e desde 2007, “Device Application Development”. O título, galardão, prémio, competência, aquilo que lhe quiserem chamar, de MVP é uma forma da Microsoft reconhecer publicamente as pessoas que se destacam no suporte aos seus produtos, sendo tido em conta as diversas formas de participação possível, desde os newsgroups e foruns, aos blogs, participações como orador, grupos de utilizadores e outra comunidades.

O título reconhece o trabalho feito nos 12 meses anteriores à sua atribuição, e é válido nos 12 meses seguintes, e concede ao galardoado algumas benesses, bem como alguns deveres. Entre as primeiras destacam-se a possibilidade de participar no encontro anual de MVPs em Seattle/Redmond e a possibilidade de conhecer o campus da Microsoft, o direito a utilizar o título Microsoft MVP e logotipo, acesso a recursos e eventos online com pessoas da Microsoft, e mais algumas, como uma subscrição MSDN. Entre os deveres destaca-se o acordo NDA (non-disclosure agreement) que nos impede de divulgar toda a informação a que temos acesso de forma privilegiada e que não tenha sido expressamente identificada como passível de ser partilhada, bem como respeitar o código de conduta criado pela Microsoft. O galardão MVP não obriga a que tenhamos que continuar a nossa participação nas comunidades que conduziu à sua atribuição (se bem que assim será improvável que ele seja de novo atribuído), que tenhamos de prescindir da nossa isenção em público na comparação e preferências de utilização de produtos concorrentes, nem obriga a que o galardoado o aceite!

Uma confusão frequente é considerar este título como uma certificação: a única avaliação feita é à frequência e qualidade das nossas participações, independentemente das certificações ou conhecimentos que a pessoa possa ter. Apesar de ser de novo reconhecido com o título MVP pela 7ª vez consecutiva, sendo o MVP português mais ‘antigo’ no domínio do Windows Mobile em Portugal, não tenho dúvidas que em muitos campos haverá pessoas em pessoal no domínio do desenvolvimento de aplicações para Windows Mobile e Windows CE com maior competência do que eu, mas que pelas mais diversas razões, como indisponibilidade, dificuldade de comunicação, incapacidade para partilhar conhecimento, …, nunca se predispuseram a devolver à comunidade aquilo que dela recebemos, como eu nos primeiros tempos de contacto com a plataforma no tecnologicamente longínquo ano de 1999.

Esta é a lista de MVPs em Portugal relacionados com Windows Mobile e Desenvolvimento:

Alberto Silva: MVP desde 2003, actualmente focado nos temas relacionados com a .NET Compact Framework, o SQL Compact para dispositivos móveis e questões arquitecturais no desenvolvimento de aplicações empresariais para Windows Mobile e Windows CE. Participa em newsgroups e fórums MSDN, mantem este blog e é orador habitual em eventos Microsoft e outros quando o tema é o desenvolvimento para Windows Mobile. É responsável de I&D na moving2u, empresa que se dedica em exclusivo ao desenvolvimento de software profissional para Windows Mobile, com destaque à solução para forças de vendas que integra com diferentes ERP, como Primavera, SAP B1, PHC, entre outros.

João Paulo Figueira: MVP desde 2004, inicialmente como ‘Embedded MVP’ e mais tarde com a competência “Device Application Development”. O João distingue-se nas vertentes do código nativo (C++), do SQL Compact e tecnologias de comunicação de dados, nomeadamente RAPI, tendo uma particular apetência para escrever artigos técnicos e tendo já participado como orador no TechEd em Barcelona e no MEDC em Nice. Profissionalmente tem estado envolvido em projectos que envolvem cartografia em plataformas móveis, nomeadamente Windows Mobile, CE e iPhone. A Primeworks é a empresa do João, que mantém diversos produtos relacionados com SQL Compact.

Nuno Luz: MVP desde 2008 com a competência “Windows Mobile”, o Nuno está ligado à criação do PocketPT.net, uma das maiores comunidades online dedicada ao Windows Mobile.

Posted by Alberto Silva | 3 comment(s)
Filed under:

Há tempos foi reportado que num dos nossos clientes da nossa solução de pré/auto-venda, o carregamento de uma lista com 60 a 70 registos demorava mais de 5 minutos, enquanto noutros clientes, com o mesmo volume de informação não demorava mais de uns breves segundos. A operação em causa dependia de uma consulta à base de dados no PDA que continha múltiplos JOIN, sobre um comando preparado, e a diferença entre clientes também poderia estar relacionada com os equipamentos utilizados, pois a tal operação de ‘5 minutos’ com a mesma base de dados demorava ‘apenas’ 40 segundos no meu emulador.

Para fazer o tunning à instrução, abri o SQL Server Management Studio, e estudei o Execution Plan da mesma, o que me foi dando ideias para índices a criar, mas sem que tal tivesse um impacto significativo em termos de performance. Aí vi que tinha que mudar a instrução e comecei a pensar como fazê-lo, pois era importante obter a informação das tais tabelas ligadas de uma só vez, mas identifiquei uma tabela de lookup, e tirei-a da instrução SQL, menos um JOIN portanto, e automaticamente o comando passou a ser executado quase instantaneamente. Como a tal tabela era importante, decidi pré-carregá-la numa colecção do tipo key, value, e a cada registo consultava essa colecção para recuperar o valor que necessitava.

Tudo embalado de novo (alteração ao comando, carregamento da lista e novos índexes), no PDA do cliente a tal operação que demorava mais de 5 minutos passou a ser executada em entre 1 e 2 segundos!

Hoje dei com esta pérola no fórum da MSDN dedicado ao SQL Compact, um tipo que tinha uma instrução tão simples como:

SELECT TOP(1) SysDate FROM Violator ORDER BY SysDate Desc

em que a tabela em causa tinha um index criado para a coluna em causa com ordem descendente. Ao executar a instrução no emulador demorava cerca de 35 segundos, o que para ele era inaceitável, e ao analisar o Execution Plan do comando no SQL Server Management Studio, concluíu que o SQL Compact estava a fazer um INDEX SCAN em vez de um INDEX SEEK, que se esperaria que fosse mais performante. O EricEJ, um MVP de SQL Server Compact, sugeriu-lhe uma pequena modificação à instrução, acrescentando-lhe um WHERE inócuo…

SELECT TOP(1) SysDate FROM Violator WHERE SysDate < GETDATE() ORDER BY SysDate Desc

… e automaticamente o comando passou a ser executado de forma muito mais rápida no emulador!

Conclusão

O Query Processor (QP) do SQL Compact tem o seu quê de feminino, é difícil compreender as suas decisões, e mesmo quando achamos que o conhecemos bem, lá aparece uma situação nova a mostrar-nos o contrário, e temos de usar de truques para o convencer a fazer o que queremos :)

No fórum da MSDN dedicado ao SQL Compact surgiu uma questão arquitectural que, de forma resumida, pretende que se debata um modelo sobre como abstraír uma aplicação da questão se está ou não online. A minha resposta, em inglês foi a seguinte:

I think we can break this in two parts: getting data from the server and putting data on the server.

To get data from the server, you have to think how much data you may need on the client side, and how often it may change on the server side. As app like a survey app is very different from an app where you can insert orders, getting the current stock level for each product you select and get the most up-to-date information about the customer credit balance.

So, depending on those details you should consider a simple model, where the app on startup get's all up to date information it needs and stores it in objects in memory or cached locally, or a more complex model, where while connected the client app has to keep a local cache up to date, either with a polling mechanism (the client checks for updates) or a notification mechanism (the server notifies the client).

About putting the infomation created/updated/deleted back on the server, I would consider a permanent cache, like a SQL Compact database, and a flag mechanism per record. All operations on the client app would be done locally on the cache, updating the flag status accordingly and whenever the server was reachable, a differnent thread would be uploading those operations and reseting the flag.

The critical issue when you assume that your app has to work mostly online but also offline, is that in most scenarios you don't know when you are going to offline, so no chance for a last breath to get up to date information.

About the technology to sync information, you may roll out your own, or if your client app is a desktop app, take a look athe the ADO.net Sync Services, namely the current v2 CTP, which is a very optimized mechanism based on rules to synchronize databases.

Se tiverem dificuldade em perceber alguma coisa, ou quiserem partilhar um comentário sobre o tema, estejam à vontade para usar os comentários do blog.

Terá lugar no próximo dia 2 de Outubro um evento de dia inteiro, com três tracks paralelos que se traduzem em 13 sessões dedicadas às questões emergentes ligadas às tecnologias Silverlight, Internet Explorer, Expression, ASP.NET e Windows Azure. O evento terá lugar em Lisboa, na Reitoria da Universidade Nova, e contará com um leque de renomeados oradores da Microsoft Portugal e da ‘casa-mãe’.

Destas tecnologias as que mais expectativas podem trazer a quem programa para dispositivos móveis serão o Silverlight, que tem visto o seu suporte em Windows Mobile ser adiado, e as tecnologias ligadas à ‘cloud’, nomeadamente os ‘ADO.NET Data Services’ e tecnologias relacionadas com sincronização de equipamentos com ‘a nuvem’, ainda que não tenha qualquer informação que a interligação destes temas com o desenvolvimento para Windows Mobile seja aflorado neste evento.

remix

O registo está aberto, o nº de lugares disponíveis é limitado e o custo de inscrição é de 50€ por participante.

 

Já no próximo dia 10 em Lisboa, e no dia 15 no Porto, decorrerá o SQL Server 2008 Deep Dive, evento dedicado como o próprio nome indica à exploração do SQL Server 2008 em diversas vertentes, como a escalabilidade, alta disponibilidade, oprimização, gestão de serviço, performance e virtualização.

sqlserverdd

Não tendo nada a ver em particular com o SQL Compact para dispositivos móveis, algumas das questões abordadas são de extrema importância em cenários de alta disponibilidade de servidores SQL Server que tenham de servir dispositivos móveis, seja via web services/WCF, seja por replicação.

Mais informações, agenda e registo no site do evento.

Posted by Alberto Silva | with no comments
Filed under:

Recebi a seguinte pergunta via mail…

Bom dia Alberto,

Um colega meu desenvolveu um utilitátio para iPhone que indica qual a xxxxxxxxx mais perto de onde o iPhone se encontra. Eu já estive a ver o software e gostei muito e por isso pedi-lhe para ele fazer uma versão para Windows Mobile. Ele ainda não consegui concretizar esta portabilidade pois diz que cada aparelho Windows Mobile utiliza maneiras diferentes de comunicar com o GPS e por isso perguntou-me se eu conheço alguma livraria que ele pudesse usar para comunicar com os GPS’s.

Podes ajudar-me neste assunto?

…e esta é a minha resposta…

Olá Jorge,

Sim, há forma uniformizada de o fazer. Até há uns tempos atrás podia ser complicado, pois um PDA com Windows Mobile podia ou não ter GPS incorporado, e se não tivesse, podia ligar um GPS externo fosse através de bluetooth, fosse de um cabo série. O problema que isto apresentava era que a porta COM onde o GPS era exposto e os parâmetros da ligação variavam em função do modelo do PDA e da ligação escolhida, mas mais grave ainda, as portas COM não permitem ser acedidas de forma partilhada, ou seja, uma vez abertas por uma aplicação, não podem ser acedidas pelas outras.

Desde o Windows Mobile 5 que a Microsoft providenciou um método que permite contornar de algum modo estas questões, através de um ‘driver’ GPS que se liga ao dito cujo, e que permite que diferentes aplicações se alimentem do feed NMEA que o GPS vai enviando constantemente, o GPS Intermediate Driver:

http://blogs.msdn.com/windowsmobile/archive/2006/06/07/620387.aspx

Esse ‘driver’ é uma aplicação que nos equipamentos com ecrã táctil surge nos settings do PDA, no entanto há fabricantes que optaram por não o expor, sendo necessário proceder a uma modificação do registry do PDA (ver link anterior). Nesta aplicação definimos como nos pretendemos ligar ao GPS, seja incorporado, seja via bluetooth com uma porta virtual, e como pretendemos expor o feed do GPS.

Para poder consumir o feed sem nos termos de preocupar com a questão das portas COM, o Windows Mobile 6 Professional SDK traz um exemplo de como fazê-lo em C#:

http://www.microsoft.com/downloads/details.aspx?familyid=06111A3A-A651-4745-88EF-3D48091A390B&displaylang=en

O mesmo SDK traz uma aplicação chamada Settings.exe na pasta Tools que permite controlar o GPS Intermediate Driver em equipamentos sem ecrã táctil.

 

O que acham deste formato de partilha de informação, tipo consultório?

Muitos dos programadores para Windows Mobile desconhecem o que o Windows Mobile e Windows CE têm de diferente e de similar entre si.

Em resumo, “Windows Mobile” é uma plataforma definida pela Microsoft, que tem um conjunto de requisitos de hardware e de implementação da plataforma em si, que tornam cada versão do Windows Mobile um sistema operativo muito homogéneo, independente do fabricante do hardware, o que para quem desenvolve software é muito importante, pois é a garantia que salvaguardadas algumas questões de pormenor, uma mesma aplicação corre numa diversidade de equipamentos diferentes, espremendo o que de melhor têm para dar.

Por outro lado, o Windows CE é um sistema operativo altamente modular, que corre numa diversidade enorme de plataformas de hardware (x86, ARM, SH, MIPS, …) e que pode ser personalizado até à exaustão! Cada fabricante que licencia o Windows CE, escolhe os componentes de hardware que quiser, desenvolvendo ou utilizando os drivers dos respectivos fabricantes, e escolhendo que componentes do sistema operativo e aplicações desenvolvidas por eles próprios ou por terceiros que pretendem implementar, conseguindo iludir perfeitamente o mais conhecedor dos utilizadores sobre a plataforma em que determinado equipamento funciona. E por falar em equipamentos Windows CE, temos desde os terminais tipo PDA mais robustos, aos sistemas de navegação de diversos fabricantes, aos leitores Zune e consolas Sega Dreamcast, a muitas set-up boxes e cada vez mais, equipamentos industriais e de consumo perfeitamente insuspeitos.

Vamos imaginar que…

  • querem ‘criar’ um robot telecomandado ou com sensores para ter alguma autonomia, capaz de tirar fotos e gravar videos e fazer o upload dos mesmos para um webservice, com uma placa WiFi ou modem 3G, com GPS para informar onde se encontra, com um servidor HTTP para que remotamente se possa configurá-lo via browser de qualquer equipamento e com uma porta USB para tocar uns ficheiros MP3 à medida que se passeia.
  • que precisam de controlar uma linha de montagem, avançando-a à medida que se concretizam determinadas condições, reagindo a sensores e equipamentos de visão artificial, actuando sobre mecanismos que rejeitam peças não conformes, com um simples display de segmentos LED daqueles verdinhos, ligado a uma LAN e enviando alertas via mail acompanhados de fotos quando determinadas condições se verificam.
  • ou até, que têm ideias muito concretas sobre um módulo multi-funções de localização e controlo remoto de viaturas, que ligado a um GPS, sensores, actuadores e sistema ODBII do carro vos permite saber onde está o carro, despoletar alertas quando se aproxima de um ponto, enviar para o carro coordenadas para onde o condutor se deve dirigir, serem avisados que o motor de frio de uma viatura de transporte de congelados avariou ou que um airbag disparou, que o condutor ultrapassou determinada velocidade, ou que está há demasiado tempo parado no mesmo local, ou ainda imobilizar o carro à distância ou destrancá-lo com um SMS
  • isto sem falar naquele sistema de rega automática para o V/ jardim, que controla as condições de humidade do solo e as previsões metereológicas, e se desliga automaticamente quando detecta que o V/ cão se passeia pela relva

Em qualquer um destes cenários, a opção por uma plataforma Windows CE que preveja um conjunto de entradas/saídas analógicas e digitais é sem dúvida alguma a melhor opção para a sua implementação, pois permite que quem a implemente se concentre nos aspectos funcionais da mesma e atinja um nível de funcionalidade que seria inimaginável com uma solução baseada em autómatos. Para além das funcionalidades base do sistema operativo em si, que suporta directamente desenvolvimento em código nativo C++, pode escolher-se do catálogo de funcionalidades por ex. a .NET Compact Framework e o SQL Compact, e utilizar VB.net e C# para controlar o comportamento do sistema.

Voltando ao Windows Mobile, a cada versão deste está intimamente associada uma versão do Windows CE, da qual vários componentes são usados, e sobre os quais recaem outros componentes específicos que tornam o Windows Mobile aquilo que vemos, garantindo a tal homogeneidade que o Windows CE em si não pode oferecer, pois fabricantes diferentes são livres de escolherem a forma como querem implementar a sua plataforma, não podendo garantir que um determinado componente de hardware ou software exista em equipamentos diferentes, ou até que exiba o mesmo comportamento. Um exemplo perfeito disto é a diferença entre a forma como o Windows Mobile e o Windows CE gerem o módulo de comunicações GSM/GPRS/3G dos equipamentos, em que nos primeiros o Connection Manager nos abstrai dos detalhes da implementação do mesmo, enquanto que no Windows CE temos que utilizar SDK específicos de cada fabricante para utilizar as funcionalidades que o fabricante decide expor.

A opção pela construção de um equipamento baseado em Windows CE é similar à construção de um carro: se for uma pequena série, usamos um chassis tubular e componentes mecânicos de outros fabricantes, para minimizar o custo inicial, enquanto que para uma grande série, podemos planear um chasis monobloco e soluções mecânicas próprias. Da mesma forma, com o Windows CE, podemos usar uma board de referência que se adeque genericamente ao pretendido, ou conceber o esquema em que serão montados os circuitos e hardware requerido para personalizar a implementação ao máximo.

Para saber mais sobre a forma como o Windows CE pode ajudá-lo na implementação daquele projecto sobre o qual tem ideias muito concretas, mas não sabe como implementá-lo, assista ao seguinte webcast com a duração de 60 minutos:

MSDN Webcast: Windows Embedded CE and Handheld Solutions (Level 100)
http://www.microsoft.com/events/series/detail/webcastdetails.aspx?seriesid=122&webcastid=5241

Se manifestarem interesse sobre este tema, poderei transmiti-lo à Microsoft no sentido de lhe ser dada mais atenção em futuros eventos cá em Portugal. Até lá, acompanhem os seguintes videos da Imagine Cup 2009 no Egipto com o Windows Embedded CE como mote.

Imagine Cup – Day 4. Projects and Walkabout

Imagine Cup – Windows Embedded – Final six teams 

Imagine Cup 2009 – Embedded Competition – Day Two

Imagine Cup 2009, Egypt – Embedded Competition Day One

Já não é novidade para ninguém que a preparação de um comando que precisa de ser executado múltiplas vezes com diferentes valores melhora de forma muito sensivel a performance de execução da 2ª execução e das seguintes (no SQL Compact, o comando é efectivamente preparado na 1ª execução e não na invocação do método .Prepare). Para além disso, usar comandos SQL com parâmetros elimina os problemas por muitos conhecidos de ‘qual o formato da data’ ou ‘qual o separador decimal’ a utilizar ao passar valores deste tipo para o comando a executar.

Os parâmetros podem ser utilizados da forma mais convencional, como em…

UPDATE stocks SET qtd=@novaQtd WHERE artigo=@artigo

…mas uma questão encontrada com frequência é, como preparar um comando com uma cláusula WHERE com o operador IN, em que o nº de valores a procurar é desconhecido à partida ou até variável?

UPDATE stocks SET qtd=0 WHERE artigo IN (@artigo1, @artigo2, …, @artigon)

Nas versões completas do SQL, a solução proposta passa quase sempre por criar uma stored procedure para o efeito, mas o SQL Compact não suporta stored procedures, pelo que parecia não haver solução para este problema.

Ao encontrar esta questão pela enésima vez num fórum, reflecti mais um pouco e apresentei uma solução que produz o mesmo efeito.

Vamos supor que temos uma tabela clientes, da qual queremos actualizar o campo activo para 1 de acordo com a lista de códigos postais escolhidos pelo utilizador.

Para o efeito podíamos preparar o seguinte comando…

UPDATE clientes SET activo = 1 WHERE Patindex(‘[‘ + codigopostal + ‘]’, @codPostal) > 0

onde codigopostal é o campo da tabela de clientes com os códigos a procurar, e @codPostal um parâmetro a ser definido do tipo nvarchar. A função Patindex devolve a posição em que a 1ª string é encontrada na 2ª, devolvendo um valor superior a zero sempre que seja encontrada.

Para utilizá-lo, bastaria passar como valor para o parâmetro @codPostal, a lista de códigos escolhidos pelo utilizador, tendo o cuidado de ao compor a string com os mesmos, colocar parentesis rectos à volta de cada um deles, como por ex.:

[3850-000]{3850-010][3000-000]

Os parentesis rectos servem para ‘isolar’ cada um dos valores a ser procurados (ex., ao procurar mar, não fazer match com Maria, ou Tomar), assumindo que esses caracteres não são esperados dentro dos valores a serem pesquisados!

Caso queiram procurar datas ou valores numéricos, terão de os converter para string de modo a poderem ser concatenados com os parantesis rectos.

Acabam de ser disponibilizados os emuladores de Windows Mobile 6.5 Standard e Professional em Inglês e outros idiomas, entre os quais não está compreendido o Português. Estes emuladores ajudam a perceber enquanto utilizador as novidades expostas pela nova versão do sistema operativo, como o novo ecrã de stand-by e lançador de aplicações, novo Internet Explorer Mobile, Windows Marketplace e outros, e para os programadores, testarem os seus widgets, enquanto não chegam às prateleiras os equipamentos com este sistema operativo.

image image 

O emulador de Windows Mobile 6.5 Proefessional prevê as resoluções QVGA (a mais habitual nos PDA touch-screen), VGA (ex. HTC Diamond), WQVGA (Samsung Omnia), WVGA (HTC Touch HD e Diamond II) e equipamentos com ecrã quadrado, enquanto a versão Standard prevê a variante clássica e a mais recente QVGA (Samsung i600, Motorola Q9, …).

Não há nenhum SDK específico para o Visual Studio associado a estes emuladores dado que não há novas funcionalidades expostas aos programadores para .NET CF, cujos controlos passam a ter suporte a gestos e apresentação algo mais cuidada, como as list view, sendo no entanto disponibilizados alguns exemplos de como controlar programaticamente o suporte a gestos nas nossas aplicações.

O download pode ser feito a partir da sequinte página:

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=20686a1d-97a8-4f80-bc6a-ae010e085a6e

2 notas para terminar o post:

- algumas pessoas têm vindo a instalar e promover a instalação do Windows Mobile 6.5 em equipamentos actuais. Para além do aspecto legal da coisa, queria chamar a atenção que muitas roms foram disponibilizadas ou assentam em bits disponibilizados ainda antes desta nova versão do Windows Mobile 6.5 ter sido dada como finalizada pela Microsoft, pelo que a sua qualidade não será a de um produto final

- levantou alguma celeuma o facto da última CTP do Visual Studio 2010 não trazer suporte para projectos para Windows Mobile. A Microsoft já veio confirmar que tal facto não significa que de nenhum modo o suporte a desenvolvimento para Windows Mobile esteja comprometido, muito pelo contrário, simplesmente que até esse suporte, que se espera que seja melhorado, existir no Visual Studio 2010, teremos de continuar a usar o VS2008

Posted by Alberto Silva | with no comments

Nos próxmos dias 28 e 29 de Abril terão lugar as II Jornadas ESEIG, este ano sob o lema das Novas Tecnologias, para as quais fui honrado com o convite para apresentar uma sessão onde aflore os temas da mobilidade.

Ao contrário das minhas participações habituais noutros eventos, esta não contará com a vertente técnica ligada ao desenvolvimento, privilegiando antes a apresentação do Windows Mobile como plataforma por excelência no domínio profissional e empresarial.

Posted by Alberto Silva | with no comments
Filed under:

Um título destes seria digno de abertura de um qualquer telejornal nacional!

Recebi hoje pelo Newsgator/FeedDemon um artigo que a confirmar-se pode revolucionar tudo quanto tem sido escrito sobre as limitações de memória na execução de aplicações .NET Compact Framework. Eu assumo, não sou um entendido em arquitectura de computadores, mas em traços gerais, o panorama é mais ou menos este:  o Windows CE desde a versão 1.0 até à sua versão 5.0 permitem até 32 processos simultâneos, alocando até 32mb de memória a cada um, o que significa que cada aplicação vive dentro de um cubículo de até 32mb, independentemente da quantidade de memória que o equipamento tenha. Na prática, esses 32mb acabam por nunca estarem disponíveis… muitos equipamentos não dispoem sequer de 32mb livres de RAM e quando dispoem, a forma como são carregadas as DLL em código nativo leva a que o seu espaço seja reservado transversalmente entre todos os processos já criados, e mesmo os criados a posteriori.

No caso das aplicações .NET CF, a limitação da memória virtual mantém-se, embora existam algumas diferenças para as aplicações em código nativo, nomeadamente as DLL não ocuparem ‘transversalmente’ o tal espaço em todos os processos referido acima. Posso dizer-vos que já dispendi mais do que um dia a ler blogs, artigos no CodeProject e documentação na MSDN sobre este assunto da gestão em memória em Windows CE e pela .NET CF e sobre o Garbage Collector [1].

Muitas vezes só nos lembramos destas questões da memória quando nos rebenta uma OutOfMemory (OOM) exception – oh p’ra mim a assobiar para o ar – e se algumas situações são facilmente contornáveis, outras podem levar a uma restruturação de trabalho já feito. Uma situação em particular que pode conduzir a estas OOM e potencialmente cada vez mais fre quente, é a realização de operações gráficas com manipulação em memória de bitmaps do tamanho do ecrã em equipamentos de alta resolução, como os VGA e o WVGA, onde um bitmap que num equipamento normal conta com as dimensões de 240x320 vê o seu tamanho multiplicado por 4 no caso do VGA e por 5 no caso do WVGA. A conta é fácil de fazer, se a cada pixel corresponderem dois bytes, de 153kb passamos a 614kb e 768kb respectivamente [2].

Até chegar um sistema operativo Windows Mobile baseado em Windows CE 6.0 ou posterior, o que se espera que aconteça com a próxima grande versão do Windows Mobile, onde cada processo poderá contar com até 2GB para um máximo de 32000 processos a correr em simultâneo(!), pouco parecia haver a fazer para além de optimizar as aplicações actuais e usar as ferramentas das Powertoys (.NET CF CLR Profiler e .NET CF Remote Performance Monitor) para estudar o impacto das modificações efectuadas.

O tal artigo que mencionei no início do tópico é este…

http://blogs.msdn.com/robtiffany/archive/2009/04/09/memmaker-for-the-net-compact-framework.aspx

…e segundo o Rob Tifany, no caso das aplicações .NET CF, se criarmos um exe ‘vazio’ e colocarmos todo o resto do código numa DLL referenciada conseguimos ultrapassar a tal limitação dos 32mb por processo para a nossa aplicação! O artigo é um pouco extenso e técnico, mas é seguramente um must-read por parte de quem desenvolve para .NET CF! A única limitação que a técnica sugerida não contornará será mesmo a limitação crónica de alguns equipamentos com 64mb e menos de RAM, que mesmo após um soft-reset apresentam uma quantidade de RAM disponível abaixo dos 32MB.

Oportunamente testarei esta abordagem numa aplicação onde sei como provocar estes OOM :D

---------------------

[1] Para os interessados, a partir da seguinte série de artigos do Raffael poderão seguir outros links muito interessantes sobre esta temática:

http://blogs.msdn.com/raffael/archive/tags/Memory/default.aspx

[2 - Correcção]

O João Paulo Figueira alertou-me que cada pixel no ecrã representam dois bytes, e no caso de imagens do tipo PNG e alpha blending, cada pixel chega aos 4 bytes por pixel, ou seja, num equipamento como o HTC Touch HD, até 1,5mb!!!

[3 – Actualização em 2009/04/11 – 8:50]

VirtualMemory[1] A pedido de algumas famílias, a ferramenta que o Rob usa para visualizar a memória virtual ocupada por processo pode ser obtida a partir do seguinte artigo no CodeProject:

 http://www.codeproject.com/KB/mobile/VirtualMemory.aspx

É mais um artigo de leitura recomendada!

Posted by Alberto Silva | with no comments

Como referi em posts anteriores, tenho estado de volta do upgrade de uma aplicação para .NET CF 3.5 e SQL Compact 3.5. A aplicação já vem do tempo da .NET CF 1.0 e SSCE 2.0, altura em que não havia suporte por parte do SSCE a parâmetros com nomes, utilizando-se o ponto de interrogação para identificar o local dos parâmetros, por ex. …

UPDATE Clientes SET saldo = ? WHERE nrcliente = ?

…passando-se os parâmetros ao objecto SqlCeCommand pela ordem pela qual apareciam na instrução SQL. O suporte a parâmetros com nomes veio com o SQL Server 2005 Mobile Edition (3.0), passando-se a poder utilizar a notação mais comum:

UPDATE Clientes SET saldo = @novoSaldo WHERE nrcliente = @cliente

Ao executar a aplicação já em .NET CF 3.5 com SSC 3.5, dou-me conta de um erro numa instrução que ainda vinha do tempo do SSCE 2.0 e como tal ainda tinha os tais pontos de interrogação. Alguma investigação em torno da situação leva-me a experimentar substituír os ? por parâmetros com nomes, e ao executar de novo a instrução, a dita já funcionava… a causa? O SQL Compact 3.5 não estava a respeitar a ordem pela qual os parâmetros eram passados ao comando. A alternativa era óbvia, substituír as potenciais dezenas de instruções com os ditos pontos de interrogação por parâmetros com nomes.

No entanto, isto para mim não fazia sentido, não me lembro de ter lido nada que me alertasse para este novo comportamento, e após alguma investigação fui confirmar se já estaria a utilizar o SP1 do SQL Compact 3.5…

Nesta minha nova máquina de desenvolvimento, um Toshiba Tecra S10-128, pensava ter instalado tudo quanto há de mais recente, nomeadamente o Visual Studio 2008 SP1 e o SQL Server 2008 (o SP1 do SQL Server 2008 só saíu esta semana e ainda não o instalei) e com essas ferramentas, veio também o SQL Compact 3.5 SP1. O que eu me tinha esquecido é que essas actualizações não incluem o SP1 para os devices, e ao copiar o ficheiro sqlceca35.dll da pasta \Programas\Microsoft SQL Server Compact Edition\3.5 do PDA para o PC e com o explorer aberto as suas propriedades, constatei que estava a usar a build 3.5.5386, que de acordo com esta tabela, corresponde à versão RTM, portanto sem o SP1:

image

Rapidamente descarreguei o SP1 para Windows Mobile/Windows CE desta página e instalei-o. Actualizei a referência ao System.Data.SqlServerCe.dll para ter a certeza que estava tudo bem, e fiz o deploy da aplicação. Ao testar de novo a situação descrita no início do post, o problema deixou de ser reproduzido, ou seja, foi resolvido no SP1, ainda que não tenha obtido confirmação nas listas de fixes que verifiquei. Pode confirmar no PDA/emulador se está a usar a versão SP1 comparando no registry a chave [HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server Compact Edition\v3.5] com o seguinte ecrã:

image

Outro stress ultrapassado… NEXT!!!

Ao converter um projecto em .NET CF 2.0, que tinha uma série de dependências de outros projectos igualmente em CF 2.0 que foram sendo igualmente convertifos, consegui executar a aplicação nos emuladores umas quantas vezes, à medida que ia actualizando os projectos com as últimas versões de alguns controlos de terceiros. Subitamente, depois de um conjunto de alterações mais extensas, deixo de conseguir correr a aplicação a partir do Visual Studio 2008 num dos emuladores. Testo noutro, a mesma coisa. Tento correr em modo release, nada feito. Executar a aplicação a partir do PDA? Uma ampulheta que só desaparecia com um soft reset ao equipamento. Depois de ter reiniciado o VS umas quantas vezes, tal como os emuladores, pensei, o PC tá a precisar de um reboot, mas um download demorado impedia-me de o fazer, pelo que fui testanto diferentes coisas sempre sem sucesso.

Após reiniciar o PC o problema mantem-se integralmente, e constato que se interromper a execução da aplicação – que ainda nem tinha arrancado – obtinha algo do género:

The debugger was unable to terminate one or more processes: The debugger may be unstable.

A coisa estava a ficar preta, todos os meus outros projectos em .NET CF 2.0 e 3.5 continuavam a funcionar como sempre à excepção deste (as leis de Murphy encarregam-se de deixar à V/ imaginação a importância deste projecto…).

Dado que pelo método da tentativa/erro não ia lá, e as pesquisas na internet se revelaram infrutíferas, passei para uma análise mais ‘científica’! No grupo dos Power Toys da .NET CF 3.5 no menu Iniciar, tem lá o .NET CF Logging Configuration…

image

…que permite escolher os logs que queremos activar:

image

No caso, escolhi apenas o Loader porque era aquele fazia mais sentido, afinal a aplicação não chegava a arrancar e cliquei em Apply. De seguida, no PDA arranquei a aplicação e esperei uns minutos, e abri o log que foi gerado na pasta da aplicação (netcf_m2uMobileSalesV3_Loader_2463895866.log), e posicionei-me no final onde encontrei uma referência a uma DLL que… não era de todo suposto lá estar, dado destinar-se a uma versão anterior da .NET CF. Voltei a verificar e corrigir todas as dependências e suas dependências, de modo a garantir que todas elas estavam a destinar-se à .NET CF 3.5 e que tinham as referências correctas aos controlos de terceiros. Nova tentativa e… a aplicação já corre de novo nos emuladores e PDAs!!!

Mais um stress resolvido fora-de-horas… NEXT!!!

No meu PC com Windows Vista e o UAC ligado, ao instalar uma actualização de uns controlos da Resco, executando o ficheiro .bat fornecido, obtinha a mensagem ‘Access Denied’ por cada ficheiro que o ficheiro batch tentava copiar para uma subpasta abaixo da pasta C:\Program Files. Este é o ficheiro:

@ECHO OFF

REM This script copies the libraries to default folders.
REM Change the paths in case the programs are installed in non-default folders.

REM Compact Framework libraries:

SET MFT2008=%programfiles%\Resco MobileForms Toolkit 2009\NET35
SET PRODUCT=AdvancedList

copy .\Full\CF\Resco.%PRODUCT%.CF3.dll "%MFT2008%\CF\Resco.%PRODUCT%.CF3.dll"
copy .\Full\CF\Resco.%PRODUCT%.CF3.XML "%MFT2008%\CF\Resco.%PRODUCT%.CF3.XML"

copy .\Full\CF\DesignerMetadata\Resco.%PRODUCT%.Design.dll "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.Design.dll"
copy .\Full\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.PocketPC.asmmeta.dll "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.PocketPC.asmmeta.dll"
copy .\Full\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.WindowsCE.asmmeta.dll "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.WindowsCE.asmmeta.dll"
copy .\Full\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.Smartphone.asmmeta.dll "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.Smartphone.asmmeta.dll"

copy .\Full\Desktop\Resco.%PRODUCT%.dll "%MFT2008%\Desktop\Resco.%PRODUCT%.dll"
copy .\Full\Desktop\Resco.%PRODUCT%.XML "%MFT2008%\Desktop\Resco.%PRODUCT%.XML"

copy .\Full\Desktop\%PRODUCT%Designer.exe "%MFT2008%\Desktop\%PRODUCT%Designer.exe"

rem "%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe" /i "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.Design.dll" /f

PAUSE

Fácil, pensei eu, basta correr isto como administrador e resolve-se o problema.

Ao fazê-lo, cada uma daquelas mensagens ‘Access Denied’ transformou-se em ‘File not found’… humpf… verifiquei o ficheiro .bat, fiz umas modificações, mas o problema persistia e não havia razão para os ficheiros não serem encontrados. Aí lembrei-me de acrescentar um simples ‘dir’ ao início do ficheiro batch e ao corrê-lo normalmente devolveu-me o conteúdo da pasta de onde eu chamava o ficheiro, mas ao corrê-lo como administrador, o dir devolveu-me o conteúdo da pasa C:\Windows\System32!!! Aqc… (tradução livre do inglês wtf…)

Experimentei o RunAs entre outras coisas, sempre sem sucesso, até que me lembrei que não devia ser a primeira alma a encontrar este problema e uma pesquisa na internet devolveu-me esta preciosa página…

http://www.vistax64.com/vista-security/79008-elevate-without-losing-working-directory.html

…após o que alterando o ficheiro inicial para este novo (alterações destacadas), passei a poder executá-lo como administrador, mantendo como ‘working folder’ a pasta de onde o ficheiro batch é chamado:

@ECHO OFF

REM This script copies the libraries to default folders.
REM Change the paths in case the programs are installed in non-default folders.

REM Compact Framework libraries:

SET MFT2008=%programfiles%\Resco MobileForms Toolkit 2009\NET35
SET PRODUCT=AdvancedList

setlocal enableextensions
cd /d "%~dp0"

copy .\Full\CF\Resco.%PRODUCT%.CF3.dll "%MFT2008%\CF\Resco.%PRODUCT%.CF3.dll"
copy .\Full\CF\Resco.%PRODUCT%.CF3.XML "%MFT2008%\CF\Resco.%PRODUCT%.CF3.XML"

copy .\Full\CF\DesignerMetadata\Resco.%PRODUCT%.Design.dll "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.Design.dll"
copy .\Full\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.PocketPC.asmmeta.dll "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.PocketPC.asmmeta.dll"
copy .\Full\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.WindowsCE.asmmeta.dll "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.WindowsCE.asmmeta.dll"
copy .\Full\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.Smartphone.asmmeta.dll "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.CF3.Smartphone.asmmeta.dll"

copy .\Full\Desktop\Resco.%PRODUCT%.dll "%MFT2008%\Desktop\Resco.%PRODUCT%.dll"
copy .\Full\Desktop\Resco.%PRODUCT%.XML "%MFT2008%\Desktop\Resco.%PRODUCT%.XML"

copy .\Full\Desktop\%PRODUCT%Designer.exe "%MFT2008%\Desktop\%PRODUCT%Designer.exe"

rem "%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe" /i "%MFT2008%\CF\DesignerMetadata\Resco.%PRODUCT%.Design.dll" /f

PAUSE

Mais um stress resolvido… NEXT!!!

[Corrigdo em 8/Abril conforme comentários abaixo]

Posted by Alberto Silva | 2 comment(s)
Filed under:

Fui convidado para apresentar uma sessão no 2º Seminário de Tecnologias Móveis, evento destinado a TI Pros & developers que teve lugar nos passados dias 11 e 12 de Março. A minha disponibilidade limitada desde o DevDays não me permitiram anunciar aqui o evento nem a minha participação no 1º dia. O 2º dia tinha como audiência privilegiada IT Pros e empresas, onde a empresa da qual sou sócio, a moving2U, apresentou um business case de um cliente da nossa solução para automação de vendas, a Coimpack.

A sessão que apresentei foi baseada na MOB202 do DevDays referida no ponto anterior, com a qual compartilha inteiramente o projecto de suporte, sendo válidas as mesmas considerações tecidas em relação ao projecto.

Explorar o SDK do Windows Mobile 6 com um caso prático

[Actualização em 29/03/2009, 23:45]

Links corrigidos

Desde o DevDays que o tempo não tem permitido preparar os conteúdos do DevDays para disponibilização online. Na semana a seguir ao evento, eu e outros MVP portugueses seguimos até Seattle para o MVP Global Summit, e com o trabalho que já vinha a acumular desde a preparação das minhas sessões para o DevDays, não foi fácil voltar a reconciliar-me com o blog!

A partir dos seguintes links podem descarregar os slides e material das minhas sessões no DevDays:

MOB201 - Desenvolvimento para Windows Mobile – Por onde começar?

MOB202 - Explorar o SDK do Windows Mobile 6 com um caso prático

Em relação ao projecto da sessão MOB202 conto escrever brevemente um post que explique os passos necessários à sua reprodução no emulador. Fica desde já a indicação que deverão ter o IIS com suporte a WCF instalado no V/ PC de desenvolvimento, bem como que deverão abrir a solução no Visual Studio 2008 aberto com direitos de administrador.

[Actualização em 29/03/2009, 23:50]

Links corrigidos

No decorrer do evento, o pessoal do GoZoomIn foi fazendo algumas entrevistas às pessoas ligadas à organização do evento e oradores A mim calhou-me no final da minha primeira sessão e podem ver a entrevista no seguinte link:

 

http://gozoomin.com/blogs/devdays/archive/2009/02/19/alberto-silva-mobile-devices.aspx

Posted by Alberto Silva | with no comments
Filed under: ,

Terminou o DevDays, 2 dias ao longo dos quais centenas de programadores tomaram contacto com tecnologias e tendências, assistindo a sessões e praticando HOLs. As – excelentes - instalações do IST revelaram-se ajustadas ao evento, ainda que algumas das salas tivessem uma capacidade algo limitada. O DevDays marcou também o meu regresso e do João Paulo ao local onde há 4 anos, em Fevereiro de 2005, juntos apresentámos um evento que co-preparámos com o Nuno Costa da Microsoft, exclusivamente dedicado ao desenvolvimento para Windows Mobile.

Neste DevDays09, no domínio da mobilidade, para além das minhas 2 sessões, houveram mais duas – uma apresentada pelo João Paulo Figueira e outra pelo Pedro Lamas – às quais assisti, e ainda outra do Noel que decorreu à mesma hora que um das minhas…

Sobre as minhas sessões, depois dos problemas do ano passado no TechDays em que o portátil e os projectores passavam o tempo todo a negociarem a resolução e a amuarem quando não levavam a deles avante, este ano preveni-me desta situação que não sendo da nossa exclusiva responsabilidade, devemos estar atentos à mesma. Assim sendo levei…

  • O Toshiba Tecra S4 que uso desde 2007, e que o ano passdo andava a cantarolar a música da Micaela co o projector, o ‘pisca-pisca’
  • O Toshiba NB100 com Windows 7, um netbook de 1kg que adquiri para evitar ter de andar com os 3kg do Tecra ao ombro
  • Um Virtual PC em Windows 7 com todas as ferramentas necessárias para as demos num disco externo, para usar nos PC da própria sala
  • Uma pen USB com tudo quanto precisava para instalar numa máquina que já tivesse o VS2008 instalado

Logo que chego à sala constato que o PC não consegue abrir a minha VM por causa de uma incompatibilidade ao nível das Virtual Machines Additions. Encostei o disco e a VM, e fiz a primeira apresentação no netbook, que tirando 2 ou 3 demos era mesmo à base de slides. Mais do que fazer uma sessão que pusesse as pessoas aos pulos de contentes, a ideia foi providenciar um conjunto de informação de referência para quem se inicia nas lides do desenvolvimento para Windows Mobile.

À tarde entra o Pedro Lamas em cena para falar no Lob 2008 Accelerator, e rapidamente comçeça o PC dele a implicar com o projector… trocam por um PC de marca diferente e a situação mantêm-se até ao final da sessão.

No dia seguinte – hoje de manhã em jejum pois adormeci – mal chego à sala, ligo o Tecra ao projector, pisca uma vez, pisca 2 vezes, não o deixei piscar a terceira: desliguei o Tecra e passei para o NB100. Com o NB100 o ‘fenómeno’ não ocorre, mas o WMDC recusa-se a colaborar e o Device Emulator bloqueia – juro que tinha tudo funcionado na véspera!!! :D – pelo que demonstro a aplicação do caso prático no Powerpoint e passamos para o código, fazendo a ponte com as funcionalidades expostas pela aplicação que preparei para o efeito. Quem acompanha o blog  terá reparado que mencionei que a aplicação se destinaria a um suposto perito de seguros, mas na noite de 4ª feira da semana passada, ao ver uma famosa série no 2º canal, lembrei-me de fazer uma aplicação para um dos agentes mais famosos do mundo, e preparei alguns materias de video e com – o famoso toque de telemóvel, o contador – mas infelizmente a sala onde decorreu a apresentação não tinha possibilidades de reprodução de som.

Ao final da manhã, o João Paulo Figueira apresenta a sua sessão sobre o tunning do SQL Server Compact em Windows Mobile, mas tem de conter-se e chamar mentalemnte  nomes ao projector que também não ‘colaborou’.

Para terminar este post que estou extenuado…

  • Vou disponibilizar as apresentações e código em breve, eventualmente já em Março dado ter entretanto agendada uma ida à ‘Quinta do Bill’ como gosto de lhe chamar
  • Os PowerPoint vão ser despidos de imagens e referências à tal série na qual me inspirei, por questões de copyright
  • Se têm portáteis com placas gráficas nVidia e Windows Vista – não sei se também se aplica ao W7 – quando tiverem de os ligar a projectores, tenham medo, muito medo, porque as probabilidades de o material vos deixar ficar mal são elevadas. Não sei se o facto dos projectores nestas salas não estarem ligados mesmo directamente aos nossos PC e terem extensões de cabos particularmente compridos influenciará alguma coisa, pois o meu Toshiba com um projector Dell da empresa funciona bem
  • Mantenham-se atentos a este blog e aos do JPF (NativeMobile e MobileSandBox) pois teremos novidade a apresentar em breve que esperamos que sejam do V/ agrado
  • Todos os comentários, críticas e questões serão benvindos

[Actualização sobre o problema do pisca-pisca]

Já o ano passado tinha feito uma pesquisa sobre este assunto na internet, e só encontrei um grande nº de pessoas que tinham sido afectadas pelo mesmo. Dado o padrão e a recorrência com que afecta tanta gente, uma pesquisa num motor de busca há minutos devolveu-me lá pelo meio esta página que descreve exactamente a situação que defrontámos e que apresenta uma solução para a mesma que não tenho oportunidade agora de testar, mas que acredito que, tal como comentei com o Pedro Lamas no Messenger, seja a luz ao fundo do túnel… esperando que a luz não pisque!

http://www.auctioneertech.com/2008/10/vista-external-monitor-flash-and-flicker-problem-solved/

 

Posted by Alberto Silva | 2 comment(s)
Filed under: ,
More Posts Next page »