Just using strong typing to separate the notion of a "position" (looks like it's Cooordinate in sguaba's parlance) from a "vector" alone saves a lot of headaches in making illegal operations like adding two positions.
84 karma · joined October 13, 2016
Just using strong typing to separate the notion of a "position" (looks like it's Cooordinate in sguaba's parlance) from a "vector" alone saves a lot of headaches in making illegal operations like adding two positions.
In migrating from the ZSA Voyager to a 36-key keyboard (Chocofi) I've relied on combos as I don't like overloading keys with tap-versus-hold behavior as I can never get the timing down. For example my left index, middle, and ring finger mashed down on the home row (resting position) is escape in my current layout (Colemak mod DK which means keys R, S, and T). It's three fingers but hardly any extra effort. I've managed to do away with a symbol layer and have been quite happy with the result. If anyone is curious here is my "36-key training layout" for the ZSA Voyager [3] and my current Chocofi layout [4].
1: https://docs.qmk.fm/features/combo
2: https://zmk.dev/docs/keymaps/combos
3: https://configure.zsa.io/voyager/layouts/d7L0v/latest/0
4: https://github.com/vietjtnguyen/zmk-chocofi/blob/main/config...
To me the most useful feature was actually just the timeline view. Being able to see all of the events and telemetry updates from all agents and correlate them to some line plots was already a huge help. I think Rerun should actually make the timeline view just another "view" [0] so that I can have additional timeline views with specific filters. Seeing the discrete pips in the timeline for different events and channel updates is really helpful.
Also we already have infrastructure to log and for live telemetry streaming so we don't integrate with the SDK directly in the deployed software and instead just have an adaptation layer to take logs or live data and push it through the Rerun SDK. I generally feel it's better to separate the data generation and logging from the data visualization, though I could understand directly integrating the SDK as a fast solution if the infrastructure is not already there. I hope the use case as the data offload/logging for a system doesn't become a focus sink for the Rerun team.
That said, I do appreciate the simplicity of the Rerun SDK API design. At first I wanted to try Foxglove but it seems pretty tied to the supported formats (which we weren't outputting for heritage reasons) and my eyes glazed over when I saw how much work (I perceived) it would take to integrate with their custom websocket interface. This was all spare time exploration so I basically dropped it once I saw how much code there was in the example [1].
[0]: https://rerun.io/docs/reference/types/views
[1]: https://github.com/foxglove/ws-protocol/tree/main/python/src...
Slide 38 explicitly lists staffing challenges in GNC (guidance, navigation, and control), FSW (flight software), avionics, and systems engineer.
Slide 41 also talks about external factors: "...this has required the experienced cadre to be spread thin... the rise of the commercial space industry in recent years has resulted in competition for experienced personnel, particularly in the systems engineering, GNC, and FSW areas."
What took me a bit to grok at the start was how feedgnuplot's different flags change how it assigns semantic meaning to different data columns. So by default the first column is simply treated as data (y) while the implicit row index becomes the x axis. If you add --domain the first column becomes your domain (x) and the second column your data (y) allowing you to create a scatter plot. If you have multiple curves you can add --dataid with --domain which makes the first column x, the second column the id of the curve that point belongs to, and the third column the data itself (y). You can throw in more dimensions of visualization by mapping columns to colors, point size, or 3d.
Typing it out it sounds more complicated than it really is. Combined with vnlog to easily select columns and filter rows it becomes a really powerful command line tool set.
As to the SpaceX point. Yes, I think SpaceX is more efficient with their money than NASA, but this will boil down to a discussion of counterfactuals and degrees of "wastefulness". Was NASA wasteful? What does it mean to be wasteful? What's the threshold? What would it cost SpaceX to build the Mars Helicopter? Can we really compare a launch vehicle versus a tech demo of a rotorcraft operating on another planet? Would that $80M be better spent just funding SpaceX? I don't know. I just don't think it's fair to simply say "If it was made with off-the-shelf parts then it's a testament to how wasteful NASA has become". The engineering has to happen. Could NASA have been more efficient with it? Probably. Was it wasteful? I don't think so.
Like you, when approaching a new problem I like to nail down the terms we are discussing, literally scaffolding classes and types (in C++) as the problem is being discussed. It drives the adoption of unambiguous terms. Then as solutions are discussed the "ubiquitous language" helps clearly identify the interactions between types.
#pragma once
#ifdef __cpluspus // <-- should be __cplusplus
extern "C" {
#endif
#include "api_types.h"
// ...
#ifdef __cplusplus
}
#endif
Can't say I'm a fan of OMG-CODEORG-3, however, it sounds like compilation time is a key metric for them.. I prefer a John Lakos style "physical components" set up which emulates a type-as-module inclusion style. At least OMG-CODEORG-3 clearly states that include order becomes important as a result.Here's a silly example:
cde python -c "import numpy as np; print(np.random.randn(3, 3).tolist())"
pushd cde-package/cde-root/; tar cavf ../../cde-image.tar *; popd
docker import cde-image.tar $USER:python-randn33
docker run $USER:python-randn33 python -c "import numpy as np; print(np.random.randn(3, 3).tolist())"
docker run -t -i $USER:python-randn33 python
If you look at the resulting "cde-image.tar" you'll find it to be quite bare. Mines had only 387 entries (files and folders).[1]: http://www.pgbovine.net/cde.html
[2]: http://pgbovine.net/automatically-create-docker-images.htm