bringing Go people to Go jobs

Posted
Fully remote

The project requires a vast array of developers and skill sets, so you need not have experience in all the below areas. Please see the skill list below and fill in the application form to identify your relevant skills.

ABOUT THE PROJECT

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

GetCourageNow is an open source sponsored project to build a P2P privacy focused Architecture of GSUITE like components to make it easy for people to move to a privacy focused world and evade internet censorship.

We use Flutter for GUI and Golang for all networking. 

The Architecture, Product fit and Stakeholder relationships have been established and tested and now we are looking for specialist developers with a motivation to help us build out this open source system.

Architecture: 

Code: https://github.com/getcouragenow

The Flutter GUI runs in the foreground process on Web, Desktop and Mobile.

The Golang code runs in the background process on the same devices and does all the security and networking aspects exposed as a GRPC channel, allowing any language to use it. We are using Flutter to demonstrate it.

Web PWA & Flutter Web

- Compile to WASM using Tinygo and use Web Workers

- Google Trips is an example and allows installing on Android and IOS

- Flutter Desktop - using GRPC channels and run as a Service or SystemTray

- Flutter Mobile - using GRPC channels and run as a Background Service

Remuneration

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

- Based on experience and skill sets.

Location

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

- 100% remote 

- Prefer in European Time zone.

- Looking for Team players with highly specialized skills.

- Must speak English.

Skills

--------

Architecture

  •  DRY
  • Targeted use of libraries in a lean and correct way approach.
  • Good architectural practices.
  • IOC / DI, etc
  • Feature flagging 
    • Clients and Servers
    • CI / CD integration

Flutter

  • Dependency injections
  • GRPC
  • 18n
  • Responsive layout
  • Go-flutter and Google Desktop.
  • Stores
    • HIVE
    • Moor
  • OpenGL / Canvas

Gomobile / Golang

  • Knowledge of using gomobile to build background long running Services with a GPRC local API to the Flutter GUI also using GRPC.
  • Mobile signing
  • Mobile background Services.

GRPC

  • GRPC reflection
  • Exotic channel
    • Local IPC style
    • P2P
  • Codegen
    • Many languages
  • Web
    • No Framing.
    • Reflection

P2P

  • Network
    • Libp2p
  • Discovery
    • DHT
  • Reconciliation patterns
    • General techniques for eventual consistency and CAP Theory
    • CRDT 
    • Lamport Vector clocks.
    • Textile IPFS is one of the libs we are experimenting with. The New Threads paper ( (https://docsend.com/view/gu3ywqi) ) looks very promising and builds on the hard earned shoulders of Martin Kleppmann’s “Turning a database inside out” (https://www.confluent.io/blog/turning-the-database-inside-out-with-apache-samza/) and Automerge CRDT from Cambridge UK.
    • Message patterns
      • NATS Message Queue / LiftBridge / Mangos
      • RPC
      • PUB SUB
      • STAR
      • CQRS
        • Understand the relationships of PUB SUB, CDC, Domain Model to Topic mapping.
        • KV, SQL and binlogs.

Multimedia

  • WebRTC
  • SDP and Media Gateways, Encoding, etc
  • TURN / STUN
  • OpenGL / GLFW / Vulkan
  • Pion 
  • GStreamer / C / CPP integration on Server, Mobile and Desktop.

Security

  • Best Practices
  • 2FA
    • HSM, Yubikey, WebAuthn
  • Federation
    • SSO approaches
  • Key Exchange approaches
  • Cipher maths / crypto
  • RNG maths / crypto
  • Provable design approaches

Data Stores

  • TIDB
    • Global DB with CDC streaming for PUB SUB feeds upstream
  • Bleve 
    • Faceted search systems
  • Minio
    • Blob storage with CDC via NATS notifications.

CI / CD / Ops

  • Kubernetes
    • Self running
    • BLue / green
    • API Versioning.
  • Docker Registries
  • Metrics, Logging, Tracing
  • Gitops experience using the WeaveWorks CD

Patterns

-----------

If you know everything that is explained above then you’re a good fit, as long as you can also understand the things below.

Synchronisation over unreliable networks

  • General techniques for eventual consistency and CAP Theory. CRDT lets us have our cake and eat it too ?
  • Linearizability

Security Principles 

  • You just need the architectural understanding not the maths.
  • CRDT, Lamport vector clocks, Markel Trees, and other fun Time/Space domain problems understanding. 

CQRS 

  • Understand the relationships of PUB SUB, CDC, Domain Model to Topic mapping.
  • KV, SQL and binlogs.

DRY

  • We are not reinventing the wheel and the code can not bloat as we do not have time to make reams of technical debt. It's important to be focused and not go down blind alleys.
  • Targeted use of libraries in a lean and correct way approach.
  • Good architectural practices.

Technology stack

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

  • 100% golang and flutter
  • Web, Desktop and Mobiles.

LIbs

------

  • Pion WebRTC
    • Encoders / decoders
  • GRPC
    • API’s are king. We use GRPC everywhere we can so that we have strong typing, schema evolution for free and can move fast and break things. 
  • NATS Message Queue / LIftBridge
    • PUB SUB - If you don’t have it is easy to learn.
  • Wireguard VPN
    • Understanding of Networking aspects. 
  • IPFS / LibP2P
    • Textile IPFS is one of the libs we are experimenting with. The New Threads paper 8 above) looks very promising and builds on the hard earned shoulders of Martin Kleppmann’s “Turning a database inside out” (https://www.confluent.io/blog/turning-the-database-inside-out-with-apache-samza/) and Automerge CRDT from Cambridge UK.
  • Gomobile
    • Most of the code is going to run on the Client. Server code btw is a generalised PAAS stack for SQL, CDC, PUB SUB.
  • Mobile and desktop packaging
    • We need a background and foreground service using IPC.
  • Flutter
    • Useful as this is the GUI layer but not at all a problem if you have never touched it.
  • TIDB
    • Global DB with CDC streaming for PUB SUB feeds upstream
  • BLeve related faceted search systems
    • Faceted search
  • Minio
    • BLob storage with CDC via NATS notifications.
  • Kubernetes / Docker
    • Understanding of OPS / SRE principles.
    • Gitops experience using the WeaveWorks tooling is nice to have.
    • We need a self running / scaling system can handle feature flagging and blue green rolling deployments.

How to apply

To apply follow this link to the application form: https://forms.gle/ctDRvJ1pGkt5XMhA7

Does this job really require Go skills? If not, please let us know so that we can keep the jobs all about Go.