Live data from Hacker News

Show HN: Orange Forum – Web 1.0 style forum written in Go

goodoldweb.com

151–160 of 178 posts

Re: Show HN: Orange Forum – Web 1.0 style forum written in Go

#151

Earlier quoted context omitted.

Well this @mention is a bit more complicated than what one might think. For example: If someone creates a post, without any @mention, then edits it, and adds a @mention — then, do you detect this, when looking at the edits, and send a @mention notification now? And what if s/he edits the post again, and removes the @mention, then, do you remove the notification? Cancel the email if it hasn't been sent yet? And if the…

It's a forum. Read the thread and don't have any such concept as a "mention". If you get quoted, you'll see it as you go through the pages. If you're really lazy just namesearch your handle (which may or may not change, may or may not be unique, etc) but basically participate don't just cherrypick. I hate most modern forum software with a passion.

Right, but you would just be one of the rare users that turns the system off. Which is fine, but don't let it blind you to what the typical user wants.

"Just use the /search feature to find replies" isn't something I can say with a straight face to the sort of users I have. I would just leak them to competing forums that have good UX. It's no ideal for someone to be unaware that a thoughtful reply was made to a post they invested in.

Re: Show HN: Orange Forum – Web 1.0 style forum written in Go

#152

The irony is that because of the lean structure behind the server, this forum actually responds faster than most webfora that do use AJAX/SPA. Funny given that the whole purpose of AJAX/SPA was to reduce response time. That's it's reason for existing. Turns out it just complicates things ...

From what I recall AJAX wasn't for making things faster or for scaling like other siblings posts describe.

How I remember it, it was created for user experience reason. Not having to submit a form and refresh the entire page and cause the page to bounce back to the top of the page, etc.

AJAX (at least when I learned and implemented it) was for updating the user about an action they performed without refreshing the entire universe in front of their eyes, only updating the contents of a div or something else.

The whole web app as a javascript app.js blob idea took the AJAX idea to an extreme. In this extreme it often does slow down page load speeds and negatively effect the user experience when Javascript doesn't work, for whatever reason.

Re: Show HN: Orange Forum – Web 1.0 style forum written in Go

#153
post #132

Earlier quoted context omitted.

What if the @mention user decides to change his/her display name, now you need to parse @mention into a unique id and save that in the database with comment body and then translate it back when you serve it to the currently chosen @mention name...

Why would you allow users to change their display name? It's a forum, not social media.

Of course it's social media. The username and avatar is one's social identity on a forum. I think you have a very narrow experience with forums if you find it surprising that someone wants to change their username if you accept that they would also want to change their avatar.

Re: Show HN: Orange Forum – Web 1.0 style forum written in Go

#154
post #143

I really like this movement of going back to the basics, web 1.0 style web apps/sites. I do feel however that there can be a compromise, I think we can build our web applications in the 1.0 style and power them up in the 2.0 style, allowing the capability of the client drive the presentation of the application. For hints on how I'm doing this for Remarkbox ( https://www.remarkbox.com ) - please read http://russell.ba…

I looked into your work - remarkbox and read through all the while hoping/wishing for there would be a self-hosted version that is not prohibitively expensive for a free personal blog. No luck for me. Back to tinkering with self-hosted isso[1] comment system to make it work for me. https://posativ.org/isso/

If I had your requirements I would look into isso too! Tinkering is a great way to learn as well, keep up the the great work.

If you decide that you would rather tinker on something else, and just want a hosted comment service to be a solved thing for your personal blog, please reach back out and I'll try to work with you.

Re: Show HN: Orange Forum – Web 1.0 style forum written in Go

#155
post #68

I built a forum from scratch once and it is a comical amount of work. The initial CRUD weekend-ware is straight forward. LIMIT/OFFSET for pagination. Throw in some Markdown support. Seems easy enough. But the devil is in all the individual features that make a forum usable. Like getting notified when someone @mentions or replies to you, marking threads that you've posted in, tracking the high watermark per user per t…

> Like getting notified when someone @mentions or replies to you Really? _that_ is complicated? Serious question, do you find it complicated because you're still a beginner, or is there something I'm missing? What language(s) did you use?

