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

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: ,

Esta sessão será destinada aqueles que vão dar os primeiros passos no domínio do desenvolvimento para Windows CE e Windows Mobile utilizando o Visual Studio 2008 e a .NET Compact Framework. Esta introdução é importante para não defraudar as expectativas daqueles que já tendo dado alguns passos e assistido a sessões minhas no passado possam esperar o aprofundamento de algum tema ligado ao desenvolvimento para .NET CF.

A sessão vai contar com algumas pequenas demos, mas será baseada num slideshow Powerpoint, que será preparado de modo a servir de referência futura para aqueles que, particpando ou não na sessão, pretendem mais tarde em frente aos seus comnputadores reproduzir e aprofundar o que foi exposto.

Os temas que penso aflorar são…

  • Requisitos e ferramentas necessárias e recomendadas para o desenvolvimento para Windows Mobile
  • Criação de projectos para Windows Mobile e consequências das escolhas feitas na sua criação
  • Utilização do emulador
  • Lidar com as limitações dos equipamentos
  • Opções para persistência de dados e sincronização com servidores
  • Comunicações
  • Packaging de aplicações
  • Modelos de referência para desenvolvimento de aplicações para WM
  • Recursos

Como podem observar, a ideia é mesmo dar o chamado ‘lamiré’ que estimule e guie aqueles programadores que desenvolvendo já em .NET querem espreitar este novo paradigma de desenvolver para equipamentos que andam nos bolsos das pessoas. Não nos podemos esquecer também daqueles que já tenham tido uma experiência menos positiva no desenvolvimento para a .NET CF, fruto eventualmente de não terem tomado na altura as melhores opções, e pretendem descobrir afinal porque é que há cada vez mais programadores para esta ‘pequena’ plataforma!

Caso queira comentar ou deixar alguma sugestão para esta sessão, esteja à vontade para adicionar o seu comentário a este post.

Esta sessão é baseada conceptualmente numa sessão que apresentei o ano passado no TechDays, que partindo de um caso verosímil ilustra como podemos tirar o máximo partido dos equipamentos Windows Mobile e das funcionalidades que expoem.

O ano passado o caso prática era o seguimento de reclamações de munícipes, este ano vestiremos a pele de um perito de uma companhia seguradora.

Partindo da seguinte descrição para a aplicação…

“José, perito de uma companhia de seguros, recebe um SMS com a indicação que tem uma perícia a fazer. Ao recebê-la, José pode aceitá-la ou recusá-la, enquanto a mesma é automaticamente adicionada ao Outlook do seu equipamento e adicionada à lista de tarefas a executar na aplicação em execução.

A partir da aplicação, José pode pedir mais detalhes sobre a perícia, obtendo a partir do servidor a oficina onde se deve dirigir, os respectivos contactos e localização. Caso nesse momento não tenha cobertura de rede GPRS/3G, o pedido fica a aguardar pela sua disponibilidade.

Obtidos os detalhes da peritagem, José pode...

  • Ligar para a oficna directamente da aplicação
  • Visualizar o percurso entre o local onde se encontra e o local da oficina
  • Iniciar a peritagem

No decorrer da pré-peritagem, José pode...

  • Capturar fotos e video da viatura sinistrada, com sobreposição da matrícula da viatura sobre a imagem
  • Relatar os danos identificados, gravando os seus próprios comentários
  • Ligar a um técnico para pedir opiniões
  • Dar a peritagem como terminada

Ao ser terminada a peritagem, é enviado um email para um endereço pré-definido com os ficheiros multimedia em anexo”

…demonstaremos como utilizar:

    • Intercepção de SMS
    • Envio de SMS
    • Criação de compromisso no Outlook
    • Verificação de disponibilidade de rede (Device State and Notification broker)
    • Consumo de serviços WCF
    • Estabelecimento de chamadas
    • Localização GPS
    • Visualização de mapas
    • Captura de imagens
    • Captura de video
    • Captura de som
    • Sobreposição de texto sobre imagem
    • Consulta de contactos com filtro
    • Enviar mail com anexos
    • Device Emulator 3.0

