Discussion ICARUS Terminal (Pre-Release)

I did see the chrome workaround; have you found a way for this Icarus to open on a 2nd monitor and stay there in full screen mode as a default behaviour, or via options.
This has been answered in lots of detail a few times now in this thread, as I've said above.

The software is open source you can find the code here if you would like to see more about what's involved in getting this to work. There is even a link to the Win32 documentation and I think a reference implementation if you fancy reading that.

As it's not a lot of fun to work on as a feature - and given you can just click the URL as I've said and it's the same UI (a headless browser with the Edge Chromium based renderer that is build it to Windows is all ICARUS Terminal is doing) - it's pretty low on the list of things I want to spend my free time doing, but if someone else want's to finish that feature off I'll happy merge in a patch.
 
This is not very exciting right now, but I thought I'd share progress on how adding services are going for folks who like boring updates with stats.

Current Progress

Development can be slow going as building a new indexed DB from raw data can take a long time (hours to import and create the data) as there are millions of datapoints and indexing it all in a performant way is just a bit slow after the first few million systems, and I've had to rebuild the index from scratch a few times (locally and in the cloud) to experiment with different approaches to indexing the data in a way that is highly performant, scalable to query and going to be reasonably cheap to run.

Data for Systems, Stations, Trade, Exploration are all stored in different data stores, to support the best balance of performance and being able to run cost effectively (I don't mind spending a few credits but I'm only willing to do it at all if I can do it reasonably cheaply). This turns out to work really well for how data works in Elite Dangerous and the sorts of queries players make - and is also necessary to make queries performance - but requires a little upfront planning and testing that the integrations are right (it's okay if they aren't, it's just slow and annoying to redo work.

The most fun thing was testing different ways to slice up the galaxy to make queries performant. I ended up splitting the galaxy into 'sectors' 100 Ly across (effectively cubes along XYZ axis) to make it much faster to run complex arbitrary queries. Splitting into even smaller chunks has some benefits but also some trade offs and hasn't felt worth it.

Service Stats

Using an import of the >77 million systems in the EDSM data dump to kick start things (with additional new data recorded directly from EDDN as it is logged) and collecting Commodity / Trade data from EDDN directly, I've been running the system for a while and tweaking the software, configuration and hardware. I'm very confident at this rate that the system could tick over happily for the next decade at the current capacity.

There are currently only about 1 million commodities in the trade database. I have had to build this myself as you can't get an export of this data from anywhere else (e.g. INARA doesn't share it). I did have a much larger commodity database but I had to reset that DB last week and didn't bother to preserve the old data as it wasn't worth the time and effort at this stage.

It grows again pretty quickly as players dock at stations, megaships, etc and the old data isn't as useful anyway so I'm not too worried about having restarted the collection process for it, it will take about a month or so to get it all populated (and data from > 48 hours is often not super reliable anyway, although knowing what sort of commodities are likely to be in demand is handy).

Performance

This is an example of how long it takes to do a typical set of queries but in a 200 Ly radius around Sol (a distance which covers about the entire bubble):

Get system location information: 0.159ms
Count number of known systems in galaxy: 527.151ms
Count number of trade commodities: 23.34ms
Find a specific commodity on nearby markets: 51.908ms
Find all nearby systems: 5.286s
Test data: {
originAndDistance: { distance: 200, systemName: 'Sol', x: 0, y: 0, z: 0 },
systemAddress: 10477373803,
systemName: 'Sol',
systemX: 0,
systemY: 0,
systemZ: 0,
systemXGrid: 0,
systemYGrid: 0,
systemZGrid: 0,
source: 'ESDM',
updatedAt: '2019-01-21T02:11:52.000Z'
},
totalKnownSystemsInGalax: '77,250,773',
totalCommodities: '1,098,836',
instancesOfSpecificCommodityOnNearbyMarkets: '3,663',
numberOfNearbySystemsFound: '56,629'
}

Simple queries like getting system location take less than a millisecond. Getting more useful information like commodity data takes about 0.05 of a second. The only query in the examples above that is not a sub-second query is 'Find all nearby systems' which is rather extreme, as it is returning data for 56,629 systems (note: it is not just counting them, it is actually returning useful data for them!). This sort of query scales interestingly with distance.

e.g.
  • if you ask for the same data in a 50 Ly radius it will find 1,000-2,000 systems and will take 1-2 seconds
  • if you ask for the same data in a 500 Ly radius it will fetch over 500,000 systems and that takes 10-15 seconds
This isn't actually a super useful query but I just point it out it's fun to make it possible to do queries like this at all. In reality most useful queries are either very targeted (e.g. commodities, services, stations, system states, etc) and those are much quicker and all sub-second.

