Comment j'ai fait décoller mon projet perso

Une app Web et desktop cross-platform

Foucauld Degeorges

@foucdeg

foucdeg

/FoucauldDegeorges

Architecte-développeur

Passioné d'aéronautique

X-Plane

La carte par défaut d'X-Plane

Schéma d'architecture

UDP

HTTP

PC de l'utilisateur

Front en React

Serveur en NodeJS

Airspaces

Electron

Fonctionnement d'Electron

Main process

Renderer process

IPC

  • "Client"
  • Page Web dans un Chromium
  • "Serveur" NodeJS
  • API système (FS, réseau ...)

HTTP

Le tout buildé dans une application Windows, Linux, Mac !

Sécurité

GateKeeper / Windows Defender effraient mon utilisateur et l'empêchent d'utiliser mon application sans manipulation de contournement.

 

100 € / an

150 € / an

Typescript

Écueil 1 : comment ajouter Typescript à son projet

  • Mettre en place Typescript sur du code existant

vs

  • Prendre un boilerplate Typescript
  • Migrer les fichiers un par un

Écueil 2 : Comment typer sa donnée

Un de mes objets JS, correctement typé ...

export interface Aircraft {
  name: string;
  position?: Position;
  altitude?: number;
  icon: string;
  speed?: number;
  heading?: number;
  isTraceActive: boolean;
  path: Position[];
  identifier: string;
}

Écueil 2 : Comment typer sa donnée

L'optimiste

Le pessimiste

export interface Aircraft {
  name: string;
  position: Position;
  altitude: number;
  icon: string;
  speed: number;
  heading: number;
  isTraceActive: boolean;
  path: Position[];
  identifier: string;
}
export interface Aircraft {
  name?: string;
  position?: Position;
  altitude?: number;
  icon?: string;
  speed?: number;
  heading?: number;
  isTraceActive?: boolean;
  path?: Position[];
  identifier?: string;
}
  • Rapide
  • Prévient les typos ou problèmes de noms
  • Ne prévient pas les "cannot read property XXX of undefined"
  • Prévient tous les bugs
  • Fait ajouter des if inutiles (complexité)
  • Plus long

Maintainer experience

Maintainer experience

  • Sur un projet perso, on n'est pas motivé à faire les tâches moins intéressantes
  • Pourtant elles sont nécessaires ...
  • Les automatiser, c'est intéressant !

Builds

  • Builder moi-même sur plusieurs PC ? 🥵
  • Travis CI (Mac, Linux) + Appveyor (Windows)
  • Artifacts dans une draft release Github

Site

  • Mettre à jour moi-même le site à chaque release ? 🥵
  • Github Pages
  • Langage Jekyll, variables issues de Github
  • Liens de téléchargement + "changelog"
  • Google Analytics

Version online

  • Investiguer les problèmes de firewall des gens ? 🥵
  • Centraliser le serveur
  • Simplifier le code
  • Plus de certificats à payer

Airspace(s)

  • Plus possible d'avoir une  "room" mulitjoueur ? 😥
  • Si, avec plusieurs Docker et sous-domaines !

5 € / mois seulement 👍

Freemium ou donationware ?

  • Payer le serveur sans gagner d'argent ? 😕
  • En freemium, l'utilisateur premium attend un service, une garantie, un SLA ...
  • Le maigre gain n'incite pas à avoir cette disponibilité

Donc ?

  • Donationware : Paypal / Patreon
  • Beerware 🍺

Merci ! 😊 

Evolution de la stack

Jan 15

Fév 15

Août 17

Oct 18

Wamp

jQuery

GMaps

Java

jQuery

GMaps

Electron

React

Leaflet

Node / Electron

React

Typescript

Leaflet

Docker

ParisJS - Comment j'ai fait décoller mon projet perso

By Foucauld Degeorges

ParisJS - Comment j'ai fait décoller mon projet perso

  • 650