É possível que a ‘história’ sofra modificações, seja ajustando-a ao tempo previsto para a sessão – uma hora – seja em função de comentários que queiram desde já deixar à mesma.

Ao contrário do ano passado – minha imperdoável culpa – a aplicação de demonstração será disponibilizada de imediato.

No próximo DevDays, entre outras temáticas, poderemos contar com um elenco interessante e diversificado de sessões dedicadas ao desenvolvimento de aplicações para Windows Mobile:

Nos próximos posts no blog detalharei as minhas sessões e o que poderão esperar delas – não, ecrãs pretos não estão no programa ;) – e poderão deixar comentários às mesmas. Ao contrário do ano passado, os conteúdos das sessões serão disponibilizados de imediato.

Este passatempo, a decorrer até Junho de 2009, permite ganhar livros Microsoft aqueles que ajudarem a divulgar a MSDN Flash.

subscreva120x240

Podem saber mais sobre o passatempo aqui.

Posted by Alberto Silva | with no comments
Filed under:

Nos próximos dias 18 e 19 de Fevereiro terá lugar o DevDays no Instituto Superior Técnico, no Campus do TagusPark, aquele que será o maior evento técnico do ano promovido pela Microsoft.

 devdaystopflash

São 2 dias de conteúdos técnicos avançados, com mais de 50 sessões e 40 laboratórios, onde irá conhecer as mais recentes novidades da tecnologia Microsoft e contactar com reconhecidos especialistas das nossas Comunidades Técnicas.

  • 2 dias de conteúdos técnicos avançados
  • Mais de 50 sessões e cerca de 40 laboratórios
  • Um evento para Programadores, Arquitectos e Designers

Contacte com Especialistas

Partilhe experiências, troque ideias, e aprenda com quem tem desafios semelhantes aos seus.

Inspire-se,  divirta-se e mergulhe na Inovação

Encontre as melhores ideias e faça parte deste momento!

Aprenda sobre as mais recentes novidades tecnológicas como o Windows 7, Internet Explorer 8, Windows Azure e aprofunde os seus conhecimentos sobre desenvolvimento, web, design e experiência de utilização.

Venha ao DevDays!

  • Saiba como  o TeamSystem pode melhorar o desempenho da sua Equipa, tornando-a mais produtiva e eficiente
  • A nova experiência de interacção digital com a Microsoft Surface
  • Novos modelos de negócio potenciados pelo Windows Azure
  • Veja como o Windows 7 e o IE8 elimina barreiras entre software, services e dispositivos e trazem ritmo acrescido ao seu dia-a-dia e da sua empresa
  • Biztalk 2009 com uma solução de RFID muito interessante
  • Consiga um novo nível de soluções Web com o Silverlight
  • O potencial da informação geo-referenciada com o SQL Server 2008

Principais Conteúdos Temáticos

  • Visual Studio 10 e .Net 4
  • Microsoft Surface
  • Windows 7 e Internet Explorer 8
  • Windows Azure e Azure Services Platform
  • Biztalk 2009
  • Silverlight e WPF
  • SQL Server 2008
  • ASP.NET
  • Windows Live Services

A mobilidade também não foi esquecida, e poderemos contar com sessões e laboratórios dedicados ao desenvolvimento para a .NET Compact Framework 3.5 e o SQL Compact 3.5.

Logo que a agenda esteja fechada no que diz respeito aos conteúdos relacionados com a mobilidade, divulgarei os detalhes aqui.

Participe!

O evento tem um custo de 100€ (IVA incluído) por participante, contando com inscrições limitadas

Mais informações e registo

Visite o site oficial do evento em http://www.devdays09.com/

A Microsoft anunciou em Novembro o novo Internet Explorer Mobile 6, que como o seu nome indica, é uma versão do Internet Explorer para Windows Mobile baseada no motor do IE 6.0.