Even in the case of a large search of 500 Ly ICARUS Terminal it would still be able to fetch information about all nearby systems before you had even finished jumping to a location. In a lot of cases data can be prefetched and/or cached, so that even with lots of folks using it, it should happily scale. They way it's designed I can scale as much as I want, but I'm trying to avoid spending much on running costs (so that I can leave it running and ignore it) so am optimizing for fastest possible raw times, cost and scaling.

What's Next

More news on the web based front end (which folks can use instead of / as well as ICARUS) soon, probably in next 2-3 weeks.

Like ESDM does for map data (and unlike what some other sites do...) I'll be making all data available via an API and data dumps if anyone finds that useful.

Probably the data / API will be opened up first. Not sure if ICARUS Terminal integration or a website will come first after that.

I'm happy to share code (ICARUS is entirely open source and folks can clone it, of course), but it's not really sure for a service it's all that useful in isolation with out the infrastructure to run it on and it ends up slowing down development as it's a bit of a time sink to deal with support queries so I'll likely get round to that later once it's public in some form.
 
In a very unexciting update for most folks, I wanted to share an updates on how the service is going as I'm excited about it.

To try and make things even faster - partly because that means it's also cheaper to run as I can scale down the hardware - I changed how things are stored and instead of dividing the galaxy into a grid of 100 Ly squares (along all axis) I took a leaf out of geohashing approaches on earth, but applied to three dimensional space. After reading and experimentation (given what we know about the size of the galaxy and it's contents) I came up with a predictable hashing system that is big enough to chart the galaxy in a highly performant and scalable way.

This approach using "sectors" splits the all the known sectors visited so far into 6,483,928 sectors using IDs that are dynamically assigned based on the galactic XYZ position of the system - and it can grow to billions of sectors. Similar to way the game breaks down it's definition of "sectors" down internally into "boxels" that 128 Ly across, the sectors I'm using are 100 Ly cubes, but identified by a unique hex reference (e.g. Sol is in Sector "615ab77845adbef9") instead of a X, Y, Z grid reference, derived from the location of the sector.

The method I'm using is a bit less convoluted and doesn't have weird edge cases to consider, which the in-game system does due to manually placed entities (otherwise I'd just have used a similar method – but as it is there is no advantage to using the same method as the game, it would just be more complex for a case like this).

I also reset the galaxy data on top of a Spansh export, which includes over 100 million stars, making it even larger than the ESDM data (approx 77 million stars). The Spansh data is also much more expensive, especially around the Bubble so it returns a lot more results too (56,629 results for systems in a 200 Ly radius around Sol in the Spansh data compared to 38,921 systems in the same area in the EDDN data!)

The sector approach and other optimizations have improved query time for fetching nearby stars over 500 times, to the point it's now a single digit number of milliseconds to fetch all stars in a typically dense area the size of the entire Bubble.

The number of stars in a sector varies with density of the galaxy, somewhere like Sol it's around 1,455 stars per sector, whereas for around the center of the galaxy near Sagittarius A* there are 30,493 stars in the same sector. Querying for all the stars in the same sector as Sagittarius A* is a sub-second operation. Querying from an individual star in the known galaxy is a sub millisecond operation.

The new approach uses more disk space for these indexes, so I've been spending time optimizing that and on automation for backup/restore. There was a bit of complexity there due to the volume of data and how much of it comes through (and the constraints of running the service in the cloud on a budget) but I think I've ironed that out. It's likely the service will go offline for 5 minutes once a week for optimization, at the same time as Elite Dangerous itself is offline.

None of this is interesting feature development, but it's exciting for me as importing the system and faction data is fairly trivial in comparison and means it should be easy to unlock some useful functionality and fun mechanics.

Update:
Have ironed out the optimisation while active to avoid any downtime and improve some of the explanations above.
 
Last edited:
First off, thank you. I love this tool and your work is highly appreciated - I have a massive skill deficit here in this department.

I will apologise in advance if this question has been asked before. A little preamble - I am running the app on my desktop, the same as Elite but I don't seem to be able to get any telemetry data or system data to show up in the system Nav panel. Icarus recognises everything else - from the system I am in, my logs, to my ship config - it's all there, so in essence it reads the game log perfectly well. The only thing that doesn't display is the system information.

So my question is: What am I missing? ( I am quite confident i have overlooked something simple, so again please accept my apologies in advance).

Thanks to anyone who help point me in the right direction.

NoData1.PNG
Logdata2.PNG


*Edited to add image for clarity.
 
Last edited:
Did you use the fss to discover the 12 planets?
Thanks Alkibiades, I certainly did.

Data 3.PNG


Steps taken so far:

1. Run both as administrator
2. Restarted PC
3. Change startup order of Elite and Icarus
4. FSS in every system I enter, as well as a few DSS for good measure.
5. Clicked on the 'Connect from a browser' link on the home screen of Icarus - result is the same (imported X amount KB of data and XXX amount of log entries)

p.s. sorry for the edit
 
Last edited:
Ok. Next step: did you upload the data to edsm? The tool gets it from there. If you did this as well you ran into the same wall as me months ago. Sometimes it simply does not display system data.
 
Ok. Next step: did you upload the data to edsm? The tool gets it from there. If you did this as well you ran into the same wall as me months ago. Sometimes it simply does not display system data.
Thanks Alkibiades, I have just uploaded - I'll wait and see. It does look like I have run into the same wall as you! Will explore a couple of other options and update as data comes in :)
 
Thanks Alkibiades, I have just uploaded - I'll wait and see. It does look like I have run into the same wall as you! Will explore a couple of other options and update as data comes in :)
You got it!

The data started coming in after I uploaded to edsm, I also have ed observatory now running in the background which is updating edsm as I go.

Thanks for your help, you are an absolute legend! :)
 
