Hacker Newsnew | past | comments | ask | show | jobs | submit | jamieson-becker's commentslogin

At Userify (https://userify.com), we offer a free tier for SSH key and user management for up to 20 servers free (billing doesn't begin until 21 servers) with our SaaS offering (versus 10 free for our on-premise product). Try it out at https://userify.com, no credit card required.


Nim is an amazing language. The syntax is cleaner (IMO) and easier-to-read than Go and approaches Python in its readability, which is impressive for a statically typed, compiled language[0]. The design is focused on performance above all else, but it still has metaprogramming[1] and functional features.

However, Go and other languages have a huge ecosystem and many more libraries. Nim only has a few web servers/frameworks, for example. Even if Nim's web frameworks/servers (like httpbeast) are quite fast[2], they lack the completeness that exist for other languages.

Until then, if you are looking for a systems programming language, you owe it to yourself to investigate Nim[3], alongside Go, Crystal, Julia, D, Rust, Haskell, etc. The tooling is fantastic and the Nim compiler produces clean, cross-platform C code (or JS[4]!) that can be automatically fed into gcc, clang, mingw-w64, etc. It's a language that's undergoing rapid changes, but almost all of the changes are in the libraries and it's exciting to see all of the innovation there -- and as libraries increase and mature, it will become a really compelling application language as well.

The community is extremely active, and issues are promptly dealt with. For HNers, it's an opportunity to still make a huge difference by contributing to a relatively young language, compared to getting drowned out by all the noise in a more mature language community.

0. https://nim-lang.org/docs/tut1.html

1. https://en.wikipedia.org/wiki/Metaprogramming

2. https://www.techempower.com/benchmarks/

3. https://nim-lang.org/features.html

4. https://picheta.me/snake/


Honestly I think Nim is more compelling as an application language than a systems language. I know there are plenty of people that care about Nim in the embedded space and are improving the experience of GC-less Nim. But for me, Nim with GC strikes a nice middle ground between speed of development and speed of execution. I can hack a project together quickly and get a native binary that executes much quicker than a scripting language. Its definitely my favorite language for hobby projects and I'm looking forward to the 1.0 release.


Couldn't agree with you more here. I personally use Nim as an application language too and it will take a lot of convincing to let me go of the precious GC :)


> Until then, if you are looking for a systems programming language, you owe it to yourself to investigate Nim[3], alongside Go, Crystal, Julia, D, Rust, Haskell, etc.

Go, Crystal, Julia, Haskell and Nim all have a runtime that sort of precludes their use as a true systems lang. I agree with your other points, and I like Nim, I wish it was more popular, but I can't convince myself it's worth the time investment to learn it. I know Rust and Haskell already, between those two there isn't much space where Nim would be a good fit that the others aren't.



It's great that there are a few projects that enable writing software for embedded devices in some languages you don't usually see in the space, but projects like this do not suddenly make the lang a 'systems language'. You wouldn't want to write an OS in Java or C# or any language with a GC & runtime really.

Nerves is also a wonderful project, enabling the use of elixir for IoT devices, but nobody would claim elixir is a systems lang.


Microsoft actually created an experimental managed OS: https://en.m.wikipedia.org/wiki/Singularity_(operating_syste...


Minor nit. Every language you mentioned with a GC is not a systems language.


Having a GC is not an impediment for systems language, for example:

- Algol 68

- Mesa/Cedar

- Sing#

- System C#

- Modula-2+

- Modula-3

- Oberon

- Oberon-2

- Active Oberon

- Oberon-07

- Component Pascal

- Lisp (regarding Lisp Machines and its derivatives)

- Java (when deployed bare metal on embedded devices, e.g. Aicas, PTC)

- Swift

- D

- C# (when used alongside .NET Native, IL2CPP, CoreRT, Netduino, meadow)


That's not a minor nit, that's a digression from object-level discussion to arguing about word definitions.



Your argument that a systems language must be memory unsafe relates only to current practices but not to science. science would rather prefer memory safety in systems.


Go is a systems language. The term isn't confined to device drivers. It includes platform/backend software such as web servers and things like message queues or the Docker ecosystem.

The term is nebulous though.


That's wrong! Those fall squarely in the application domain.

By your argument Ruby and Python are also systems languages because they can be used to write servers and job queues.

You're not doing real time programming with Go. Don't make systems programming lose its meaning by promulgating this myth.


Real-time programming can be done in any language, Java for example.

I think you're conflating writing device drivers/kernels with systems programming, which includes those things but is not limited by them.

Regardless, the term's meaning can't be lost if its apparently this hazy.


I don't think you understand what real time programming is.



Real time programming requires you to be able to make hard guarantees about how long a certain piece of code can run and what resources it uses.

This is literally impossible with a GC because you can only bound one resource (time or memory) at a time.

The best RTS languages are a pain in the ass to use because the compiler will complain about every single thing - cases that could go wrong with your code

They are used in mission critical (in all sense of the word) systems like spaceships - where a tiny bit of lag will send it thousands of miles in the wrong direction.

Those links you provided, one is a draft for a spec, it's not even implemented yet - and the other has nothing to do with real time languages.


This is swapping out the JVM. It's not even the same language at that point.


Maybe it would be easier for both of us if you wrote the definition for real-time or systems programming, rather than just saying something isn't one or the other.


Look, a good systems language should have predictable assembly instructions that the code compiles into. You should be able to literally with your eye map from code to asm and jump back and forth in a systems level language. GC enabled languages don't have this property as the assembly would be littered with GC code to clean up things. You won't be able to map back and forth.

You will note that rust advertises themselves as a systems level language and it is deliberately designed with the term zero cost abstraction. All this means is predictable asm from code. No black magic. Rust is advertised as systems level and this is the property that enables it. I hope that allows you to understand what it means to be systems level.

I truly believe that you are completely wrong and only few languages nowadays are system languages without a GC. C++, C, D (when used without the GC) and rust are examples. All the other languages you listed aren't.


This is what I was looking for, and I truly believe you are completely wrong as well.

I follow the line of thinking that includes utility software and backend services/platforms as described here:

https://en.wikipedia.org/wiki/System_programming_language

Hence, the word has different meaning from person to person. So there is no wrong, or at least it exists on a spectrum, and everyone complaining about the original comment's word choice is just jerking their ego off.


Mate you said:

> Real-time programming can be done in any language, Java for example

That's absolute bullshit. Please get a Computer Science education before making yourself look like a fool.


Attacking another user like this will get you banned here. Please review https://news.ycombinator.com/newsguidelines.html and don't do it again.

Edit: we've had to warn you about this repeatedly. Please fix this so we don't have to ban you.


Wrong. A system language should at least build shared objects for other languages. Nim can, Go cannot.


> For HNers, it's an opportunity to still make a huge difference by contributing to a relatively young language

It would be better for someone to work on an alternate, Python-like input syntax (focusing on readability and good intuition, and perhaps more attractive to novice programmers) for some established language, like Rust. Working on a "young" language, you just miss the chance of contributing to an ecosystem that's already been in development for quite some time, and where efforts aren't going to be left stranded as the bulk of the dev community chooses to go for something else.


> for some established language, like Rust. Working on a "young" language, you just miss the chance of contributing to an ecosystem that's already been in development for quite some time

Would you still make this point if you were comparing...

for example, Rust and C++?

... where Rust is the "young" language? Working on such a young language (and, FWIW, Rust is younger than Nim), you might miss the chance of contributing to an ecosystem that's already been in development for quite some time.

Not every language grows up with a silver spoon from Mozilla or Google.


Given that C++ is widely regarded as having unfixable problems (and even the ISO-C++ community is now basically admitting this, with the C++ Core Guidelines being nothing more than a somewhat pointless band-aid), yes I would. If C++ was fixable, Rust would not exist in the first place. (Same goes for e.g. Ada btw - if you could simply fix both the clear lack of openness in the available Ada toolchains, and its lacking anything comparable to the Rust borrow checker, Rust would also not need to exist.)

I can tell why Nim was created - there is a somewhat widely felt need for a systems language (Nim is clearly targeting C/C++ compatibility) with a more Pythonic input syntax! But it's far from clear that Nim itself as it exists today is a sensible answer to these issues.


> is widely regarded

Yeah, citation needed, d00d.

> with a more Pythonic input syntax

A 'more Pythonic syntax' is literally the least important requirement anybody needs in a programming language.


There are things about Nim, like the thread local garbage collected heaps, that you can't really replicate in Rust. Sometimes you want garbage collected language because it makes your life easier. Sometimes you don't because you're a library or realtime or you want to optimize the hell out of your code.


Pluggable GC heaps or the like will likely become possible in Rust at some point. We can already see some of the groundwork being provided, e.g. with support for things like custom, user-specified allocators (at a local, not whole-program level - this is not yet in Rust, but definitely in the pipeline!)

It's just a bit silly to couple one's choice of language/ecosystem/etc. to a single memory-management strategy, and the Python/Nim-like choice of obligate GC as an extension to obligate reference counting also seems a bit puzzling. That's basically taking every sort of automated memory management under the sun and compounding their disadvantages - I'd think one can do better than that, in fact even Go or Ocaml do better than that!


I'd say there isn't really a better general option. Some people may want to target the largest amount of people right out of the gate, some people might want to be a big fish in a (growing) small pound. Some projects might have so many (possibly non core) dependencies that it's too hard to start from scratch without already existing mature tools, some projects you might want to start from scratch anyway so might as well use a more modern language that will give it some edge.

I think the only globally optimal option in hobby open source projects is doing whatever seems more fun for you, and for many people is using that language that no one uses (or making your own language that no one uses).



You don't really 'introduce non-determinism'.

That's like saying, "why did you introduce entropy?" It's there. It happens, and it's difficult to get rid of in any complex system.

https://en.wikipedia.org/wiki/Reproducible_builds

https://wiki.debian.org/ReproducibleBuilds

https://www.win.tue.nl/~aeb/linux/hh/thompson/trust.html

Debian was one of the first large distributions to use a build farm for many different architectures. Maintaining deterministic builds (even as far as just file timestamps) in a distributed environment is very challenging.


> There will always be some probability of error but we needn’t be afraid to declare some things dangerous and wrong.

But, who is we in this case? And what specifically are some things and how narrowly are they defined?

> The best we can do is go by consensus expert opinion.

Is that really the best we can do? How many times in history has consensus expert opinion been found later to be dangerous and wrong?

Should we assign that task to an AI or a customer service drone of unknown education and experience?

Or, should we assume that any reader of any particular "dangerous and wrong" things might be a better judge of whether those things are, in fact, "dangerous and wrong" as applied to their specific circumstance?


We is you, me, and society at large. Yes, it really is the best we can do. If a very large majority of the people who study an area of science agree on a conclusion in that area then it’s more likely they are right than someone who has no expertise in that area. Clearly if a large majority of the experts in an area of science agree on something then it suggests that if a person were to educate themself in that area to the point of being an expert then they’d agree with the conclusion too.

Non experts deciding for themselves what is right/wrong is a recipe for disaster. Peoples’ intuition is usually wrong without a lot of experience to back it up. It’s why we don’t let just anyone practice medicine or structural engineering. Expertise matters and the opinions of experts matter much more than a nonexpert’s opinion.


>> But, who is we in this case? And what specifically are some things and how narrowly are they defined?

> We is you, me, and society at large.

But that is not who would be passing judgment in this brave new world of customer service reps and AI. Do we just ban everything mildly controversial?

> Expertise matters and the opinions of experts matter much more than a nonexpert’s opinion.

Are you a qualified, cited expert in this area that you are holding forth on?

> If a very large majority of the people who study an area of science agree on a conclusion in that area then it’s more likely they are right than someone who has no expertise in that area.

There is some room for intelligent debate in nearly any 'consensus' opinion. Some percentage of even experts nearly always disagree with the consensus, and consensus has often been proven wrong. If society went along with the expert scientific opinion concerning eugenics, for example, many of us might not even be alive today.

> Non experts deciding for themselves what is right/wrong is a recipe for disaster. Peoples’ intuition is usually wrong without a lot of experience to back it up.

Non-experts deciding for themselves what is right/wrong is exactly how the world has existed for thousands of years. You seem to be saying that the answer is to just shut down this debate if it occurs among the great unwashed.

> It’s why we don’t let just anyone practice medicine or structural engineering. Expertise matters and the opinions of experts matter much more than a nonexpert’s opinion.

And, yet, we do. In most free jurisdictions, you are free to practice medicine on yourself or do design your own structure or home.


Of course people are free to practice medicine on themselves. They are free to make up their own minds on what they think is right/wrong. They ought not be free, in my opinion, to unduly influence others. At least not necessarily free to spout off whatever ideas they think are correct. Of course this quickly gets into grey areas and situations where the right amount of suppression of ideas gets tricky. It’s OK for government to get involved in this too. For instance we don’t allow peddlers of snake oil to make whatever claims they desire to make. This is a good thing.

I’ll restate my point in a different way. When government is deciding what types of scientific information peddling ought to be banned or regulated it’s best for our leaders to consult the experts of that area.


> For instance we don’t allow peddlers of snake oil to make whatever claims they desire

The important word here is “peddlers”. We regulate the sale of medical products. (And advertising related to such a sale.)

But we do not regulate who may join in the argument about (say) whether stress causes ulcers, or low-fat diets prevent heart attacks. The self-proclaimed experts have at various points in time been quite sure about these things. But thankfully their self-confidence did not result in a ban on people questioning the data.


We don’t allow people selling certain homeopathic remedies to make certain medical claims while selling the product. So we do regulate speech.


> .. this quickly gets into grey areas and situations where the right amount of suppression of ideas gets tricky.

"Suppression of ideas" is a grey area? I have no words.


I should have said speech instead of ideas. I think it’s clear from what I wrote what I was getting at. All societies regulate speech. I don’t know anyone who thinks speech should never be regulated.


If speeches are regulated to this extent then it hampers society from discovering others experiences and learning from them.


'Peoples’ intuition is usually wrong without a lot of experience to back it up' -- people's understandings are based on their own and their social circle experiences. What's make you think its always wrong? Do you mean we keep our brain shut and feeling suppressed about anything that's not coherent with experts opinion? That's what happen in Autocratic government.


I never suggested, hinted, or implied that peoples’ non-expert intuition is always wrong. I never suggested, or implied that people keep their brains shut and feelings suppressed if those feelings are not in line with expert opinion.


Society should be following reasoning from first principles rather than relying on opinions of anyone.

Experts should be better at explaining the reasoning behind their opinions from first principles, but we should not trust them until they do so. Experts can make mistakes and have biases, often to new ideas.


My area of expertise is mathematics. A number of times I’ve explained to someone that the concept of infinite sets is a well defined one. There is a definition and it allows us to work with such sets. I provided the (from my perspective) simple definition and an explanation but to no avail. My point is that often times people outside of the area just don’t understand it. Personally I don’t care if someone doesn’t understand something but I do care if their misunderstanding becomes normative and endangers others.

Pre-internet nutjobs existed in all communities. Cranks and whatnot. This is nothing new. What is new is the scale at which such people can propagate their nonsense. The cost of convincing others your are right has drastically declined. The speed at which such stupidity can spread has greatly increased.

We have entered an era in which regulation of stupid, crackpot ideas may need to happen. If and when we do decide to crackdown on this it’s best to rely on expert opinion. This is of course just an opinion of mine.

I submit to you that the vast majority of what you believe is due to knowledge you gained form others and not from first principles as you put it.


But in mathematics the experts really do know what they are talking about, for the most part. Many things aren't like this.

Just today there was a thread on mental illness, and the crazy grab-bag of ideas which passes for expert consensus:

https://news.ycombinator.com/item?id=19198396

And if that's not crazy enough, look up what they believed 60 years ago. Should those have been locked in, by government force? Or should we be free to mock the shrinks for their delusions of understanding, if we wish?


In an area as concrete and black/white as mathematics it’s still hard to convince some non experts that we really do know what we are talking about. Imagine how much harder it is in trying to convince anti vaxers to vaccinate. When society makes policy it’s best not to treat everyone’s opinion as equal. We are not able to always correctly deduce what is the best course of action on our own when it’s an area we have no expertise in.

I used be a fundamentalist, right wing Christian. Absolutely convinced that evolution was wrong. Eventually I was able to take the blinders off and ask myself, “Why is it that the overwhelming majority of people who study biology at the advanced level agree with evolution?”. It takes a great deal of arrogance to dismiss a conclusion that the overwhelming majority of the experts in a given area agree upon. Of course people get it wrong sometimes but we have to navigate life with imperfect information/knowledge. Who else do we rely upon? Keep in mind I’m not saying believe whatever an expert says. I’m saying that if the overwhelming majority of experts in a given area agree on something then that carries a tremendous amount of weight.

My wife is a psychiatrist. betulaq’s comment in the link you provided is one worth looking at.


But which year's crop of psychiatrist ideas should we enshrine in law? In 1950 there were rebels who didn't buy the consensus, and their ideas won, things improved. Why wouldn't this change have been prevented?

Or worse, how do you know that the evolution side would win the battle to be selected as the official experts on this matter? We have these fights over school boards right now, and sometimes the biblical literalists have more votes. Who gets to decide the how the head-count of experts is to be conducted? I think it pays to imagine these weapons being used by our enemies.

I don't know the solution to the anti-vax madness, but I think censorship is a much bigger battle.


I’ve only been talking about topics in which the overwhelming majority of experts in that area agree upon. If each year’s class of residency graduates in psychiatry all have different opinions on a given topic then this clearly is not in the scope of my comments. Also, I acknowledged that sometimes experts get it wrong. My point is that this fact ought not disuade someone from relying upon consensus expert opinion. Few people have expertise in an area of science and very few have expertise in more than one area of science. We need to rely on what others tell us to be true. I don’t know anyone who has personally run the Michelson-Morley experiment but I know the overwhelming majority of physicists agree the results of the experiment. I’m not arrogant enough to think they are wrong.

If 99% of oncologists think you have cancer then I hope you get treatment for cancer. And if 99% of them think option A is your best hope then I suggest you take their advice. You don’t have to. They may be wrong but in this world of uncertainty and imperfect information it’s the best option.


And the expert opinion is as usual: more studies need to be funded.


Although this is all possible and perhaps even more plausible than the alternative, it's still more fun and conspiratorial to view Google as the new Evil Empire, so I'll just keep doing that, thanks.


We do something similar to this at Userify / ssh key management (disclaimer: I'm the founder/CEO):

We give away 20 servers for free -- no invoice, no credit card needed, nothing. Once you exceed 20 servers, we charge (it's about $70/month).

You'd think that 20 servers is way too much to give away, but actually about 76% of our servers are on the paid plan and a huge percentage of our customers come from the invitation referrals when people change companies or consult for multiple companies.

(Our pricing might be too low and our product might be a bit too technical and scare off a lot of people who might not even know what SSH is, but for now that acts as a filter and keeps our support costs low; it's working for us, although we'll probably lighten up a bit on the technical homepage in the near future.) Also, the SaaS product acts as a frictionless testing area for people who actually just want to deploy the on-premise version, which accounts for approximately 40% of our revenue.

Our customers like the product and we have grown with many of them from free to paid. We're growing a startup for the long haul and don't have to demonstrate any particular growth rate to anyone.

The advice in this article works. Build something that provides some useful utility to people, and give as much away as you can. Most people will not abuse it and will return the favor as they grow.


And that's the wonderful thing Jamieson, even if people would abuse it, you kicking them is a few clicks away. And given that one provides something of value, the premium plans will cover for them.

So so glad to see you winning with this "strategy" — it's not a strategy IMO, it's the forward way of living and conducting business. I'll send you an email, would like to connect!

> We're growing a startup for the long haul and don't have to demonstrate any particular growth rate to anyone.

That's the ultimate level of power and freedom. I wish you well.

Ch Daniel


> even if people would abuse it, you kicking them is a few clicks away

We take a pretty liberal approach to this :) there are a few companies on the platform now who just create a lot of companies and keep them all below 20 servers (that's pretty easy to monitor) but so far we haven't kicked anyone yet, and there's also a legitimate reason to do that (if you're an MSP and have multiple clients). We just send an email to clarify if we think it's an issue.

> I'll send you an email, would like to connect!

Sure thing - it's first.last @ userify! Great to meet you Ch Daniel and thanks for your nice comment!


I think you meant "who just create a lot of users" (...and keep them all below 20 servers)?

I got mad love for you for doing this. Just tweeted at you but sending you an email now


Here's mine. I just use vim for this in a single file. Everything is designed to be rapidly searchable and make navigation just a few keystrokes.

https://github.com/jamiesonbecker/organization-system

Vim is powerful.. if you don't know how to copy/paste blocks, vertical blocks, search backwards/forwards, etc, learn that first.


>Sherlock and Batman

Sounds awesome.


Ish. Batman is basically an “action Sherlock” already. You would have to significantly tweak one or the other to make it interesting. But yeah, having the freedom to do that in a professional production would be pretty fun.


"Batman: consulting detective"


That seems like it could be a Pride and Prejudice and Zombies-style remix, with a few Sherlock Holmes stories rewritten to feature Batman instead and then packaged as a book.


Tragic and ironic that we need a libre Firefox.


Firefox has been and continues to be libre in the sense of software freedom -- free to run, inspect, share, and modify. Anyone who complains about how Mozilla runs their variant of Firefox should thank Mozilla for that licensing choice so that with other people's hard work, the world has multiple variants to choose from all of which are also free software (as far as I know).

You won't see such improvements for non-free (proprietary) software because it wouldn't be legal to prepare or distribute them and because modifying binaries is remarkably difficult. Any improvements the proprietor distributes are untrustworthy unless they are freed. I think it's great that software freedom exists and that people are willing and able to distribute variants that serve their needs.


True, and a nice reminder :)


Only if you accept that premise to begin with...


@moderators should probably be marked [2013]


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: