Replit now supports every programming language in Nix(blog.replit.com) |
Replit now supports every programming language in Nix(blog.replit.com) |
Is there a simple English explanation for how Nix does this?
You can hash these build descriptions themselves, and that hash is available to you before you start building. So the hash of that glibc description is 98765432 - which includes the hash of the tarball. So you install glibc into /nix/store/98765432-glibc-2.30. (The name and version there are just for human convenience.) Then, when you install Python, you point it at the glibc in that directory and build it into e.g. /nix/store/aaaabbbb-python-3.9.
If anything changes - tarball hashes, build steps, dependencies - the Nix hashes of everything affected also change. So the two versions, with and without the change, can be installed side by side.
There are separate mechanisms in Nix to do things like get the hash of the "current" version of Python and put it on your PATH.
(The downside is that Nix does not make use of the ordinary dynamic-library behavior where you can upgrade OpenSSL without recompiling Python. It does use dynamic linking, but it always points at exact paths and the thing being pointed to never changes versions. But there are good reasons to prefer this anyway, and the only downside is compilation time, and computers have gotten a lot faster since Linux distros and dynamic linking itself were originally designed.)
https://replit.com/talk/ask/Where-can-I-contact-technical-su...
https://replit.com/talk/ask/How-to-change-username/7326/1894...
Here's what paying customers see when they press on the "Get help" button: https://imgur.com/a/9U8WGme
> Check documentation
> Ask the community
> Request a feature
> Check out recent updates and changes
> Report a bug
Funny enough this company should come up since earlier today I tried to reach out to them over Twitter. Just crickets so far.
I get being a startup and all is hard, but if you're taking customers money and the only way to get help is community forums, that's pretty inexcusable.
EDIT: They've responded to me via Twitter now. I really like the Replit product and I think it's pretty innovative. I've commented about it on HN before in a positive light. It's unfortunate they haven't given as much attention to their customer support and that I had to post something negative here to get attention. I do hope they make a change. It would be a net benefit for their customers and their brand overall.
In this case, it was a technical issue -- we're still trying to understand what and why it happened but GMail automatically trashed your email and so Front didn't assign it to our support staff.
Here is a screenshot from Front: https://imgur.com/a/POb5hEE
Nonetheless this is good feedback and we'll do better in the future and make it easier to contact us from the site.
Maybe if customer support is important to you you should consider not using a notoriously unreliable email service.
Appreciate you reaching out to us and being patient. Our average response time is under a day, but it looks like your emails were being archived before reaching our shared inbox. Either way this is on us and we are looking into why it was the emails never got to us as well as the issue you reported. I have also responded on the email, so will continue the conversation there.
If you (or anyone else) does not hear back from us after reaching out feel free to add urgent to the subject line or cc me obaida@replit.com to the email and I will make sure we get to it.
Thank you!
If you use an HTTP server it will automatically route whatever port you opened to 443 on its own replit.co subdomain. If you use a program with an X11 context, replit will automatically detect that and render it in its own in-page visual context; plus they allow VNC connections to that environment via NoVNC. They have an HTTP API that allows repl-instance-specific persistent storage.
I'm not a paying customer or an employee or anything but I gotta say they're pretty innovative. (I will agree with others that the documentation IS definitely their weakest point, but that in part because they have so many features.)
Typically, though, the number of times I'm setting up a computer so that I can work on it is best measured in "x times per year". For that case, it's harder to argue that Nix is worth spending the time compared to just slowly setting up each computer manually.
I think in this case, each user being able to use an ephemeral environment and quickly set up a familiar environment is where use of Nix seems much nicer than alternatives.
Actually that’s an even better justification for using NIx instead of slowly setting up each computer manually.
If you’re setting up a new computer every week, or even every month, you tend to remember all the packages, configs, and tweaks you need just from frequently doing it.
But if you need to set up a computer once a year, you forgot all that stuff, making it even more valuable to have it all scripted in a deterministic build.
This blog post “Erase Your Darlings” discusses this issue, along with a really interesting solution to it:
But with Nix that becomes much less of an issue.
However, we are reverting that change for now since we don't offer a good way to access those files yet. I'll reply here once they are visible again.
A bit difficult to experiment with though, as it is one of the "GitHub-only" tools :/
I used to easily add a sidecar container to my k8s workload, with the tools I need, without having to maintain a dockerfile and setup an automation to build the container.
I had to do a fair bit of work to get anything but node running on Glitch, and since then it seems like the performance limits and startup time have gotten a lot worse, making it more and more painful to use. I have an Elm framework for slideshows I use there, and was constantly frustrated by my editor timing out every time I alt-tabbed and taking ages to reload.
Edit: Searching for Vue, I mostly find Vue.js. Since you said programming language, are you talking about what seems to be an esoteric language for programming probe traces on an AIX? https://www.ibm.com/docs/en/aix/7.2?topic=concepts-vue-progr...
As for Nuxt, I again find a framework Nuxt.js, based on Vue.js. I can’t even find a programming language called this.
So… are you in fact talking about JavaScript frameworks?
The ambiguity versus "*nix" as shorthand for Linux/Unix is unfortunate, but here we are. :)
attempt 1) I was able to import a Racket app from Github, added a similar nix config to it as described in the docs, but it would not run as it says nix-shell is not present. Apparently a repl needs to be blessed some how as a Nix instance to work, but there's no option to select that when importing or creating a repl. URL: https://replit.com/@jarcane/RantStack
attempt 2) Next I tried just forking your template, and literally just copy-pasting the code from my app (it's a single file anyway) into the main.rkt. This runs the app ... but I can't actually access it, because apparently the ports aren't being forwarded. Going to the URL as described in the repl.it docs just gives me an eternal "Repl waking up" screen that loads forever, but never resolves. URL: https://replit.com/@jarcane/racket
Maybe someone will come along and make the graphics for Racket work the same way i3 works (which is really cool).
edit: It looks like my information might be out of date as it appears gnat is back in Nixpkgs. That's great news, although I think the point regarding complexity still stands, since I believe it was broken for quite a while at some point, and broke a few times since too.
Piet: https://search.nixos.org/packages?channel=unstable&show=hask...
We will be expanding our collection of templates over time, but Nix allows us to make language setup be a user-space concern instead of us internally maintaining a collection of languages configurations and docker images.
When LFortran is ready, it would be nice if you supported it too, since it is a Fortran REPL.
pkgs.nix
for pkgs.gfortran
then changing the `.replit` file to compile and run a hello world example I found online. Worked great!- Building takes space, but the build takes place in a temporary directory that is discarded afterwards, and only the output artifacts are kept.
- ~Normal software is usually served pre-built from a cache, which short-circuits the above as long as the package is available from the cache.
- One of the nicer things about the process Nix uses here is that it's also tracking what's ~in-use (via "GC roots"), and you can trivially garbage-collect everything in /nix/store that isn't.
- On macOS I use Nix for just about everything that isn't a desktop app. My /nix mount had 9.7G used when you asked this question, and 3.6G after I garbage-collected, and 7.1G after I re-built the dev environment for a server project.
- The ~3.4G I mentioned above is a really big fraction of my total, but as a reference point, Nix is natively replacing, in ~3.4G, the Vagrant/virtualbox VM I used to need for this development.
- In my experience, the only time I'd describe the storage load as "a lot" is when I've been iterating on something that is fairly large. This can add up as the store accumulates slightly-different copies, but these can be readily GCed.
- Multiple versions of something (say, multiple different pythons or rubies or llvms) will consume more space, but the ~Nix way also makes it possible to avoid vendoring. At system scale I would _guess_ these are a wash?
- At least when you're using Nixpkgs, "multiple versions" generally just means a few major/minor version variants of common dependencies (i.e., at a single commit, most things in Nixpkgs that use Python 3.7 reference the same build).
Anyway I wanted to also to make comment to GPs explanation. What is written, is how Nix is currently addressing each package (it's a hash computed based on source code, dependencies, system, compile options etc).
In many cases different options or change in source files can still produce the same exact package, but under a new hash. Nix has an optimise-store command that scans its store and if two packages have exact same result it uses hard links. That similarly can be run via schedule. This ensures that duplicates do not occupy extra space.
Though in context of nix, what is referred as content addressed is the new way Nix planning to address the package. Instead of computing hash from package and its dependencies it computes hash based on the package's contents. That solves many problems with the old way, but of course question is how is it done, because it kind of is impossible to get hash of something that you did not produce yet. Of course like everything of this kind, it's possible to do if you cheat a bit. Package is first compiled with a dummy paths, then hashed, then references to those paths are substituted.
Here's more about [1].
Having said that, in the blog article when they use "content addressable" it looks like they still meant the current way of doing it (it looks like proper term is input-addressable), not the new way, but if you search "nix content addressable" you are likely find articles about the new way and things might get confusing.
When hosting a web server, your app must listen on 0.0.0.0, adding that to your repl seems to make that work. I will make sure that is in our docs for web hosting.
Working Racket web app: https://replit.com/@ConnorBrewster/racket-server
Also played a bit with the Glitch import on an Elm import but found it broke npm in weird ways (something about a file being moved but not found?), but then the Github import of the same project wouldn't work either because of Node version incompatibilities that don't seem to be repl.it's fault exactly other than just "it runs node 12 and some stuff is broke on node 12".
Does look promising otherwise though, with the Nix support I can see soooo many things being possible that simply weren't on other similar options like this.
The things I read on this forum
For a company that prides itself in customer service, I don't see any other way but to run their own email exchange (ala Amazon) because their private systems can then discern between email-ids of paying customers and spam, if nothing else.
Managed services make sense in many cases and dismissing them isn't always a good idea if that's done so easily, without further consideration.
In my experience, any ticketing system will be a huge improvement over using a shared gmail inbox for support.