Esta nova versão do Internet Explorer deverá surgir em alguns novos equipamentos durante 2009, ou em equipamentos para os quais os respectivos fabricantes decidam disponibilizar novas roms, não sendo possível a sua instalação pelo utilizador final nos seus equipamentos. Esse é mesmo o único inconveniente deste novo Internet Explorer 6 Mobile, e experimentá-lo torna ainda mais difícil encarar essa impossibilidade!

Entre as novas funcionalidades destacam-se:

  • Suporte para WML
  • Experiência melhorada de visualização e navegação, em equipamentos com e sem ecrã táctil
  • Inclusão opcional do Adobe Flash Lite 3.1 (opção a cargo do fabricante)
  • Optimizações de formatação de páginas para ecrãs de equipamentos móveis
  • Suporte melhorado a diversos standards
  • Suporte para AJAX e scripting

A partir do seguinte link podem descarregar emuladores Windows Mobile Professional e Standard em diferentes resoluções com o Internet Explorer Mobile 6, a partir dos quais podem testá-lo:

Windows Mobile 6.1.4 Emulator Images
http://www.microsoft.com/downloads/details.aspx?FamilyId=1A7A6B52-F89E-4354-84CE-5D19C204498A&displaylang=en

Pessoalmente sugiro que para simularem uma ligação do emulador à internet, a partir do Device Emulator escolham a opção 'Craddle' do emulador em execução, para que o ActiveSync/WMDC reconheçam o emulador e partilhe a ligação à internet do host com o emulador (se tiverem dificuldade em conseguirem a ligação, deixem comentário)

Ao experimentarem o novo browser poderão constatar que tem 2 modos de visualização, 'Mobile Device' para conteúdos optimizados para equipamentos móveis, e 'Desktop' para dispensar essas optimizações, obtendo-se uma visualização com grande fidelidade daquilo que o Internet Explorer para Windows disponibiliza. Neste modo podem fazer diversas experiências, como aceder à versão desktop do site de home banking do V/ banco (testei com sucesso o site da CGD, com introdução de credenciais de login no teclado flutuante), ver videos do YouTube e consultar outros sites cuja visualização até agora era penosa em Windows Mobile. Tendo experimentado o Opera que vinha com os Samsung i780 e HTC x7500, tenho a dizer que este novo IEm6 providencia uma experiência de navegação muito mais agradável e mais capaz que o Opera.

Para saber mais sobre o novo IEm6, seja sobre as novas funcionalidades, seja sobre como tirar partido do mesmo na óptica do desenvolvimento de websites optimizados para equipamentos móveis, podem consultar o seguinte documento:

Internet Explorer 6 Mobile
http://download.microsoft.com/download/8/c/c/8cc611e7-ec6b-49ee-af4a-415559d53262/Internet%20Explorer%20Mobile%206.pdf

Nesse documento descobrem por ex. que o seguinte HTML permite que um determinado link quando clicado despolete uma chamada telefónica para o nº indicado:

<a href=“tel:123-5309”>Jenny</a>

E ainda que tal como indicado neste post do Mark Arteaga, de onde copiei as imagens, para identificarem o novo IEm6 a partir das V/ aplicações web, basta atentarem ao conteúdo das user agent strings enviadas pelo browser:

Modo 'Mobile Device': Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 8.12; MSIE Mobile 6.0)

Modo 'Desktop': Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

Digitando about:version na barra de endreço obterão o conteúdo de uma ou outra das imagens apresentadas consoante o modo de visualização:

   iem6_device       iem6_desktop

Foi atribuída à moving2u a tarefa de 'simples' conversão de uma solução em .NET CF 1.0 para .NET CF 3.5, entre outras alterações, como suporte a diferentes resoluções e orientações de ecrã, passar a utilizar bases de daods SQL Compact localmente no PDA e suporte a impressão em impressoras portáteis A4 da HP.

