Blog
Aprenda a Investir

Open Source at Passfolio

Open Source at Passfolio

At Passfolio, we’ve built our app and server software on top of a variety of open source software, most of which is based on TypeScript, React, and/or React Native. 

 

In support of our mission to provide US financial market access to people from around the world, and to do so with a very small and efficient development team, we’ve had to identify and solve an interesting set of problems, which we feel others can also benefit from. 

 

Some of the tactical goals we have are:

  • Low overhead client side state management
  • A single codebase for web and native app clients, including for the UI layers
  • Great performance, even on relatively low end devices common in emerging markets
  • Type safe client-server communication 

 

We still have a lot of work to do towards these goals, but we’ve open sourced a few packages that we knew were generalizable and stable, because we think others can benefit from these packages. 

 

The first three packages we’ve published cover the most important mechanisms we prefer for state management and coordinated async task execution.  These packages, which build on each other, are:

 

client-run-queue

 

When dealing with many and/or highly bursty async tasks, ex. for downloading, combining, and transforming data, managing compute priority becomes critical. Lower end devices with limited memory, single core compute performance, or even just older, poorer performing JavaScript engines are especially affected when too many async tasks pile up.  However, even for the most modern systems, ensuring that enough free compute time is frequently available, is critical for making the system feel smooth.

 

As the number of tasks increases, ensuring that they run in a reasonable order is also important -- and initial scheduling order is often inefficient, especially with a very dynamic SPA, where a user might have moved on from the need for a previously requested, but still incomplete, piece of data.

 

The client-run-queue package essentially deals with just two things:

  • scheduling prioritized tasks
  • executing tasks quickly without blocking UI

 

It’s configurable so that it can use different mechanisms to make sure it behaves well with the UI layer.  For example, with React Native, we want to use InteractionManager.runAfterInteractions to schedule tasks after the UI is given a chance.

 

react-bindings

 

There are myriad state management tools and mechanisms for React.  Redux is very popular and much of what's built-in to React, especially modern, functional React, is a great start.

 

The first iteration of the Passfolio native application made use of Redux Sagas.  While this was conceptually interesting in some ways, we found that general debugging and optimizing state management and re-rendering was harder, more time consuming, and less natural that it needed to be.  Redux Sagas real strength is probably in testability, but the other drawbacks made it clearly not worth it for our project, especially as it grew in scope and complexity.

 

We wanted to:

  • Have highly optimized rendering by default
  • Write modular, testable code
  • Coordinate a large amount of asynchronously available data
  • Render progressively

 

Two-way data bindings are common in many APIs, and help achieve the above stated goals, but they’re not available directly in React.

 

Our package provides two-way data bindings, bridging for non-bound data, derivative computation support, conveniences for observing changes, and a component for rendering (and re-rendering) based on bound data.  We’ve used our approach mixed with React Sagas in the past, but we’ve since migrated all our state management to use a combination of pure React tools and react-bindings and we find this setup to be powerful, flexible, intuitive, and incredibly efficient. 

 

react-waitables

 

Because dealing with asynchronously available data is so prevalent in our codebase, we further specialize our bound data support into a concept we call waitables, which are effectively a combination of state information and an associated function that produces data.  For asynchronous data, we need to know:

  • is the data loaded?
  • was there an error?
  • the value of either the data or error

Additionally, we need to:

  • conditionally re-request data
  • observe changes for any state information
  • combine and/or transform data from multiple asynchronous sources
  • manage rendering associated with this data in an efficient manner

 

We built react-waitables on top of react-bindings to take advantage of it’s already optimized rendering, derivation, and observation capabilities.

 

When we think about asynchronously available data, the most common tool to work with is async functions, which run and either produce a value or throw an error.  However, react-waitables supports more than just straightforward async functions.  Sometimes asynchronous data is:

  • streamed
  • cached, but potentially stale
  • updated periodically
  • or, only conditionally available

To deal with these cases, waitables support both push and pull models. Waitable functions can update their bound data as many times as needed. Waitables can also be “reset”, so that the primary waitable function is re-run.

  

These packages are the core of our state and data management strategies with Passfolio and we think they’re useful for many projects and teams.  We hope you’ll check them out and love using them!

 

For examples and API documentation, see the linked NPM pages. 

 

If you’re an engineer excited about our stack and interested in joining Passfolio please email osblog at passfolio.com!

Sobre a Passfolio