A modern forum system is a culmination of all these features and many more.

And each feature always seems trivial on the surface. That you pick on this feature as an easy one makes me chuckle and shake my head slowly as I recall the hubris of my past self.

I once made the mistake of thinking that building a forum would be easy, so I can relate.

Re: Show HN: Orange Forum – Web 1.0 style forum written in Go

#156

I built a forum from scratch once and it is a comical amount of work. The initial CRUD weekend-ware is straight forward. LIMIT/OFFSET for pagination. Throw in some Markdown support. Seems easy enough. But the devil is in all the individual features that make a forum usable. Like getting notified when someone @mentions or replies to you, marking threads that you've posted in, tracking the high watermark per user per t…

I've had certain forum software sometimes as a side project, sometimes as my man full time project, during the last 7 years. So yes there's lots of work. But in my case lots of time was "lost", in learning web development / React.js / Angular / Dart / other stuff, and porting from the-wrong-technology, to another the-wrong-technology, and building the wrong things that no one wanted. I think the Discourse (forum soft…

IIRC, Jeff Atwood of Discourse said it takes at least three years for a project to finally approach the objectives that it set out to achieve (or something). I'm sure he was referring to his experience with Discourse and Stack Exchange at the very least.

I might have butchered that, but three years has been my experience as well. I chuckled when I read that post because the three year mark was finally when I looked back on my forum, felt somewhat content with it, and went "holy shit, that took a while".

My forum had active users from day one since I was porting vBulletin to my own stack. I actually used Clojure + Datomic for the first iteration and rewrote it to Node + Postgres a year later.

As developers it's easy for us to go "3 years? Psh! What are you doing all that time!" because we like to pretend everything is just a pure technical problem and consistently underestimate the work. I certainly wasn't working on my forum for 3 years full time.

It was a hobby balanced on community building and creating a compelling experience for my users. It took a week to build the initial release where people could actually register and post. From there I'd burst a week of full-time development work into it every 1-3 months.

I'm glad I experienced this journey, though bless my poor users that had to wait on me to implement basic conveniences over the years. I can say with certainty that I will never go "hah, that looks easy!" ever again.

Re: Show HN: Orange Forum – Web 1.0 style forum written in Go

#157

Earlier quoted context omitted.

You can cache server rendered pages in a CDN or Varnish or whatever you like, and there's also the use of the proper http headers to drive client side cache control. All of this works for server side rendered content.

Obviously there are a great many layers to caching (there's a whole multitude of other solutions out there that you've also missed off :p). However with regards to the specific points you've raised: 1) You cannot cache server rendered pages in a CDN (see footnote) if those pages contain user specific information (like this topic does). Information such as a user name, message read status - even on public messages, et…

1) nor can you cache client-side rendered pages in a CDN ... you can only cache EMPTY information-free pages in a CDN

2) Agreed, but again, same problem as one

Truth of the matter: Javascript rendered pages

1) request(s) for the page 2) response for the page 3) at least one AJAX request (in practice: dozens) (cannot be akamai'ed) 4) waiting for all responses

Server side rendering without AJAX

1) request page 2) respond to page

Seems to me server side rendering is guaranteed to be faster, if you count the full cycle. But sure, with AJAX you can show your logo faster. With server side rendering only you can show the actual data people are looking for faster.

Re: Show HN: Orange Forum – Web 1.0 style forum written in Go

#158

Can I ask what (if any) are your future plans with this? And what's the reason you decided to create it? (only to showcase web 1.0 style forums, or ... other reasons too?) For example are you planning to provide hosting? Continue developing the open source version and add features like spam protection? Google and FB login?

I'd been working on this on-again off-again for a while after reading Dan Luu's post on page bloat[1]. I'll provide hosting if anyone wants it. That said, ease of deployment was a major consideration right from the start. That's why I chose golang over Django/Rails and decided to offer SQLite as an option to support quick deployment for internal / low traffic sites. [1] https://danluu.com/web-bloat/

Ok thanks for explaining :-)

