Windows 10 Store, Android, iOS, OS X, Linux: recursos para migrar sua aplicação Delphi/C++ Builder e suportar TODAS as plataformas (parte 2)

Na primeira parte deste artigo (aqui) exploramos os principais desafios na migração de projetos Delphi/C++ Builder, listamos alguns tópicos que vamos tratar ao longo de uma série de artigos, e iniciamos o entendimento da parte teórica sobre Unicode.

Neste post vamos retomar o assunto Unicode, porém de um ponto de vista mais técnico, buscando compreender as alterações que são necessárias (ou não) em um projeto.

Vale ressaltar que o suporte a Unicode foi introduzido no Delphi/C++ Builder 2009, portanto, projetos compilados em versões 2009+ não devem sofrer qualquer impacto no tocante a Unicode durante um processo de migração.

O que mudou?

A partir da versão 2009 (inclusive), o tipo String passou a ser definido pelo tipo UnicodeString, que é uma string UTF-16. Da mesma forma, o tipo Char é agora WideChar, um tipo de caractere de dois bytes e PChar é um PWideChar, um ponteiro para um Char de dois bytes.

O ponto significativo sobre as alterações a esses tipos de dados básicos é que, no mínimo, cada caractere é representado por pelo menos um “code unit” (dois bytes), e às vezes mais.

Coincidente com essas mudanças é que o tamanho de uma sequência de caracteres, em bytes, não é mais igual ao número de caracteres na sequência de caracteres. Da mesma forma, um valor do tipo Char não é mais um único byte; são dois bytes.

Opção #1: Mantenha tudo em seu lugar

Uma das opções com relação a Unicode é simplesmente não fazer nada. Isso mesmo… ou na verdade… quase isso. Nas versões anteriores a 2009, o tipo String era então mapeado para AnsiString. Logo, reverter as declaração de String para AnsiString pode ser uma alternativa para uma migração rápida – caso você não necessite suportar caracteres estendidos. O que precisa ser feito, na verdade, é converter declarações String para AnsiString, Chars para AnsiChars e PChars para PAnsiChars.

Para auxiliar nesta tarefa, um membro do Australian Delphi Users Group (ADUG) – Roger Connell – criou um convertor para pesquisar seus arquivos  Delphi (.pas e .dpr) e fazer as conversões, se essa abordagem funciona para você:http: /www.innovasolutions.com.au/delphistuf/ADUGStringToAnsiStringConv.htm

Obviamente, mesmo reduzindo as mudanças ao mínimo, testar e validar sua aplicação previamente a enviá-la para um ambiente de produção, continua sendo uma recomendação mandatória.

Opção #2: Abraçando o Unicode de vez

O Unicode incentiva o uso de alguns novos termos. Por exemplo, a idéia de “caractere” é um pouco menos preciso no mundo do Unicode do que você pode estar acostumado. No Unicode, o termo mais preciso é “code point”. A partir da versão 2009, o SizeOf (Char) é 2. Dependendo da codificação, é possível que um determinado caractere ocupe mais de dois bytes. Estas sequências são chamadas de “Surrogate Pairs“. Assim, um “code point” é um código exclusivo atribuído a um elemento definido pelo Unicode.org. Mais comumente isso é um “caractere”, mas nem sempre.

String agora é igual a UnicodeString, logo suas suposições anteriores sobre o tamanho em bytes de uma matriz de caracteres ou sequência de caracteres podem agora estar incorretas.

Procure qualquer código que:

  • Pressupõe que SizeOf (Char) é 1.
  • Pressupõe que o comprimento de uma sequência de caracteres é igual ao número de bytes na sequência de caracteres.
  • Diretamente manipula sequências de caracteres ou PChars.
  • Grava e lê strings em algum tipo de armazenamento persistente.

As duas suposições listadas aqui primeiro não são verdadeiras para Unicode, porque para Unicode SizeOf (Char) é maior que 1 byte, e o comprimento de uma sequência de caracteres é metade do número de bytes.

Além disso, o código que grava ou lê a partir de armazenamentos persistentes precisa garantir que o número correto de bytes estão sendo gravados ou lidos, uma vez que um caractere pode não ser mais capaz de ser representado como um único byte.

Compreendidas estas alterações, temos um sem números de ótimos documentos e tutoriais para se aprofundar no tema Unicode, os quais estou listando abaixo, porém gostaria de chamar a atenção para uma ferramenta em especial, o Unicode Statistics Tool. Este pequeno utilitário tem a capacidade de revisar seu código e dizer onde e o que você provavelmente vai ter que mudar. Obviamente, trata-se de um auxiliar e não uma ferramenta mágica, mas ajudará muito!

Recursos Adicionais

Advertisements

Windows 10 Store, Android, iOS, OS X, Linux: recursos para migrar sua aplicação Delphi/C++ Builder e suportar TODAS as plataformas!

Introdução

O suporte para múltiplas plataformas tem motivado muitas companhias a migrarem seus projetos para as versões mais recentes do RAD Studio, estejam eles utilizando Delphi ou C++ Builder. Em breve estaremos suportando mais uma plataforma de maneira 100% nativa, Linux 64 bit, e este movimento deve se intensificar.

Pensando nisso, estou iniciando uma série de artigos a respeito de migração, sendo este o primeiro deles. Vou tentar reunir aqui recursos que estão disponíveis e que podem auxiliar no processo de migração, e também compartilhar a experiência de alguns processos de atualização junto a alguns de nossos clientes.

Existem alguns temas recorrentes (e muito sensíveis) em um processo de migração. Abaixo estou listando os principais, sendo que a ordem não necessariamente atribui aos mesmos um grau de importância:

  • Suportar Unicode em todo o projeto
  • Migrar o framework de acesso a dados
  • Passar a compilar para 64 bit no Windows
  • Migrar ou remover componentes de terceiros
  • Migrar o middleware (quando em uso)

Temos também outros tópicos que não estão exatamente relacionadas a migração, mas sim a expansão da aplicação para outras plataformas, já que no Delphi/C++ temos o benefício de utilizar exatamente o mesmo código-fonte para múltiplas arquiteturas:

  • Migrar de uma plataforma de banco de dados para outra
  • Suportar múltiplas plataformas de banco de dados simultaneamente
  • Passar de uma aplicação originalmente Windows para múltiplas plataformas

Cada um destes macro tópicos será tratado em um ou mais artigos individualmente, e novos poderão ser adicionados de acordo com seu feedback!

Para dar o pontapé inicial, vamos falar de Unicode, um tema abstrato para a maioria da comunidade, o qual pode significar ao mesmo tempo uma enorme dor de cabeça em seu projeto, ou literalmente nada. Tudo vai depender do contexto de sua aplicação. Hoje vamos entender o que é Unicode e sua importância.

Sobre Unicode

The Unicode Blog

Unicode foi criado e segue sendo mantido pelo Unicode Consortium, uma entidade criada por desenvolvedores: http://www.unicode.org/

Em sua definição podemos encontrar a seguinte declaração (em tradução livre):

Unicode fornece um número exclusivo para cada carácter,
Não importa qual plataforma,
Não importa qual aplicação,
Não importa qual linguagem.