A Passfolio é uma fintech de São Francisco que, por meio de sua empresa de serviços financeiros dos Estados Unidos registrada na SEC e sua corretora registrada na FINRA, fornece acesso rápido, acessível e seguro a investimentos em ações da Nasdaq, criptomoedas e contas correntes nos EUA.

Fique por dentro.

Assine nossa newsletter para ficar por cima das novidades e notícias do mercado financeiro.

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

Internacionalize sua Vida Financeira

Abra sua conta gratuita em minutos e dolarize-se hoje mesmo. A Passfolio te dá acesso a um cartão internacional em dólar, a investimentos no EUA e a criptomoedas.
Mais educação

Como é Possível Gerar Juros Sobre o seu Saldo no PassEarn?

PassEarn é o novo serviço da Passfolio que possibilita 5% de rendimento anual a todo usuário (Annual Percentage Yield - APY) e 7% APY a usuários Pro. Ainda, investidores de MOBI podem ter até 15% de bônus com uma opção de ser pago 25% mais juros se optarem por receber em MOBI! É como mágica! Mas muitos querem saber: como exatamente é possível um APY tão alto?
right arrow icon

Invista 10% de Cada Salário

A inflação está alta e os grandes bancos ao redor do mundo prevêem que continue a tendência é continuar subindo. Nós te ajudamos a evitar pressões inflacionárias a partir de uma gama de oportunidades de investimentos que podem te ajudar a aumentar seu capital.
right arrow icon

Relatório Semanal do Mercado de Ações 02/05/22

A notícia mais importante da semana passada foi a compra do Twitter por Elon Musk, pelo valor de $44 bilhões. Se a transação se concretizar, será o segundo maior leveraged buyout (LBO - quando o comprador usa dinheiro e dívidas para financiar a operação) na história, apenas R$1 bilhão atrás da aquisição da Energy Future Holdings em 2007.
right arrow icon

Saque do FGTS: veja como fazer seu dinheiro render no exterior

Caixa iniciou no dia 20 de abril a liberação extraordinária de até R$ 1.000 do Fundo de Garantia do Tempo de Serviço. Confira agora como investir esse valor.
right arrow icon

Elon Musk compra Twitter por $44 bilhões

Depois de uma curta batalha, a oferta de Elon Musk para comprar o Twitter (TWTR) por $44 bilhões, ou $54,20 por ação, foi aceita. O prêmio é de 8,8% sobre o valor atual de $49,80. 
right arrow icon

Atualização do Mercado de Cripto Ativos 29/04/2022

BTC conseguiu retomar acima da resistência dos $40.000 pela primeira vez na semana.
right arrow icon

Ouro Líquido: Um Resumo de Setor Petrolífero Durante Períodos de Instabilidade Política

O ouro negro proveniente de antigas formações geológicas - mundialmente conhecido como petróleo, teve mais uma vez lugar de destaque nos noticiários mundo afora.
right arrow icon

Relatório Semanal do Mercado de Ações 27/04/22

O aumento na taxa de juros e a redução da velocidade de compra de ativos pelos bancos centrais ainda são as maiores forças no mercado agora.
right arrow icon

Conheça o StockTimes o seu novo portal de notícias

Estar atualizado agora ficou tão fácil quanto investir nos EUA! Conheça o StockTimes o seu novo portal de notícias sobre o mercado de ações americano.
right arrow icon

Passfolio faz parceria com a RB Investimentos para adquirir clientes no Brasil

Temos o prazer de anunciar que a Passfolio firmou parceria com a RB Investimentos para oferecer mais confiança aos nossos clientes brasileiros.*
right arrow icon

Como aproveitar o Amazon Prime Day nos EUA com o PassCard

A Amazon dos Estados Unidos está realizando o Amazon Prime Day, que são dois dias (12 e 13 de Julho de 2022) onde diversos produtos no site estão com ofertas e descontos. Aproveite e use o seu PassCard para as compras!
right arrow icon

Suas Férias de Inverno com o PassCard e Investimentos no Mercado Atual

Em primeiro lugar, queremos lembrá-lo que seu PassCard e conta bancária nos EUA podem ser usados no mundo todo, em qualquer país que aceite a rede Mastercard. Se você está planejando suas férias de inverno, você pode usar o PassCard e economizar no IOF! Sobre investimentos, os mercados globais estão em queda e o cenário à frente pode parecer assustador, mas ainda faz sentido para brasileiros diversificarem seus ativos no mercado dos EUA.
right arrow icon
Postagens recentes do blog