This is the 3rd project in the Robotics Software Engineer Nanodegree Program by Udacity.
Project Discription
In this project, I learned several aspects of robotic software engineering with a focus on ROS:
Create a ROS package that launches a custom robot model in a custom Gazebo world
Utilize the ROS AMCL package and the Tele-Operation / Navigation Stack to localize the robot
Explore, add, and tune specific parameters corresponding to each package to achieve the best possible localization results
Launching
First, launch the simulation:
$ roslaunch my_robot world.launch
In a new terminal, launch the amcl launch file:
$ roslaunch my_robot amcl.launch
Testing
There are two options to control my robot while it localize itself here:
Send navigation goal via RViz
Send move command via teleop package.
Option 1: Send 2D Navigation Goal
Click the 2D Nav Goal button in the RViz toolbar, then click and drag on the map to send the goal to the robot. It will start moving and localize itself in the process.
Option 2: Use teleop Node
Open another terminal and launch the teleop script:
Onboard is an extensible framework for visual programming. Onboard allows you to create a node editor from the browser. You can define nodes and events that allow you to create instructions to process data in your editor.
As dialect you choose, it have to installed first.
Example:
npm install mysql for mysql
npm install mysql2 for mysql2
npm install mariadb for mariadb
npm install pg for pg
Querying
Select
Getting all data (select query) can do by use following lines.
...
db.table('users').all().then(console.log).catch(console.log);// prints all data in users table
Getting all data with specific column(s), see following example.
...
db.table('users').get('fullname','email','password').then(console.log).catch(console.log);// prints all data in users table, but// only fullname, email, and password columns
Insert
Inserting a data can do by use following lines.
...
db.table('users').insert([null,'my fullname','example@email.top','mypass123']).then(console.log).catch(console.log);// inserting data into users table// prints insertion result
Inserting a data with specific column(s) can do by use following lines.
...
db.table('users').insert({fullname: 'my fullname',email: 'example@email.top',password: 'mypass123'}).then(console.log).catch(console.log);// inserting data into users table// prints insertion result
Update
Updating all data(s) can do by use following lines.
db.table('users').update({fullname: 'aye'}).then(console.log).catch(console.log);// updating all data in users table// prints update result
Updating data(s) with specific row(s) can do by use following lines.
db.table('users').where({id: 1}).update({fullname: 'aye'}).then(console.log).catch(console.log);// updating data(s) with 1 as id in users table// prints update result
Delete
Deleting all datas can do by use following lines.
db.table('users').del().then(console.log).catch(console.log);// deleting all data in users table// prints deletion result
Deleting data(s) with specific row(s) can do by use following lines.
db.table('users').where({id: 1}).del().then(console.log).catch(console.log);// deleting data(s) with 1 as id in users table// prints deletion result
The application is made in ultra low level C++, the graphics library used is WXwidgets C++ and the communication part is handled by winsock2.
The network communication system uses a blocking socket and each user is able to send/retrieve data.
Compiling and debugging
You must download the WXwidgets libraries and put the lib and included directories in the solution directory. Choose the LIBDebug or LIBRelease configuration to compile because the program only uses static libraries.
Download Libraries:https://www.wxwidgets.org/downloads/
You can download the source code and compile the libraries yourself or download the precompiled .lib files.
Installation
At the moment, the application is still in the development, no release is available.
[FR]
Presentation
Ceci est une application réseaux de chat à deux personnes.
L’application est programmée en C++ ultra bas niveau, la bibliothèque graphique utilisé est WXwidgets C++ et la partie communication est assurée par winsock2.
Le système de communication réseaux utilise un socket bloquant et chaque utilisateur est capable d’envoyer/récupérer des données.
Compilation et debugging
Vous devez impérativement télécharger les bibliothèques WXwidgets et mettre les répertoires lib et inclue dans le répertoire de la solution. Choisissez les configuration LIBDebug ou LIBRelease pour compiler car le programme utilise des bibliothèques statiques.
Télécharger les bibliothèques :https://www.wxwidgets.org/downloads/
Vous pouvez télécharger le code source et compiler les bibliothèques vous-même où télécharger les fichiers .lib précompilés.
Installation
Pour l’instant, l’application est encore en phase de développement, aucune release n’est disponible.
[EN] UML class diagram / [FR] Diagramme UML de classe
(non definitive / non deffinitif)
[EN] Classes description :
CApp: main entry point of the application
CMain: Management of the main window with events, message list and content display
CSettings: Stores the application settings and manages a window for the user to enter them
CContent: Stock the data of a message (text, username, date and time, files attached) and organize them in a panel.
CImagePanel: Class allowing the display of an image in a panel
[FR] Description des classes :
CApp : point d’entrée principale de l’application
CMain : Gestion de la fenêtre principale avec évènements, liste de message et affichage du contenu
CSettings : Stock les paramètres de l’application et gère aussi une fenêtre pour que l’utilisateur puisse les saisir
CContent : Stock les données d’un message (texte, nom d’utilisateur, date et heure, fichiers joints avec le message) et les organise dans un panneau.
CImagePanel : Class permettant l’affichage d’une image sous forme de panneau
The application is made in ultra low level C++, the graphics library used is WXwidgets C++ and the communication part is handled by winsock2.
The network communication system uses a blocking socket and each user is able to send/retrieve data.
Compiling and debugging
You must download the WXwidgets libraries and put the lib and included directories in the solution directory. Choose the LIBDebug or LIBRelease configuration to compile because the program only uses static libraries.
Download Libraries:https://www.wxwidgets.org/downloads/
You can download the source code and compile the libraries yourself or download the precompiled .lib files.
Installation
At the moment, the application is still in the development, no release is available.
[FR]
Presentation
Ceci est une application réseaux de chat à deux personnes.
L’application est programmée en C++ ultra bas niveau, la bibliothèque graphique utilisé est WXwidgets C++ et la partie communication est assurée par winsock2.
Le système de communication réseaux utilise un socket bloquant et chaque utilisateur est capable d’envoyer/récupérer des données.
Compilation et debugging
Vous devez impérativement télécharger les bibliothèques WXwidgets et mettre les répertoires lib et inclue dans le répertoire de la solution. Choisissez les configuration LIBDebug ou LIBRelease pour compiler car le programme utilise des bibliothèques statiques.
Télécharger les bibliothèques :https://www.wxwidgets.org/downloads/
Vous pouvez télécharger le code source et compiler les bibliothèques vous-même où télécharger les fichiers .lib précompilés.
Installation
Pour l’instant, l’application est encore en phase de développement, aucune release n’est disponible.
[EN] UML class diagram / [FR] Diagramme UML de classe
(non definitive / non deffinitif)
[EN] Classes description :
CApp: main entry point of the application
CMain: Management of the main window with events, message list and content display
CSettings: Stores the application settings and manages a window for the user to enter them
CContent: Stock the data of a message (text, username, date and time, files attached) and organize them in a panel.
CImagePanel: Class allowing the display of an image in a panel
[FR] Description des classes :
CApp : point d’entrée principale de l’application
CMain : Gestion de la fenêtre principale avec évènements, liste de message et affichage du contenu
CSettings : Stock les paramètres de l’application et gère aussi une fenêtre pour que l’utilisateur puisse les saisir
CContent : Stock les données d’un message (texte, nom d’utilisateur, date et heure, fichiers joints avec le message) et les organise dans un panneau.
CImagePanel : Class permettant l’affichage d’une image sous forme de panneau
Tap2Pix ❤️ Super App Wallet 100% Tupiniquim for IOS & Android
[ Tap2Pix NFC Card Emulation Service ]
Este projeto Android implementa um serviço de emulação de cartão NFC (Host-based Card Emulation, HCE), que permite ao dispositivo simular um cartão NFC e responder a comandos APDU (Application Protocol Data Units). A aplicação emula um cartão NDEF, permitindo a interação com leitores NFC compatíveis. O principal uso é fornecer informações como mensagens de texto ou URLs via NFC.
Prints do Tap2Pix
Links dos apps Tap2Pix
Important
Somente o Android possui a funcionadade para a transmição do NFC! Sendo assim, os Vendedores precisarão sempre ser Android.
Já o Comprador, pode ser qualquer plataforma (Android ou IOS)
Note
Para a realização do teste, faça o download em um Android do Tap2Pix, coloque o valor a ser cobrado e aproxime de qualquer IPhone ou Android.
Note
Nesse momento para os testes, somente temos listado 3 bancos, são eles: Itaú Unibanco, Mercado Pago e Bradesco.
Note
O modelo atual para o pagamento com aproximação é com a Jornada COM Redirecionamento. Porém nosso app está preparado para ser um ITP e rodar o JSR quando disponível pelo Banco Central do Brasil e Open Finance Brasil.
A proposta da Tap2Pix.org
A proposta da Tap2Pix.org destaca-se como um Super App Wallet soberano, 100% tupiniquim, disponível em multiplataformas (iOS e Android – IPhone, Google e Samsung)
Que permite a iniciação automática dos pagamentos pela aproximação do celular via NFC ou através da leitura de QR Code.
Além disso, é o único que oferece ambas as jornadas de pagamento, com e sem redirecionamento. Permitindo uma gradual adaptação dos usuários.
O mais impressionante é que tudo isso é conduzido sob a governança e total controle dos associados no consórcio!
NfcFCardEmulation
NfcFCardEmulation é um serviço Android que utiliza a tecnologia Host-based Card Emulation (HCE) para emular um cartão NFC e transmitir mensagens NDEF, como textos ou URLs, para leitores NFC. Ele é ideal para aplicações que precisam simular cartões NFC e responder a comandos APDU.
Nenhum dos participantes do Tap2Pix precisará se preocupar com o desenvolvimento dos aplicativos instantâneos para integração com o Tap2Pix. Toda a jornada e adaptação necessária já foi realizada pela equipe do Tap2Pix.
Padrão do Banco Central para o Pix por Aproximação
O Banco Central do Brasil, por meio do Grupo de Trabalho de Padronização e Requisitos Técnicos, propôs uma padronização para pagamentos com PIX por Aproximação + APP Iniciador de Pagamentos no contexto do Open Finance, utilizando a Jornada Sem Redirecionamento (JSR).
Especificações do Formato
O fluxo proposto consiste no envio, por meio do comando APDU, de uma URI padronizada por terminais de pagamento (maquininhas, smartphones ou pin pads), seguindo o seguinte formato:
“pix://”: 🟥 Permite o uso do deeplink, que oferece uma camada de segurança fraca. Contudo, qualquer aplicativo poderia utilizar esse deeplink. Quando combinado com o parâmetro "&sig=<signature>", seria possível criptografar o valor do parâmetro "qr=<uri-encoded-emv-qr-string>", aumentando a segurança, mas criando redundância, pois o “copie e cole” do Pix já possui criptografia suficiente.
“<hostname>?”: 🟩 Permite o uso do domínio (Universal Link) https://tap2pix.app, com um certificado RSA, garante a camada de segurança necessária para comprovação de propriedade e execução exclusiva dos aplicativos instantâneos.
“qr=<uri-encoded-emv-qr-string>”: 🟩 Este é o elemento central da interoperabilidade proposta pelo Banco Central. O QR code precisa estar em formato URI encode, para que os aplicativos bancários possam filtrar e absorver as informações transmitidas via GET. A informação contida no “copie e cole” é essencial para a realização da transação, enquanto as demais informações apenas compõem a personalização dos aplicativos e seus formatos de leitura.
[ Transmissão do NFC com Tap2Pix ]
Descrição das Funcionalidades
Emulação de cartão NFC (HCE): O dispositivo Android atua como um cartão NFC emulado.
Resposta a comandos APDU: O serviço interpreta e responde a comandos APDU, como a seleção de aplicação, container de capacidade e arquivos NDEF.
Envio de mensagens NDEF: Permite o envio de mensagens NDEF contendo texto ou URLs para dispositivos/leitores NFC.
Suporte a mensagens dinâmicas: O serviço pode gerar mensagens NDEF com base em URLs fornecidas via Intent.
Estrutura do Projeto
A principal classe do projeto é Tap2PixApduService, que herda de HostApduService e implementa a lógica de resposta aos comandos NFC.
Principais Componentes
onCreate(): Inicializa o serviço, preparando uma mensagem NDEF padrão.
onStartCommand(): Atualiza a mensagem NDEF com base nos dados recebidos via Intent.
processCommandApdu(): Lida com os comandos APDU recebidos, respondendo com dados NDEF ou informações do container de capacidade.
onDeactivated(): Reseta os estados quando o serviço NFC é desativado.
Comandos APDU
Os comandos APDU são usados para selecionar diferentes arquivos e responder com as informações correspondentes:
Selecionar Aplicação: Seleciona a aplicação NDEF emulada.
Selecionar Container de Capacidade: Seleciona o arquivo de capacidade NDEF.
Selecionar Arquivo NDEF: Seleciona o arquivo que contém a mensagem NDEF.
Estrutura da Mensagem NDEF
A mensagem NDEF pode conter:
Texto: Uma string em formato de texto (padrão).
URL: Uma URL passada por Intent para emular um redirecionamento.
Pré-requisitos
Android Studio
Um dispositivo Android com suporte a NFC e Host-based Card Emulation (HCE)
[ Envio da URL do Pix transmitida pelo NFC ]
Padronização da URL Tap2Pix
O formato padrão da URL para ser transmitido no Tap2Pix é o seguinte:
https://tap2pix.app/?qr=encodeURI(copie&cole)
A URL tap2pix.app foi configurada para garantir a segurança da aplicação, sendo compatível com os aplicativos instantâneos da Apple (App Clip) e Android (Instant App). O uso de Universal Links garante que apenas o domínio tap2pix.app inicie esses apps instantâneos, além de estar alinhado à proposta enviada pelo Banco Central do Brasil (BCB).
Exemplo de Transmissão de URL
Abaixo está um exemplo de como seria a transmissão da URL do Tap2Pix com um QR code estático:
O Instant APP precisa rodar com o navegador do Google Chrome
Ou… Se estiver no desktop, faça a leitura do QR Code (IOS ou Android)
a
Essa estrutura segue as diretrizes de segurança e padronização exigidas pelo Banco Central, garantindo a eficácia e segurança do Tap2Pix em diferentes cenários de uso.
[ Listagem dos APPs na Tap2Pix ]
Adição dos APPs bancários junto ao TAP2PIX
Para listar seu app no Tap2Pix, é necessário entrar em contato e fornecer os schemes do seu app. Vale lembrar que o Tap2Pix aceitará apps de BaaS e Bancos Sociais. Esses apps não são obrigatórios para o Open Finance na Jornada SEM Redirecionamento, que será lançada em fevereiro de 2025. Contudo, apps de BaaS, Bancos Sociais e de exchanges (optantes pelo OFF Ramp) podem solicitar inclusão via Jornada COM Redirecionamento.
É necessário fornecer os schemes do app junto com o Universal Link. Exemplo:
O Tap2Pix mapeia os apps instalados nos smartphones dos clientes [ Já desenvolvido para IOS ]. Checamos se os apps estão instalados no Smartphone (IOS e Android) dos clientes.
E iremos checar de 20 à 30 dad instituições mais utilizadas no Brasil estão presentes no Smartphone [ Estamos mapeando os universal link e schemes ].
Caso não estejam presente no Smartphone, os links dos apps serão removidos da listagem, garantindo que apenas os apps instalados [ A checagem dos 20 a 30 apps ] sejam exibidos.
A ordenação será feita com base nos últimos 3 apps utilizados pelo cliente [ Em desenvolvimento ], armazenando essa informação para que sejam listados primeiro, proporcionando uma experiência mais simples e eficaz.
Redução de Fricção e Taps Necessários
O Pix já é um sucesso para pagamentos online e de serviços. No entanto, no uso presencial, ele ainda enfrenta obstáculos devido à fricção envolvida.
Em testes de laboratório, observamos que a jornada com QR Code exige de 8 a 12 interações (taps), resultando em um tempo total entre 20 e 50 segundos.
O Tap2Pix busca reduzir essa fricção nos pagamentos presenciais com Pix, proporcionando uma experiência mais simplificada.
• Na proposta do Tap2Pix COM redirecionamento, a jornada varia de 3 a 6 interações. A melhor experiência de UX foi alcançada com 3 taps, e, entre os bancos testados, o Mercado Pago apresentou 4 taps, com tempo de transação variando entre 6 e 15 segundos em média.
Tip
O Tap2Pix é compatível com Apple Pay e Instant App Android, mantendo a mesma quantidade de interações nas Jornadas COM e SEM Redirecionamento em ambas as plataformas.
• Na proposta SEM redirecionamento, estimamos que o processo envolverá 2 cliques laterais + 1 ou 2 taps. Considerando que haverá mais um PSP intermediando a transação, acreditamos que a latência do JSR será ligeiramente maior devido às verificações de fraude, levando de 10 a 15 segundos em média.
• A experiência com a Wallet da Apple demonstrou ser extremamente eficiente, exigindo apenas 2 cliques laterais, com tempo médio de 5 a 10 segundos.
Para substituir a Wallet da Apple, outras wallets precisarão de 2 cliques laterais + 1 tap para ativar a leitura do NFC, levando de 10 a 15 segundos. No entanto, para que essas wallets sejam competitivas, é essencial que ofereçam uma UX superior à da Apple, para motivar os clientes a usá-las. Outros pontos identificados foram:
Necessidade de atualização dos smartphones dos clientes para iOS 18.1 ou superior;
Competição direta com a Wallet da Apple;
Necessidade de interação para ativar a leitura do NFC;
Competição com bandeiras de cartão de crédito;
Instalação de um novo aplicativo de wallet;
Limitação no suporte a NFCs de serviços, como cartão vacinal do governo, cartões de embarque, tickets de transporte, passaportes da Disney, entre outros.
O projeto Tap2Pix
O projeto Tap2Pix busca a democratização do Pix por Aproximação. Além de estar totalmente preparado para a Jornada SEM Redicionamento, ele também mantém a Jornada COM Redirecionamento.
Benefícios da Proposta do Tap2Pix:
Disponibilidade do Pix por Aproximação antes do lançamento do JSR com o Open Finance (Fevereiro de 2025)
A proposta do Tap2Pix não conflita com as bandeiras;
Não competirá com Apple Pay ou Wallet no duplo clique lateral;
Sua ativação é automática e instantânea;
Compatível com iOS 15 e Android 12
Prevê a jornada COM e SEM redirecionamento;
Utiliza QR Code, NFC ou Link para ativação do SuperApp Wallet;
Não requer instalação prévia;
Tem menos de 100KB;
Não necessita de autorização ou cadastro prévio dos clientes;
Facilita a adaptação da usabilidade para os clientes;
Não requer cadastro dos bancos (apenas mapeamento do Universal Link e sessão do Pix);
Não precisa de modificações nos aplicativos bancários;
Abrange BaaS e Bancos Sociais e não obrigatórios do #JSR;
É um Super App Wallet multiplataforma (iOS e Android);
Mantém todo o legado de segurança do método tradicional;
Está 100% em conformidade com a regulamentação e a LGPD;
É uma solução pioneira em nível mundial, desenvolvida por um grupo de empresas com uma proposta de padronização aberta para o uso de pagamentos via NFC, visando superar as limitações existentes;
Entrará em produção (com a Jornada COM Redirecionamento) até o início de outubro de 2024.
Desafios e Avanços
Os aplicativos instantâneos estão em constante evolução, e a equipe do Tap2Pix já realizou todas as adaptações necessárias, continuando seu desenvolvimento contínuo.
Atualmente, o Tap2Pix está em fase de pré-lançamento, com os participantes do consórcio e as suas equipes de desenvolvimento trabalhando junto para alinhar o processo de onboarding, a listagem e os fluxos operacionais.
É importante destacar que, após a integração dos parceiros do consórcio, o Tap2Pix avançará para a criação da sua associação e estruturação de sua governança.
Abaixo, detalhamos os desafios encontrados e as soluções instantâneas adotadas para iOS e Android.
Ambos os sistemas de aplicativos instantâneos (iOS e Android) possuem documentação limitada, mas as recentes atualizações feitas pelas plataformas mostram que estão em constante evolução (Principalmente a do Android, que como descrito anteriormente. Ainda não suporta a sua inicialização direta pelo NFC. Necessitando assim haver uma pagina web, que antecede e faz a sua chamada.
Vale ressaltar, que nenhum dos participantes do Tap2Pix precisará se preocupar com o desenolvimento dos aplicativos instantâneos para plugarem ao Tap2Pix, toda a jornada e adpação necessária já foi feita pela equipe do Tap2Pix.
Os aplicativos instantâneos precisaram ser desenvolvidos utilizando a linguagem nativa das plataformas, como Kotlin no Android e Swift no IOS.
IOS / Apple
O IOS possui um app instantâneo com ótima UX, onde exibe um card mesmo com Iphone bloqueado. A limitação que encotramos junto ao APP CLIP da Apple foi no que diz respeito a sua invocação através do link. A Apple ainda não permite a ativação do app instantâneo utilizando o universal link (dominio tap2pix.app).
Warning
Conforme o demo, conseguimos invocar o APP Clip via link, porem ainda não foi encontrado uma solução para personalizar o Universal Link e assim mantermos o mesmo do APP Clip. (Em estudo)
O Android possui a sua limitação na invocação do app instantâneo através do NFC (O Google tem atualizado bastante o seu Instant APP e a comunidade tem exigido bastante essa invocação pelo NFC). O subterfúgio encontrado, foi em levar o cliente para o navegador e ao clicar em abrir ele executará o app instantâneo.
Note
O Android manteve a mesma quantidade de Taps (Cliques) do que no IOS.
O Instant APP precisa rodar com o navegador do Google Chrome
[ Próximos passos ]
1 - Padronização do QR Code com logo Tap2Pix;
2 - Criação do Fingerprint;
3 - Criação do Tap2Crypto (P2P de Stablecoin ou com OFF Ramp para Pix)
4 - Criação e consolidação do Consócio Tap2Pix
5 - Implementação da JSR com OpF;
6 - Incorporação de uma ID e One Click Buy (Estilo Click2Pay da Visa e Mastercard)
Sugestão dos nomes para a Associação Tap2Pix: ABTAP – Associação Brasileira de Transações por Aproximação OU APAW – Associação de Pagamentos por Aproximação e Wallet
Contributions: Star History
[ Junte-se ]
Vamos unir forças para demonstrar que, por meio da colaboração coletiva, que podemos não apenas estabelecer um novo padrão, mas também transformar a maneira como os brasileiros realizam pagamentos contactless utilizando o Pix? Entre em contato!
A AGPL-3.0 (Affero General Public License) é uma licença de software livre que protege desenvolvedores ao garantir que qualquer modificação ou uso do software seja compartilhado com a comunidade, mesmo quando ele é oferecido como um serviço remoto, como em aplicações web. Ela estende os princípios da GPL, incluindo a exigência de que, se alguém modificar o software para oferecer um serviço, deve disponibilizar o código-fonte modificado a todos os usuários desse serviço, se solicitado. Isso impede que empresas ou indivíduos utilizem o software para lucrar ou oferecer serviços sem compartilhar as melhorias ou adaptações feitas. Assim, a AGPL-3.0 assegura que todo trabalho colaborativo e aberto seja mantido público, promovendo um ciclo contínuo de melhorias e garantindo que os benefícios e inovações sejam acessíveis a toda a comunidade de desenvolvedores.
Tap2Pix ❤️ Super App Wallet 100% Tupiniquim for IOS & Android
[ Tap2Pix NFC Card Emulation Service ]
Este projeto Android implementa um serviço de emulação de cartão NFC (Host-based Card Emulation, HCE), que permite ao dispositivo simular um cartão NFC e responder a comandos APDU (Application Protocol Data Units). A aplicação emula um cartão NDEF, permitindo a interação com leitores NFC compatíveis. O principal uso é fornecer informações como mensagens de texto ou URLs via NFC.
Prints do Tap2Pix
Links dos apps Tap2Pix
Important
Somente o Android possui a funcionadade para a transmição do NFC! Sendo assim, os Vendedores precisarão sempre ser Android.
Já o Comprador, pode ser qualquer plataforma (Android ou IOS)
Note
Para a realização do teste, faça o download em um Android do Tap2Pix, coloque o valor a ser cobrado e aproxime de qualquer IPhone ou Android.
Note
Nesse momento para os testes, somente temos listado 3 bancos, são eles: Itaú Unibanco, Mercado Pago e Bradesco.
Note
O modelo atual para o pagamento com aproximação é com a Jornada COM Redirecionamento. Porém nosso app está preparado para ser um ITP e rodar o JSR quando disponível pelo Banco Central do Brasil e Open Finance Brasil.
A proposta da Tap2Pix.org
A proposta da Tap2Pix.org destaca-se como um Super App Wallet soberano, 100% tupiniquim, disponível em multiplataformas (iOS e Android – IPhone, Google e Samsung)
Que permite a iniciação automática dos pagamentos pela aproximação do celular via NFC ou através da leitura de QR Code.
Além disso, é o único que oferece ambas as jornadas de pagamento, com e sem redirecionamento. Permitindo uma gradual adaptação dos usuários.
O mais impressionante é que tudo isso é conduzido sob a governança e total controle dos associados no consórcio!
NfcFCardEmulation
NfcFCardEmulation é um serviço Android que utiliza a tecnologia Host-based Card Emulation (HCE) para emular um cartão NFC e transmitir mensagens NDEF, como textos ou URLs, para leitores NFC. Ele é ideal para aplicações que precisam simular cartões NFC e responder a comandos APDU.
Nenhum dos participantes do Tap2Pix precisará se preocupar com o desenvolvimento dos aplicativos instantâneos para integração com o Tap2Pix. Toda a jornada e adaptação necessária já foi realizada pela equipe do Tap2Pix.
Padrão do Banco Central para o Pix por Aproximação
O Banco Central do Brasil, por meio do Grupo de Trabalho de Padronização e Requisitos Técnicos, propôs uma padronização para pagamentos com PIX por Aproximação + APP Iniciador de Pagamentos no contexto do Open Finance, utilizando a Jornada Sem Redirecionamento (JSR).
Especificações do Formato
O fluxo proposto consiste no envio, por meio do comando APDU, de uma URI padronizada por terminais de pagamento (maquininhas, smartphones ou pin pads), seguindo o seguinte formato:
“pix://”: 🟥 Permite o uso do deeplink, que oferece uma camada de segurança fraca. Contudo, qualquer aplicativo poderia utilizar esse deeplink. Quando combinado com o parâmetro "&sig=<signature>", seria possível criptografar o valor do parâmetro "qr=<uri-encoded-emv-qr-string>", aumentando a segurança, mas criando redundância, pois o “copie e cole” do Pix já possui criptografia suficiente.
“<hostname>?”: 🟩 Permite o uso do domínio (Universal Link) https://tap2pix.app, com um certificado RSA, garante a camada de segurança necessária para comprovação de propriedade e execução exclusiva dos aplicativos instantâneos.
“qr=<uri-encoded-emv-qr-string>”: 🟩 Este é o elemento central da interoperabilidade proposta pelo Banco Central. O QR code precisa estar em formato URI encode, para que os aplicativos bancários possam filtrar e absorver as informações transmitidas via GET. A informação contida no “copie e cole” é essencial para a realização da transação, enquanto as demais informações apenas compõem a personalização dos aplicativos e seus formatos de leitura.
[ Transmissão do NFC com Tap2Pix ]
Descrição das Funcionalidades
Emulação de cartão NFC (HCE): O dispositivo Android atua como um cartão NFC emulado.
Resposta a comandos APDU: O serviço interpreta e responde a comandos APDU, como a seleção de aplicação, container de capacidade e arquivos NDEF.
Envio de mensagens NDEF: Permite o envio de mensagens NDEF contendo texto ou URLs para dispositivos/leitores NFC.
Suporte a mensagens dinâmicas: O serviço pode gerar mensagens NDEF com base em URLs fornecidas via Intent.
Estrutura do Projeto
A principal classe do projeto é Tap2PixApduService, que herda de HostApduService e implementa a lógica de resposta aos comandos NFC.
Principais Componentes
onCreate(): Inicializa o serviço, preparando uma mensagem NDEF padrão.
onStartCommand(): Atualiza a mensagem NDEF com base nos dados recebidos via Intent.
processCommandApdu(): Lida com os comandos APDU recebidos, respondendo com dados NDEF ou informações do container de capacidade.
onDeactivated(): Reseta os estados quando o serviço NFC é desativado.
Comandos APDU
Os comandos APDU são usados para selecionar diferentes arquivos e responder com as informações correspondentes:
Selecionar Aplicação: Seleciona a aplicação NDEF emulada.
Selecionar Container de Capacidade: Seleciona o arquivo de capacidade NDEF.
Selecionar Arquivo NDEF: Seleciona o arquivo que contém a mensagem NDEF.
Estrutura da Mensagem NDEF
A mensagem NDEF pode conter:
Texto: Uma string em formato de texto (padrão).
URL: Uma URL passada por Intent para emular um redirecionamento.
Pré-requisitos
Android Studio
Um dispositivo Android com suporte a NFC e Host-based Card Emulation (HCE)
[ Envio da URL do Pix transmitida pelo NFC ]
Padronização da URL Tap2Pix
O formato padrão da URL para ser transmitido no Tap2Pix é o seguinte:
https://tap2pix.app/?qr=encodeURI(copie&cole)
A URL tap2pix.app foi configurada para garantir a segurança da aplicação, sendo compatível com os aplicativos instantâneos da Apple (App Clip) e Android (Instant App). O uso de Universal Links garante que apenas o domínio tap2pix.app inicie esses apps instantâneos, além de estar alinhado à proposta enviada pelo Banco Central do Brasil (BCB).
Exemplo de Transmissão de URL
Abaixo está um exemplo de como seria a transmissão da URL do Tap2Pix com um QR code estático:
O Instant APP precisa rodar com o navegador do Google Chrome
Ou… Se estiver no desktop, faça a leitura do QR Code (IOS ou Android)
a
Essa estrutura segue as diretrizes de segurança e padronização exigidas pelo Banco Central, garantindo a eficácia e segurança do Tap2Pix em diferentes cenários de uso.
[ Listagem dos APPs na Tap2Pix ]
Adição dos APPs bancários junto ao TAP2PIX
Para listar seu app no Tap2Pix, é necessário entrar em contato e fornecer os schemes do seu app. Vale lembrar que o Tap2Pix aceitará apps de BaaS e Bancos Sociais. Esses apps não são obrigatórios para o Open Finance na Jornada SEM Redirecionamento, que será lançada em fevereiro de 2025. Contudo, apps de BaaS, Bancos Sociais e de exchanges (optantes pelo OFF Ramp) podem solicitar inclusão via Jornada COM Redirecionamento.
É necessário fornecer os schemes do app junto com o Universal Link. Exemplo:
O Tap2Pix mapeia os apps instalados nos smartphones dos clientes [ Já desenvolvido para IOS ]. Checamos se os apps estão instalados no Smartphone (IOS e Android) dos clientes.
E iremos checar de 20 à 30 dad instituições mais utilizadas no Brasil estão presentes no Smartphone [ Estamos mapeando os universal link e schemes ].
Caso não estejam presente no Smartphone, os links dos apps serão removidos da listagem, garantindo que apenas os apps instalados [ A checagem dos 20 a 30 apps ] sejam exibidos.
A ordenação será feita com base nos últimos 3 apps utilizados pelo cliente [ Em desenvolvimento ], armazenando essa informação para que sejam listados primeiro, proporcionando uma experiência mais simples e eficaz.
Redução de Fricção e Taps Necessários
O Pix já é um sucesso para pagamentos online e de serviços. No entanto, no uso presencial, ele ainda enfrenta obstáculos devido à fricção envolvida.
Em testes de laboratório, observamos que a jornada com QR Code exige de 8 a 12 interações (taps), resultando em um tempo total entre 20 e 50 segundos.
O Tap2Pix busca reduzir essa fricção nos pagamentos presenciais com Pix, proporcionando uma experiência mais simplificada.
• Na proposta do Tap2Pix COM redirecionamento, a jornada varia de 3 a 6 interações. A melhor experiência de UX foi alcançada com 3 taps, e, entre os bancos testados, o Mercado Pago apresentou 4 taps, com tempo de transação variando entre 6 e 15 segundos em média.
Tip
O Tap2Pix é compatível com Apple Pay e Instant App Android, mantendo a mesma quantidade de interações nas Jornadas COM e SEM Redirecionamento em ambas as plataformas.
• Na proposta SEM redirecionamento, estimamos que o processo envolverá 2 cliques laterais + 1 ou 2 taps. Considerando que haverá mais um PSP intermediando a transação, acreditamos que a latência do JSR será ligeiramente maior devido às verificações de fraude, levando de 10 a 15 segundos em média.
• A experiência com a Wallet da Apple demonstrou ser extremamente eficiente, exigindo apenas 2 cliques laterais, com tempo médio de 5 a 10 segundos.
Para substituir a Wallet da Apple, outras wallets precisarão de 2 cliques laterais + 1 tap para ativar a leitura do NFC, levando de 10 a 15 segundos. No entanto, para que essas wallets sejam competitivas, é essencial que ofereçam uma UX superior à da Apple, para motivar os clientes a usá-las. Outros pontos identificados foram:
Necessidade de atualização dos smartphones dos clientes para iOS 18.1 ou superior;
Competição direta com a Wallet da Apple;
Necessidade de interação para ativar a leitura do NFC;
Competição com bandeiras de cartão de crédito;
Instalação de um novo aplicativo de wallet;
Limitação no suporte a NFCs de serviços, como cartão vacinal do governo, cartões de embarque, tickets de transporte, passaportes da Disney, entre outros.
O projeto Tap2Pix
O projeto Tap2Pix busca a democratização do Pix por Aproximação. Além de estar totalmente preparado para a Jornada SEM Redicionamento, ele também mantém a Jornada COM Redirecionamento.
Benefícios da Proposta do Tap2Pix:
Disponibilidade do Pix por Aproximação antes do lançamento do JSR com o Open Finance (Fevereiro de 2025)
A proposta do Tap2Pix não conflita com as bandeiras;
Não competirá com Apple Pay ou Wallet no duplo clique lateral;
Sua ativação é automática e instantânea;
Compatível com iOS 15 e Android 12
Prevê a jornada COM e SEM redirecionamento;
Utiliza QR Code, NFC ou Link para ativação do SuperApp Wallet;
Não requer instalação prévia;
Tem menos de 100KB;
Não necessita de autorização ou cadastro prévio dos clientes;
Facilita a adaptação da usabilidade para os clientes;
Não requer cadastro dos bancos (apenas mapeamento do Universal Link e sessão do Pix);
Não precisa de modificações nos aplicativos bancários;
Abrange BaaS e Bancos Sociais e não obrigatórios do #JSR;
É um Super App Wallet multiplataforma (iOS e Android);
Mantém todo o legado de segurança do método tradicional;
Está 100% em conformidade com a regulamentação e a LGPD;
É uma solução pioneira em nível mundial, desenvolvida por um grupo de empresas com uma proposta de padronização aberta para o uso de pagamentos via NFC, visando superar as limitações existentes;
Entrará em produção (com a Jornada COM Redirecionamento) até o início de outubro de 2024.
Desafios e Avanços
Os aplicativos instantâneos estão em constante evolução, e a equipe do Tap2Pix já realizou todas as adaptações necessárias, continuando seu desenvolvimento contínuo.
Atualmente, o Tap2Pix está em fase de pré-lançamento, com os participantes do consórcio e as suas equipes de desenvolvimento trabalhando junto para alinhar o processo de onboarding, a listagem e os fluxos operacionais.
É importante destacar que, após a integração dos parceiros do consórcio, o Tap2Pix avançará para a criação da sua associação e estruturação de sua governança.
Abaixo, detalhamos os desafios encontrados e as soluções instantâneas adotadas para iOS e Android.
Ambos os sistemas de aplicativos instantâneos (iOS e Android) possuem documentação limitada, mas as recentes atualizações feitas pelas plataformas mostram que estão em constante evolução (Principalmente a do Android, que como descrito anteriormente. Ainda não suporta a sua inicialização direta pelo NFC. Necessitando assim haver uma pagina web, que antecede e faz a sua chamada.
Vale ressaltar, que nenhum dos participantes do Tap2Pix precisará se preocupar com o desenolvimento dos aplicativos instantâneos para plugarem ao Tap2Pix, toda a jornada e adpação necessária já foi feita pela equipe do Tap2Pix.
Os aplicativos instantâneos precisaram ser desenvolvidos utilizando a linguagem nativa das plataformas, como Kotlin no Android e Swift no IOS.
IOS / Apple
O IOS possui um app instantâneo com ótima UX, onde exibe um card mesmo com Iphone bloqueado. A limitação que encotramos junto ao APP CLIP da Apple foi no que diz respeito a sua invocação através do link. A Apple ainda não permite a ativação do app instantâneo utilizando o universal link (dominio tap2pix.app).
Warning
Conforme o demo, conseguimos invocar o APP Clip via link, porem ainda não foi encontrado uma solução para personalizar o Universal Link e assim mantermos o mesmo do APP Clip. (Em estudo)
O Android possui a sua limitação na invocação do app instantâneo através do NFC (O Google tem atualizado bastante o seu Instant APP e a comunidade tem exigido bastante essa invocação pelo NFC). O subterfúgio encontrado, foi em levar o cliente para o navegador e ao clicar em abrir ele executará o app instantâneo.
Note
O Android manteve a mesma quantidade de Taps (Cliques) do que no IOS.
O Instant APP precisa rodar com o navegador do Google Chrome
[ Próximos passos ]
1 - Padronização do QR Code com logo Tap2Pix;
2 - Criação do Fingerprint;
3 - Criação do Tap2Crypto (P2P de Stablecoin ou com OFF Ramp para Pix)
4 - Criação e consolidação do Consócio Tap2Pix
5 - Implementação da JSR com OpF;
6 - Incorporação de uma ID e One Click Buy (Estilo Click2Pay da Visa e Mastercard)
Sugestão dos nomes para a Associação Tap2Pix: ABTAP – Associação Brasileira de Transações por Aproximação OU APAW – Associação de Pagamentos por Aproximação e Wallet
Contributions: Star History
[ Junte-se ]
Vamos unir forças para demonstrar que, por meio da colaboração coletiva, que podemos não apenas estabelecer um novo padrão, mas também transformar a maneira como os brasileiros realizam pagamentos contactless utilizando o Pix? Entre em contato!
A AGPL-3.0 (Affero General Public License) é uma licença de software livre que protege desenvolvedores ao garantir que qualquer modificação ou uso do software seja compartilhado com a comunidade, mesmo quando ele é oferecido como um serviço remoto, como em aplicações web. Ela estende os princípios da GPL, incluindo a exigência de que, se alguém modificar o software para oferecer um serviço, deve disponibilizar o código-fonte modificado a todos os usuários desse serviço, se solicitado. Isso impede que empresas ou indivíduos utilizem o software para lucrar ou oferecer serviços sem compartilhar as melhorias ou adaptações feitas. Assim, a AGPL-3.0 assegura que todo trabalho colaborativo e aberto seja mantido público, promovendo um ciclo contínuo de melhorias e garantindo que os benefícios e inovações sejam acessíveis a toda a comunidade de desenvolvedores.
This repo contains information and examples of Packer templates for creating images of both Linux and Windows.
What is Packer ?
Packer is an open source tool for creating identical machine images for multiple platforms from a single source configuration. Packer is lightweight, runs on every major operating system, and is highly performant, creating machine images for multiple platforms in parallel. Packer does not replace configuration management like Chef. In fact, when building images, Packer is able to use tools like Chef to install software onto the image.
A machine image is a single static unit that contains a pre-configured operating system and installed software which is used to quickly create new running machines. Machine image formats change for each platform. Some examples include AMIs for EC2, VMDK/VMX files for VMware, OVF exports for VirtualBox, etc.
Packer Template
The configuration file used to define what image we want built and how is called a template in Packer terminology. The format of a template is simple JSON. JSON struck the best balance between human-editable and machine-editable, allowing both hand-made templates as well as machine generated templates to easily be made.
Chef
The Chef Client Packer provisioner installs and configures software on machines built by Packer using chef-client. Packer configures a Chef client to talk to a remote Chef Server to provision the machine.
Chef Client Provisioner
The provisioner will even install Chef onto your machine if it isn’t already installed, using the official Chef installers provided by Chef.
The example below is fully functional. It will install Chef onto the remote machine and run Chef client.
Make sure we have the correct directories and permissions for the chef-client provisioner. You will need to bootstrap the Chef run by providing the necessary cookbooks using Berkshelf or some other means.
The reference of available configuration options is listed below. No configuration is actually required.
chef_environment (string) – The name of the chef_environment sent to the Chef server. By default this is empty and will not use an environment.
config_template (string) – Path to a template that will be used for the Chef configuration file. By default Packer only sets configuration it needs to match the settings set in the provisioner configuration. If you need to set configurations that the Packer provisioner doesn’t support, then you should use a custom configuration template. See the dedicated “Chef Configuration” section below for more details.
encrypted_data_bag_secret_path (string) – The path to the file containing the secret for encrypted data bags. By default, this is empty, so no secret will be available.
execute_command (string) – The command used to execute Chef. This has various configuration template variables available. See below for more information.
guest_os_type (string) – The target guest OS type, either “unix” or “windows”. Setting this to “windows” will cause the provisioner to use Windows friendly paths and commands. By default, this is “unix”.
install_command (string) – The command used to install Chef. This has various configuration template variables available. See below for more information.
json (object) – An arbitrary mapping of JSON that will be available as node attributes while running Chef.
knife_command (string) – The command used to run Knife during node clean-up. This has various configuration template variables available. See below for more information.
node_name (string) – The name of the node to register with the Chef Server. This is optional and by default is packer-{{uuid}}.
policy_group (string) – The name of a policy group that exists on the Chef server. policy_name must also be specified.
policy_name (string) – The name of a policy, as identified by the name setting in a Policyfile.rb file. policy_group must also be specified.
prevent_sudo (boolean) – By default, the configured commands that are executed to install and run Chef are executed with sudo. If this is true, then the sudo will be omitted. This has no effect when guest_os_type is windows.
run_list (array of strings) – The run list for Chef. By default this is empty, and will use the run list sent down by the Chef Server.
server_url (string) – The URL to the Chef server. This is required.
skip_clean_client (boolean) – If true, Packer won’t remove the client from the Chef server after it is done running. By default, this is false.
skip_clean_node (boolean) – If true, Packer won’t remove the node from the Chef server after it is done running. By default, this is false.
skip_clean_staging_directory (boolean) – If true, Packer won’t remove the Chef staging directory from the machine after it is done running. By default, this is false.
skip_install (boolean) – If true, Chef will not automatically be installed on the machine using the Chef omnibus installers.
ssl_verify_mode (string) – Set to “verify_none” to skip validation of SSL certificates. If not set, this defaults to “verify_peer” which validates all SSL certifications.
trusted_certs_dir (string) – This is a directory that contains additional SSL certificates to trust. Any certificates in this directory will be added to whatever CA bundle ruby is using. Use this to add self-signed certs for your Chef Server or local HTTP file servers.
staging_directory (string) – This is the directory where all the configuration of Chef by Packer will be placed. By default this is “/tmp/packer-chef-client” when guest_os_type unix and “$env:TEMP/packer-chef-client” when windows. This directory doesn’t need to exist but must have proper permissions so that the user that Packer uses is able to create directories and write into this folder. By default the provisioner will create and chmod 0777 this directory.
client_key (string) – Path to client key. If not set, this defaults to a file named client.pem in staging_directory.
validation_client_name (string) – Name of the validation client. If not set, this won’t be set in the configuration and the default that Chef uses will be used.
validation_key_path (string) – Path to the validation key for communicating with the Chef Server. This will be uploaded to the remote machine. If this is NOT set, then it is your responsibility via other means (shell provisioner, etc.) to get a validation key to where Chef expects it.
For diffusion only model, refer to subdir./extern/ImageDream/ Check./threestudio/scripts/run_imagedream.shfor a bash example.
Credits
This code is forked from threestudio and MVDream for SDS and 3D Generation.
Tips
Place the object in the center and do not make it too large/small in the image.
If you have an object cutting image edge, in config, tuning the parameters range of elevation and fov to be a larger range, e.g. [0, 30], otherwise, you may do image outpainting and follow tips 1.
Check the results with ImageDream diffusion model before using it in 3D rendering to save time.
PreComputed Results
Since there is some randomness in diffusion model and time costly to get baseline results. We put our pre-computed results for reproducing Tab.1 in the paper in a hugging face dataset card
Citing
If you find ImageDream helpful, please consider citing:
@article{wang2023imagedream,
title={ImageDream: Image-Prompt Multi-view Diffusion for 3D Generation},
author={Wang, Peng and Shi, Yichun},
journal={arXiv preprint arXiv:2312.02201},
year={2023}
}