(I've seen Dan's post me too in the past, it inspired me to try to remove lots of JS from some similar stuff I'm building.)

Re: Show HN: Orange Forum – Web 1.0 style forum written in Go

#159

Earlier quoted context omitted.

I've had certain forum software sometimes as a side project, sometimes as my man full time project, during the last 7 years. So yes there's lots of work. But in my case lots of time was "lost", in learning web development / React.js / Angular / Dart / other stuff, and porting from the-wrong-technology, to another the-wrong-technology, and building the wrong things that no one wanted. I think the Discourse (forum soft…

IIRC, Jeff Atwood of Discourse said it takes at least three years for a project to finally approach the objectives that it set out to achieve (or something). I'm sure he was referring to his experience with Discourse and Stack Exchange at the very least. I might have butchered that, but three years has been my experience as well. I chuckled when I read that post because the three year mark was finally when I looked b…

Curious - why did you move from Clojure/Datomic to Node/Postgres?

Re: Show HN: Orange Forum – Web 1.0 style forum written in Go

#160
post #159

Earlier quoted context omitted.

IIRC, Jeff Atwood of Discourse said it takes at least three years for a project to finally approach the objectives that it set out to achieve (or something). I'm sure he was referring to his experience with Discourse and Stack Exchange at the very least. I might have butchered that, but three years has been my experience as well. I chuckled when I read that post because the three year mark was finally when I looked b…

Curious - why did you move from Clojure/Datomic to Node/Postgres?

I had used Datomic on my previous hobby project, so when I had to pick a database for my forum rewrite, it was what I was most comfortable with and it was also just fun to use.

For example, I figured I could use its transaction querying for post edit history. Datalog made it trivial to jump arbitrarily through any relationship. And transactor functions were trivial to write at a time when I had never written a Postgres trigger function.

I didn't apply much professional due process here because I looked at my forum rewrite as a hobby project. It's not like I was being paid.

However, over the course of that year, my forum suffered due to my hobby-level understanding of Datomic.

For example, I had the forum application, the Datomic transactor, and the Datomic client running on one Linode machine. I told myself I'd figure out how to host Datomic on AWS in the future, but of course that never happened.

As the forum grew in size, I started dreading restarting my application because the Datomic client would have to sync with the database. It started to take many minutes. And I didn't have enough information to know why -- is this just I/O limitations of loading info into the process? Or was the fact that hundreds of users were F5'ing the server? I never made myself a real deploy system either. I would manually ssh in, `tmux a`, `git pull`, and manually restart my processes. Very amateurish, but it was so easy to say that I'd fix it in the future.

I also made mistakes like having zero insight into my application. My application was growing slower over time, but I didn't know why. I had some really slow database queries and I was still using LIMIT/OFFSET for pagination at this time.

I also found out that Datomic isn't made for massive blocks of text like forum posts. When I saw that Datomic had full-text search, I assumed that meant otherwise.

A year went by and I started to get stressed out about the forum. I had this crippling guilt that I even tried to build a forum from scratch instead of just using Xenforo. Felt bad for my users who were hanging in there or just leaving out of frustration.

One of the reasons I rolled my own forum aside from thinking that it would be easy was that it would also be cheaper. I was spending like $500/mo on the forum when I was using vBulletin and I was frustrated that I couldn't do much to change that. By my hand-rolled forum cost 1/5th of that, so at least I had that going for me.

During all this, I started working with a friend on a different project and he refused to use Clojure. We ended up with Node + Postgres and he was a Postgres pro who I learned a lot from.

Before long, I had a full Node + Postgres application under my belt and decided to rewrite my Clojure + Datomic forum. I could have swapped out Datomic for Postgres instead of throwing the baby away with the bathwater, but I wasn't convinced that that would be any less work.

I also decided to host my rewrite on Heroku this time to force myself to rewrite the forum in a more stateless way. For example, my Clojure forum had a hard dependency on the filesystem. Not to mention having the database on the same machine meant I'd never be able to spin up another application server.

Of course, any time you rewrite something, you have the opportunity to fix your legacy mistakes from day one which I did. For example, I finally optimized pagination away from LIMIT/OFFSET. I got to clean up a lot of cruft. I also used RDS for Postgres which solved all my database problems. I really had no business using Datomic since I had such a weak understanding of its trade-offs.

Post reply on HN