Existe também um blog oficial (http://blog.unicode.org/) onde você pode encontrar artigos interessantes sobre padrões e versões da especificação do Unicode, atualmente em sua versão 9.0 (http://www.unicode.org/versions/Unicode9.0.0/).

Definições e Objetivos

Unicode é um padrão para a definição e identificação de caracteres e símbolos em todas as línguas escritas, atribuindo um valor único a cada caractere ou símbolo. O Consórcio Unicode define qual número (ponto de código) representa qual caractere ou símbolo.

Em 1991, obtivemos o Unicode versão 1.0.0, que foi estendido para 1.0.1 e 1.1 de acordo com o padrão ISO-10646. Originalmente, o Unicode 1.1 estava limitado a 64K caracteres e símbolos, o que significava que 2 bytes eram suficientes para codificar todos os caracteres. Infelizmente, o 64K também era insuficiente para suportar todas as línguas escritas no mundo.

Como resultado, o Unicode 2.0, a partir de junho de 1996, estendeu o número de pontos de código para $ 10FFFD caracteres e símbolos (1.114.109 para ser exato). No momento da escrita, o Unicode 9.0 é atual, para o qual o Consórcio Unicode já definiu 128.172 caracteres no padrão.

Formatos de Transformação Unicode

Os dados Unicode (os valores de ponto de código) podem ser apresentados em diferentes formatos, como UTF-8, UTF-16 ou UTF-32. Também podemos opcionalmente comprimir dados Unicode. UTF significa Unicode Transformation Format, e cada UTF define o mapeamento entre um ponto de código para uma série única de bytes que representam esse ponto de código. Assim, onde o próprio Unicode define o caractere ou símbolo que pertence a um ponto de código, o UTF define a representação física (no arquivo no disco ou na memória, por exemplo).

UTF-8
Usando UTF-8, temos entre 1 e 4 bytes para cada caractere Unicode.

UTF-16
Usando UTF-16, obtemos 2 ou 4 bytes para cada caractere Unicode. Esta codificação é mais fácil e mais rápida de processar do que UTF-8.

UTF-32
Usando UTF-32 sempre obtemos exatamente 4 bytes para cada caractere Unicode. Esta é a codificação mais fácil de todas, mas também a que resulta no maior espaço de armazenamento.

API do Windows
Desde Windows NT e 2000, a API do Windows oferece suporte a dois conjuntos de APIs: um para ANSI (A) e um para caracteres Unicode (W), portanto, outra importante razão para você migrar sua aplicação para um compilador mais recente.

Unicode no Delphi/C++ Builder

Feitas as apresentações e formalidades, no próximo artigo iniciaremos por explorar os recursos e técnicas para migração de sua aplicação “Pré-Unicode”, seja tornando-a 100% aderente ao padrão Unicode, ou simplesmente garantindo que ela irá se comportar bem com os novos compiladores e sistemas operacionais, caso você não necessite realmente de suporte a múltiplos idiomas e caracteres estendidos.

Até breve!

Embarcadero Conference 2016 – Brazil

banner_conference

The Embarcadero Conference 2016 Brazil is now very close, so I thought about sharing some facts about the event.

1) That event is the largest Delphi and C++ Builder developers conference in the world, we have around 500 attendees every year, and we are expecting more for the next October 26th.

2) We are growing in content and space if compared with all the previous years: 7 tracks, 48+ speeches, 50+ hours of valuable content, everything in one day!

3) There are attendees from the entire country, of every state of the federation. In case you don’t know too much about Brazil, we are a continental country, so the distance here really matters: https://en.wikipedia.org/wiki/Brazil.

4) We used to have also visitors from neighbor countries, let’s see who will shows up this year…  😉

5) We have nowadays more than 15 Brazilian MVPs in the Embarcadero MVP program, and all of them will talk in the event.

6) Talking about MVPs, Jim McKeeth, the MVP Program Manager will also be here, doing the Opening Keynote!

If you want to know more, you can explore the Conference Portal (in Portuguese), but I’m also providing here an unofficial translation in english, as well some pictures from the 2015 edition!

 

Results from the Embarcadero Academic Program in Brazil

v-deo-satc-cria-aplicativo-para-movimentar-protese-de-mao

Fábio Feltrin da Silveira and João Mota Neto

Embarcadero has a Academic Program. Basically, any formal school can have Embarcadero tools available in their labs, and for all their students, paying a symbolic price per unit. If you want to know more, please contact Embarcadero or a distributor/reseller in your region.

Here in Brazil we are adding more and more universities to the program, and the first results are showing up. I’m here to share one of these cases.

SATC is one of our affiliated. They are teaching Delphi inside their regular programming course, and also using the tool in some researches, like this one reported here:
http://www.engeplus.com.br/noticia/tecnologia/2016/v-deo-satc-cria-aplicativo-para-movimentar-protese-de-mao/

The text above is in brazilian portuguese, but in short, it says:

After six months of study, research with a prosthetic hand developed in Satc creates application able to make an artificial hand to move by an smartphone. The tool enables the registration of several movements that make fingers and forearm to move by means of voice command.

The artificial hand was created in Satc by 3D printing method. The voice command smartphone was developed in Delphi, which allows the application to run on any platform.

Here you have two videos showing the prototype in action:
https://www.youtube.com/watch?v=z2Hb91mCJDc
https://www.youtube.com/watch?v=yOvD4JanJLU

I’d like to congratulate the university and all the team involved in this project (Fábio Feltrin da Silveira and his coordinator, João Mota Neto) by this incredible achievement, and please, keep us informed about the project status!

Finally, If you are a teacher or a student in any part of the world, and want to have Embarcadero tools in your school, please contact us (or any partner in your region) and let’s innovate together!

RAD Studio no TDC São Paulo 2016

-TheDevConf 2016   Home

A Embarcadero está presente no TDC deste ano, ao lado de outros grandes nomes com Microsoft, Amazon, Oracle e IBM:

http://www.thedevelopersconference.com.br/

