Show HN: NimForum – A lightweight alternative to Discourse
github.com
github.com
The Nim developers practice dogfooding, and NimForum is one result of that practice. I haven't had much mileage with this new version (the actual Nim forum was updated just a couple of days ago), but the previous revision was incredibly fast and responsive, and had the feature of running example code within the forum. The usefulness of this feature in a programming language forum cannot be overstated -- I think it shortens the average discussion thread by 50%, and makes it way more useful to boot.
This newer version looks much better but has two issues compared to the previous one: (a) it won't run example code within the forum, and (b) it won't work without JavaScript. IIUC the first will be solved shortly, the second might take a little more time (but ... if you can just run the older version in the mean time if it bothers you).
I've thought about continuing the non-SPA nature of the original forum, but with Araq's new Karax framework being available I couldn't resist using it (and of course Araq really wanted me to as well). Even though the forum doesn't run without JS I do still think this was a good decision. In the long run we can probably render the page on the server side, because the front end is written in Nim this should be fairly simple.
Every programming language forum has, in about 80% of the answers including a code sample, a disclaimer of the ".. or something like this, I didn't actually try to run it" -- and usually the answer also has a type, missing import/include, etc - which makes it less useful for newbies, even though it's usually helpful enough to more experienced users.
The only languages for this isn't true (that I've seen) are the APL/J/K family, where a complete working answer is usually 2-3 lines so people try it in a console before posting; and Nim since you introduced the "run" button to the older forum.
Presumably it's what discourse looks & acts like before people wrap their business logic / webpage around it.
Roughly half the group has also abandoned all other social media, while the other half occasionally act as a Facebook diode by posting worthy or important things they might come across.
As the group now lives in several different countries on different continents, having a mechanism that helps us work around time zone constraints which isn't an unmanageable tangle of email chains is hugely beneficial. It's remarkable how making things easier to keep track of wound up facilitating a lot more discussion.
Also as it's just us we have no constraints concerning thread life cycles. So when something occurs that relates to our discussion in some ancient thread it's not a problem to revive it. So we've got threads that run over the course of five years.
How do you deal with people you're connected with but not necessarily others in the group?
Just thinking out loud. Thanks for sharing!
But for products aimed at end-users? Absolutely don't name it after the language it's written in.
To play devil's advocate for a moment though: this is the software used to run the forum for the language Nim. If you've ever been to the Nim forums, this is a version you can run yourself. Maybe that makes the name a bit more reasonable?
Certainly if there is interest I will happily consider rebranding.
NimSquawk?
from the very obvious to the whimsical:
NimmoPhon
Nimference
Nimbeaumôt [sic]
Nimditer
Echonim
Edit:
how I missed Nimsical, I don't know..
Nimminent
I am pushing it rather, so I'll quit while I'm behind... Sorry, but I have to try suggesting PhonoNim, after [0] thinking of phone typos in text conversations.
[0] https://www.urbandictionary.com/define.php?term=phononym
Kodi was previously XBMC which stood for "X-Box Media Center" long after the X-Box was no longer their focus of development (and perhaps even completely unsupported).
Your criticism applies equally to phpBB, and is valid. I suspect if NimForum becomes popular, the Nim part of the name will go away.
https://forum.dlang.org/
are powered by DFeed, written in D: https://github.com/CyberShadow/DFeedI've recently been looking at 'head-less' CMSs. Does anyone know of forum software that separates the head from the backend via a well described API? I'd like to be able to embed a forum into a front end application that I already have, so having a 'head-less' forum would be pretty useful.
Still, performance isn't everything. What about high availability through redundancy? I see that forum.nim-lang.org is behind CloudFlare. Is that the answer?
Finally, what about disaster recovery? In the absence of replication, I hope forum.nim-lang.org at least has backups.
As for backups, of course we do have them. Although I've also recently learned that we could be handling them better. SQLite has a backup API that we should make use of[1].
The main reason I have set up CloudFlare is for DDoS protection. I learned the hard way that Digital Ocean will null route a VPS' network if they detect a DDoS.
Just getting it done. I am now intrigued to try Nim if you are core dev.
The downsides of WAL mode are:
(a) simple file copies are much more fragile - unless you have a "point-in-time" backup, you essentially must use the backup API to copy the database, or alternatively use [1] which does it for you; Best practice is to do that even if you do have a "point-in-time" backup.
(b) All processes that use the WAL database simultaneously must be on the same host. This is NOT a requirement for standard mode -- you only need an underlying filesystem without a broken locking implementation[2]..... (I would trust no NFS implementation based on history; No idea if SMB or AFS is trustworthy -- but if your underlying filesystem is good, you actually can do load-balancing / high availability through the file system with a standard-mode sqlite backend)
[0] https://www.sqlite.org/wal.html
[1] https://stackoverflow.com/questions/25675314/how-to-backup-s...
[2] https://www.sqlite.org/howtocorrupt.html#_file_locking_probl...
Writing for a single db is a bad idea.
Nim doesn't do reflection, but it has some of the best metaprogramming features including static introspection tools which are far superior to reflection IMO.
That's quite a bold statement. Abstractions are never free. Abstract too much and you end up with something slow, that uses the common subset of many databases, and requires very extensive testing.