Stellarium: Software which renders realistic skies in real time
github.com
github.com
Now, what impressed me: I didn't explore it much but it gave me a very good impression of the code. I could find what I needed to change and someone else, without talking to me about it had the exact same idea. The changes were EXACTLY the same. I can only think this code is extremely high quality. It seems to be a standard developers should aim for.
Too often developers measure code quality by applying personal subjective measures, like number of lines per method, DRY or choice of programming language and start making major refactoring based on personal preferences.
If someone without knowledge of the code can swoop in and make meaningful changes, it does not matter how many lines of code there is or if it is built with X or Y. It's the end result that matters.
How hard is it for a developer make this particular change?
And I mean literally observe this up close: navigating the directory structure, reading the docs, typing the code, running the app to check if everything works as expected.
Was it easy? What can change about the code, tests, docs, etc so future changes can be easier?
That's what really matters. Other measures are just proxies to the above analysis.
Honestly, my work place is filled with inexperienced people who have decided what the right approach should be. I'm older and more experienced than most and have learned that I can't win all battles, and bite my tongue when I see them making bad decisions. It's a form of age discrimination where even the management thinks that "young people see problems with fresh eyes". I don't want to come across as an "ok boomer" developer stuck in their old ways. "Rewrite everything in the new untested framework? Sure why not. The code is over 2 years old, so it's full of crusty legacy code".
I may seem a bit bitter in my comments, but I'm mostly disillusioned and are trying to see it as a learning experience. I'll give my opinion sometimes, and if they don't follow it it's not my problem. They will just need to learn the hard way and will probably end up in my situation in a few years.
I'm just collecting my pay check and planning to move on to a work place with more balanced demographics.
What I do see every day is "oh yeah, this method / file is pretty big, lets add one more thing to it anyways, I dont have time to refactor", and things grow and grow out of control.
I think one basic, and yet rare ability of a professional software engineer, and the skill that should separate you from a hobby programmer, is writing your code in a way which can scale and grow. The strategy for this cannot just be "let me put everything in one file, class, method and lets just see what happens".
That can be an OK first draft approach, but there needs to be a second step. And ultimately, if you set the architectural pattern of "big hairball", everyone else will happily follow it since its not their fault the architecture is like that - they are just adding one more thing. That can be OK for a first draft, but you will have to go back and introduce architecture and modularity at some point, or watch the project collapse under the weight of its own mess.
Once you see enough of those failures, you can start sensing basic patterns for introducing modularity, boundaries and structure to a project, to its modules, and to its classes and methods. As you keep flexing that muscle, in my experience, the "this code is best written as a huge single method" approach basically never seems like a good idea anymore.
But, of course, even more ideally, you can 1. choose a language and 2. architect your project in such a way, that you don't even need any DSLs in order to accomplish that. :)
Usually you need to have your data model right, and all else follows more easily.
"The building of the program is the same as the building of the theory of it by and in the team of programmers"
But I bring up choice of (programming) language as an issue, because in many languages, once you need to operationalize your codebase — make it efficient and scalable, optimizing it with respect to real use in the field, then you'll begin to need things like:
• static data in user-defined complex data structures (incl. ones like graphs with cycles) burned into the program at compile time
• memoization / dynamic programming caches to accelerate costly computations of otherwise-pure functions, esp. for computations done to instances of data structures but where the memoization only helps if done globally across all data structures
• ADTs that are actually implemented in terms of multiple different underlying data structures depending on the properties of the data itself; where, upon mutation of the data, the implementation — and thus the representation of the data — can be swapped out transparently (think: lists in CPython; or Integers vs BigIntegers in Ruby; or most data structures in Redis with their "ziplist" variants)
...and so forth; then often the language will start actively fighting you, as the language has been designed to do everything at runtime; and especially has no consideration for mixing compile-time, runtime-memoized, and runtime-pure sourced data using the same set of algorithms. So you have to write two or three different implementations of the same code, and store your static data in special ways, and mess up your ADTs with indirections, and your data structure constructors with heuristics, and define global caches where much of your data actually lives, turning your concrete modules inside out and making it very hard to reason about them... and so on.
This all gets fixed if you define a DSL. You're basically turning all of the above operationalized logic, into just an opaque "platform" runtime. But you still do have to maintain that "platform."
But some programming languages are already essentially such an operationalized "platform" runtime! Though, such languages are almost always only operationalized for specific use-cases. They're not quite domain-specific languages (insofar as a domain is a vertical); but they are always extremely "opinionated" languages.
But then I ended up not using it, because I use a tiling WM so I rarely see my desktop anyway lol. It's at https://github.com/Arnavion/sway-wallpaper-stellarium if anyone wants to use it.
I need this before I screenshare into my next Teams call...
Automatically wasting space sounds less attractive...
It's my software of choice for setting up my DIY astrophotography rig.
With regards to using it for 3d printing - I don't recall again using any specific resources for this, but the main thing was figuring out tolerances and fit for parts. Again, use test models and print small test parts to see what works on your printer. Fusion's parameters can help here, as you can set up variables for tolerances/spacings and update them after the fact.
Graphics performance and quality in browsers has improved so much in the last decade.
Sure it wouldn't be as perfectly accurate as a custom shader for rendering accurately rendering each pixel of a spherical skybox, but it would certainly be good enough.
Though it was a bit of a shock in an/the Arabic sky culture to find one of their constellations called "Woman chained to a post"!
Welcome to mythology, no need to portray this as a uniquely Arabic horror.
https://en.wikipedia.org/wiki/Andromeda_Chained_to_the_Rocks
I'll edit into this comment a link to the texture files if I can, but the game uses compressed (ktx I think) textures since the star textures are large resolution, one of the largest game assets!
I picked a particular date, time, and place on earth for rendering the sky in Stellarium. It also had options for seeing (clarity) and which features to show, such as planets or space debris.
Dread Lord Phlux, HellFire Guild - Napa Shard. (and others) have tons of stories)
-
Would be interesting to grab the openGIS point maps of that section of colorado and make that the mesh - since your doing Stellarium for the sky.
There is also that guy that made the tool to grab the 3D tiles from google earth for converting to meshes...
Screenshot of how it looks in-game, this is Stellarium-generated and shown as a KTX texture on a 6-sided skybox: https://i.imgur.com/bkW2CXX.png
https://github.com/jasonincanada/stellarium-scripts/blob/mas...
"Waiting for the space station." (and other satellites, but those are harder to see)
"I didn't know it was still a thing."
It started as a little dot on the horizon, barely visible in the hazy light from the city, then built to a blinding light above. I heard a "holy fuck" so I guess they were suitably wowed.
The last one I be tried to look for would have been perfect. It was supposed to happen on a friend's wedding night. It happened but was thoroughly unimpressive. I found out soon after the satellites were in the process of being decommissioned and flares were no longer happening as predicted. By now they're all gone and we just get boring objects like the Starlink satellites.
In a big city with an airport a moving light in the sky is almost always a jet at high altitude.
But with nearly zero flights, it was more likely to be a satellite or the space station.
All it implies is: you can get the source code, so if you don’t like the official App Store version you’re more than welcome to build your own.
As I said, don’t mind here and there… it’s helpful. But nag me and get replaced.
It used to be packaged and readily available in most distros, now it is not. I wonder what's that about.
You can zoom out and see the local group and Virgo supercluster.
Back in the late 2000s, Celestia was certainly an amazing experience for me. I see there’s a mobile version now, which makes me happy. It works pretty well on my iPhone, although the UX is not perfect.
HDR Projectors are also a thing now: https://youtu.be/iFJsEfWsTd4?t=852
Stellarium does have an android app but its a fraction of the desktop app functionally.
Stellarium 1.0 - https://news.ycombinator.com/item?id=33050270 - Oct 2022 (54 comments)
Stellarium v.022 Released - https://news.ycombinator.com/item?id=30820367 - March 2022 (4 comments)
Stellarium - https://news.ycombinator.com/item?id=30574809 - March 2022 (31 comments)
Stellarium: A free open-source planetarium for your computer - https://news.ycombinator.com/item?id=20901358 - Sept 2019 (56 comments)
Stellarium 0.19 - https://news.ycombinator.com/item?id=19513222 - March 2019 (33 comments)
Stellarium Web: Online Planetarium - https://news.ycombinator.com/item?id=17906113 - Sept 2018 (48 comments)
As soon as I went home I downloaded them both and spent hours visiting stars in Celestia and exploring the sky in Stellarium. It’s great to see they are still quite active.
There was another free software program that I thought of as a companion to Stellarium that let you fly through space. It used logarithmic scales for everything to make it manageable and really gave you an idea of the vastness of space. But I can't remember the name of it nor has searching brought it up.
I'm hoping somebody here knows what I'm talking about.
For all my projects, I use the Swiss Ephemeris[0]. Their commandline swetest will give you the data you're after.
Some of the icebreaker questions:
Does the moon set? Do stars rise and set?
brew install stellarium
I love it when it works!
> The largest [catalogue] is being compiled from the spacecraft Gaia and thus far has over a billion stars.
I think you'd have to go out of your way to "know" a large number of stars without having some equivalent of a label to keep track of them.
The Gaia ones (which is the billion star catalogue) look like `Gaia DR3 1827256624493300096`; the number basically contains the rough coordinates of the star as a HEALPix index (along with some other data) so it's not really human readable, but is perhaps more suited for a survey with billions of sources.
Ironically, the Gaia catalogue is incomplete at the brighter end (very bright stars like Betelgeuse for example are not in the catalogue at all) so still needs to be supplemented by other catalogues (and can't be used as a single source of truth to which all other catalogues are cross-matched for example)
(Version 0.00000001 of it, that is! <g> :-) <g>)
I could also google “stellarium project images” but I think my point is that I would expect projects to be as explicit as possible about “this is what we make.”
here ya go:
So many project fail at this.
I likely skip over repos with no screenshot much more.
How do you do it?
They also include a contributor guide so I can see how hackable some project I'm using is.
I also prefer to use projects I wouldn't hate hacking on if forced to. So a PHP project has a much higher bar than aHaskell project.
Github and other forges easily allow this approach.
That's why I was asking, why would you actively search for projects? To consider contributing or just out of curiosity?
The idea is to help people understand the project. Not to give them an investigation task. I don’t know the structure of that web site or if there are even images there.
I’m not heartbroken because of this gap, I’m just confused why they wouldn’t want to add these docs to help users.
Here's the screenshots: https://stellarium.org/screenshots.html
You could probably become a very prolific contributor just by adding a screenshot to every such repo you come across.
You cannot have "one information, one music, one software" -- those words are mass nouns, or can be used as adjectives.