O evento é gigante, são mais de 50 trilhas ao longo de 6 dias inteiros de palestras e workshops para todas as tribos. Ao longo da semana mais de 4 mil pessoas devem passar por aqui!

-TheDevConf 2016   Home

Nosso principal objetivo aqui é mostrar o RAD Studio (Delphi e C++ Builder) para novos públicos, e a receptividade tem sido impressionante. Nosso stand é, com toda certeza, um dos mais visitados do evento!

Participamos de três palestras, uma na trilha de IoT, outra em Mobile, além de um Keynote na Quarta-Feira, onde foi possível posicionar a Embarcadero para todos os participantes.

Abaixo uma pequena amostra do ambiente do evento, em especial da área onde estão os expositores, incluindo o stand da Embarcadero.

 

 

 

Delphi Academy Latinoamérica – Nuevos Temas

banner_spanish

Delphi Academy ha sido un gran éxito! Estamos en el episodio número 5, y debido a tal receptividad, ya tenemos más 5 episodios en la agenda, a saber:

* 01/07 – Visualización de Datos con FireMonkey 3D
* 15/07 – Comprender y utilizar layouts FireMonkey
* 29/07 – Uso de efectos, animaciones y transiciones en FireMonkey
* 12/08 – Acceso a datos con FireDAC
* 26/08 – La migración de BDE y DBX a FireDAC

Si quieres puedes encontrar lo que ha pasado, todos los episodios están disponibles en este enlace: http://embt.co/DelphiAcademyLatAmReplay. En esta playlist se encuentran los siguientes temas:

  • Control de una aplicación Windows desde una aplicación móvil con AppTethering
  • LiveBindings: desde lo básico hasta técnicas avanzadas
  • Integración de servicios en la nube con REST/JSON
  • Introducción a NoSQL con MongoDB y FireDAC
  • Uso del Windows Runtime (WinRT) y la Universal Windows Platform (UWP) en Windows 10

En la descripción de cada uno de los videos, hay un enlace para los ejemplos (y también la presentación en PDF). O usted puede todavía encontrar todos los ejemplos directamente aquí: http://cc.embarcadero.com/Author/4821.

Y no termina ahí! Usted está invitado a contribuir con sugerencias sobre los temas que le gustaría ver en Delphi Academy. Deje sus comentarios sobre este artículo y haremos todo lo posible para servirle!

Antes de terminar, una vez más, estás invitado a las próximas presentaciones. Simplemente haga clic aquí http://embt.co/DelphiAcademyLatAm y regístrate, recordando que debe registrarse para cada uno de los temas de interés.

Delphi Academy Brasil – Novos Tópicos

banner_form

O Delphi Academy tem se mostrado um grande sucesso! Estamos no episódio de número cinco e mais de mil desenvolvedores já passaram por lá! Devido tamanha receptividade, já programamos mais cinco episódios, confiram na agenda abaixo:

  • 28/06 – Visualização de Dados com Firemonkey 3D
  • 12/07 – Compreendendo e utilizando FireMonkey Layouts
  • 26/07 – Usando efeitos, animações e transições no FireMonkey
  • 09/08 – Acesso a Dados com FireDAC
  • 23/08 – Migrando de BDE e DBX para FireDAC

Se você quiser dar uma olhada no que já passou, todos os episódios estão disponíveis neste link: http://embt.co/DelphiAcademyReplay. Neste playlist você vai encontrar os seguintes tópicos:

  • Controle uma Aplicação Windows a partir de uma Aplicação Mobile com AppTethering
  • LiveBindings – de Formulários Visuais ao Código
  • Integração de Serviços Cloud com REST/JSON
  • Introdução a NoSQL com MongoDB e FireDAC
  • Utilizando Windows Runtime (WinRT) e Universal Windows Platform (UWP) no Windows 10

Na descrição de cada um dos vídeos há um link para os exemplos (e também o PDF da apresentação). Ou você ainda pode encontrar todos os exemplos diretamente aqui: http://cc.embarcadero.com/Author/4821.

E não queremos parar por aí! Você está convidado a contribuir com sugestões sobre temas que gostaria de ver no Delphi Academy. Deixe seu comentário neste artigo e faremos o possível para atendê-lo!

Antes de encerrar, mais uma vez fica o convite para as próximas apresentações. Basta clicar aqui http://embt.co/DelphiAcademy e se inscrever, lembrando que você deve se cadastrar para cada um dos tópicos de seu interesse.