fxbox / rfc Goto Github PK
View Code? Open in Web Editor NEWDiscussion about design decisions
Discussion about design decisions
The definitions of ChannelType
, Value
, Type
are currently centralized in the Taxonomy. This places a heavy maintenance burden on that repo and complicates extensibility.
How can we decentralize them?
For reference, here is the current code: https://github.com/fxbox/foxbox/blob/998b6e0e1e1fd3cba3b711783eaa7000c2f66a0d/src/adapters/mod.rs#L61-L69
Basically we unwrap
on any error. Some adapters are not returning an Error for some errors because of this.
The end-user can't see panics because his only access is through a web browser. So we need another way to log the error instead and let the user act on it (especially we might need to be able to restart the foxbox from the browser -- but this is for another issue, I think).
First tentative solution:
Second tentative solution:
We don't need a decoupled RFC repository. Few people "watch" this repository for changes (2, as of this writing), making it necessary to broadcast RFCs elsewhere. I don't see how this is any better, or as good as, posting GitHub issues in appropriate repositories.
We need to work out how the client discovers the Box.
Terminology:
Box: The box being developed in Project Link
QR: Use a QR-code on a sticker on the Box to tell the client which URL connect to
mDNS: The Box uses mDNS to tell the client its IP address and/or its full URL
HSS: The client checks the TLS certificate against the fingerprint in the trusted URL string
plex: A public DNS zone is used to announce the Box's local IP address
LE: LetsEncrypt is used to register/renew a TLS certificate for the public plex-like domain name
NUPNP: A server on which the Box can publish its local IP address so that the client can discover it
Cordova: A tool for packaging web apps a native apps, with plugins for adding custom functionality that is usually not available in browsers.
client: A smartphone, tablet, laptop, or TV.
Assumptions:
Currently we manage configuration using a ConfigService that takes its values either from the command line and/or a configuration file.
But we'll want to expose configurations to the user through a web interface. Moreover some configuration might be dynamic (eg: door lock's codes, which luminosities mean day and night). So it would be better to expose them through the Getter/Setter (or whatever we come up with the decentralised taxonomy) with a special type: Config (a normal Getter/Setter could have a type User). Maybe the type could be a Tag instead.
For example, I need a String getter/setter to get/set the camera_name, username, and password, and it seems kind of lame that I need to create Extensions to do this.
Perhaps we can have a simple extension kind that is just a JSON object?
Why do we need a vendor for custom kinds and not for OnOff?
The Box will be accessible through the local network (when you're at home, or in the building where the Box is installed), as well as remotely (when you are away from home / not in the building where the Box is installed).
When connecting to the Box over the local network, all functionality (except maybe factory reset, which could be a physical button on the Box), would be accessible to users with sufficient permissions (there is always at least one admin user, who has all permissions).
Remote access can be activated or disactivated. Whether it should be activated automatically during first-use (opt-out), or should only be activated if the user wants it to (opt-in) is a separate topic of discussion, we're not discussing that here.
The question here is: when remote access is activated, and a user is connected remotely (via the Bridge), should the accessible functionality be:
Or:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.