Last edited:
You got it!

The data started coming in after I uploaded to edsm, I also have ed observatory now running in the background which is updating edsm as I go.

Thanks for your help, you are an absolute legend! :)
This is why I always run EDDiscovery in the background. It automatically submits everything as you go. I also use it to track how much credits worth of scan and exobiology data I have on hand as I go.

I also run Elite Observatory for all my exobiology information.

I've just started using Icarus Terminal as it's very, very cool looking. Presently though, it doesn't have the exobiology information I need, so I stick with Observatory for that.

But I do use Icarus to look at planet rings. I have a second monitor with all the apps on it and it's easier for me to just look at it, click the planet and see the ring types (to flag for mining if they're metallic) than it is to open the 1 panel, then the system panel, then the planet, then the planet data that it takes in Odyssey. Saves a BOATLOAD of time for that.

And did I mention it's a very cool looking app?
 
This is why I always run EDDiscovery in the background. It automatically submits everything as you go. I also use it to track how much credits worth of scan and exobiology data I have on hand as I go.

I also run Elite Observatory for all my exobiology information.

I've just started using Icarus Terminal as it's very, very cool looking. Presently though, it doesn't have the exobiology information I need, so I stick with Observatory for that.

But I do use Icarus to look at planet rings. I have a second monitor with all the apps on it and it's easier for me to just look at it, click the planet and see the ring types (to flag for mining if they're metallic) than it is to open the 1 panel, then the system panel, then the planet, then the planet data that it takes in Odyssey. Saves a BOATLOAD of time for that.

And did I mention it's a very cool looking app?

Thank you for the nice feedback, and for the details of the sorts of features you find useful in other tools.

I hope it has improved exobiology features in future (that is my #1 past time in game so I'm quite partial to improving it).
 
Hey, it's probably been suggested before, but could you intigrate some controls to the interface? There's already some switches on the ship interface that could be a good starting point for some HID keyboard emulation integration
 
Other than that, I find that very often starports are pictured next to the wrong planet,

Yeah this is super annoying and something I could only solve for by building a site like ardent-industry.com to collect data and track it over time.

I haven't done the work to do that integration yet, but the game isn't explicit about what bodies stations are orbiting so I had had to get creative to work out how to solve for it, and that required an always online service collecting data via EDDN. I'm hoping to see how well it works soon (TM).
 
Hey, it's probably been suggested before, but could you intigrate some controls to the interface? There's already some switches on the ship interface that could be a good starting point for some HID keyboard emulation integration
Hmm yeah I would love to get this released too. I got this feature mostly working but I had trouble with internationalization and with some key combinations (but when it worked, it worked great). Maybe it's worth releasing in an 'experimental' state and just letting folks enable it from settings.
 
While I'm here (hey it's been a minute!) I've just posted this update about what I've been doing with Ardent that folks might find relevant:
 
Yeah this is super annoying and something I could only solve for by building a site like ardent-industry.com to collect data and track it over time.

I haven't done the work to do that integration yet, but the game isn't explicit about what bodies stations are orbiting so I had had to get creative to work out how to solve for it, and that required an always online service collecting data via EDDN. I'm hoping to see how well it works soon (TM).
Hey, good to hear you are interested in this again :) You have by far the most beautiful extra screen interface! I hope the EDDN works out...
 
Back
Top Bottom