Ao correr a nova aplicação nos novos equipamentos da HTC os utilizadores com frequência 'perdiam-se', pois ao invocar o 'task manager' da HTC, surgiam várias 'instâncias' activas da aplicação. Tal comportamento, completamente oposto ao que deve ser uma aplicação .NET CF bem comportada, derivava da forma como os forms eram geridos por quem desenvolveu a versão inicial.

Numa aplicação em que a navegação entre forms fosse 'explícita', ou seja, em que cada form antes de fechar-se abre sempre explicitamente outro form, assegurando-se que a cada momento há apenas um form activo, este problema não se colocaria, mas neste caso a 'retro-navegação' era implícita dado que os forms eram sempre exibidos com o método .ShowDialog() e fechado com o .Close(), a 'pilha' de forms activos era exibida no task manager.

Para contrariar esse comportamento, impõem-se algumas regras, a mais simples das quais indica que para uma instância de um form activo não constar na lista de programas em execução, deve colocar-se o respectivo título (propriedade .Text do form) a vazio. Para não ter de a cada chamada guardar o texto do título do form chamador, limpá-lo, exibir o novo form e ao fechá-lo repor o título no form chamador, criei o seguinte extenseion method:

 

    public static class FormExtensionMethods
    {
        public static System.Windows.Forms.DialogResult ExibeDialogo(this System.Windows.Forms.Form newForm, System.Windows.Forms.Form currentForm)
        {
            string s = currentForm.Text;
            currentForm.Text = "";
            System.Windows.Forms.DialogResult r = newForm.ShowDialog();
            currentForm.Text = s;
            currentForm.Show();
            currentForm.BringToFront();
            return r;
        }
    }

Deste modo, bastou-me mudar as chamadas do tipo myForm.ShowDialog() por myForm.ExibeDialogo(this) para atingir o fim desejado :)

A avaliação da apresentação gráfica nas aplicações é algo sempre subjectivo, mas é uma evidência que numa altura em que a nível das aplicações para desktop os programadores têm neste momento excelentes ferramentas e tecnologias para darem largas à criatividade dos designers, do lado do Windows Mobile as coisas ainda não são bem assim, continando em termos de código managed basicamente restritos ao que a .NET CF expõe.

No entanto, o João Paulo Figueira acabou de me chamar a atenção para este artigo que demonstra como ir com a .NET CF 3.5 bastante mais além em termos de apresentação gráficado que aquilo que habitualmente fazemos:

Building Graphically Advanced Applications with the .NET Compact Framework 3.5
http://expression.microsoft.com/en-us/dd279543.aspx

É claro que vai continuar a sobrar sempre espaço para a subjectividade, mas é inegável o nível do apuro gráfico conseguido com os exemplos do artigo:

Posted by Alberto Silva | with no comments

O Ricardo Queirós acabou de ver publicado pela FCA o seu livro "Programação para Dispositivos Móveis em Windows Mobile 6 - Curso Completo", que como o título deixa adivinhar, se destina aqueles que pretendem iniciar ou consolidar os seus conhecimentos de desenvolvimento para a plataforma Windows Mobile. Apesar do título referir explicitamente o Windows Mobile 6, a generalidade dos conteúdos também se aplica a versões anteriores, embora conte com um capítulo exclusivamente dedicado às funcionalidades expostas pelo SDK do Windows Mobile 6.

CAPA[1]

Dos tópicos abordados no livro que já será possível encontrar nas livrarias destacam-se:

  • Introdução ao Windows Mobile
  • Plataforma Microsoft .Net
  • A Minha Primeira Aplicação Mobile
  • Programação Orientada aos Objectos
  • Visual Studio e o Desenho de Interfaces
  • Teste, Debugging e Gestão de Erros
  • Empacotamento, Distribuição e Instalação
  • Persistência de Dados
  • Tópicos Avançados
  • Usando o SDK Windows Mobile 6
More Posts Next page »