Gosora Forum Software: Supremely Fast and Feature Packed

Discussion in 'Webmaster' started by Azareal, Jan 14, 2018.

  1. Azareal

    Azareal Paragon

    1,599
    114
    130
    +272
    10
    -0
    More progress being made towards the next "update" which will be pushed to Github (you'll be able to pull it down from there and play with it, Github is basically the code hosting site which about 80% of the industry uses, if you're not familiar with it) and gosora-project.com

    Firstly, I discovered a bug while implementing the Filter part of the Search and Widget Filter Widget where the topics didn't flow into the Live Topiclist due to a JS error introduced when I reworked relative times in templates with reltime. That is fixed now.

    I've done a bit of refactoring behind the scenes and added a new dependency, Easyjson which can encode JSON payloads a fair bit faster than the standard library's json package. We'll see how that performs, I'm thinking of moving to MessagePack which is even faster, however it's a binary format which might create complications and will require a new dependency for the client side.

    I also noticed that it felt a little jarring for the topic list results to load so fast when you use Filter while not when you navigated to another page on it, so I added AJAX Loading for the paginators on the topic list and forum page as-well.

    I also added support for creating polls to the forum pages, it was previously only on the topic list proper which can post to any forum you have access to.
    Next will be some little visual changes, and then, finally Search.
     
  2. Azareal

    Azareal Paragon

    1,599
    114
    130
    +272
    10
    -0
  3. overcast

    overcast Reputable

    122
    23
    20
    +35
    3
    -0
    Very nicely done. I am not sure how much time it'd take for the cpanel to some day take it for the deployment. If it becomes that famous then you'd be surely get busy and more paid gigs or jobs your way. I like it that you used Go lang for this project. Never thought Golang would be this fast and forum would be this quicker to load.

    What are some scaling lessons you learned? Or you have yet to face those considering forum is not been adopted by big high traffic site and memberbase?
     
  4. Azareal

    Azareal Paragon

    1,599
    114
    130
    +272
    10
    -0
    I have doubts cPanel would ever adopt it, but chances are that cPanel will be pushed out in the coming years as it's slow to adapt, bundles ancient versions of languages, insecure, expensive and generally ineffective.

    I've learned plenty of scaling lessons, although not in the ways you'd expect. Some of them come from second-hand lessons learned by sites which operate at a scale above that of the largest forums (asides from Gaia which has two billion posts and could be considered the biggest forum).

    upload_2019-2-13_18-58-3.png

    I probably should finish up Search (it's coming fairly soon, although it might involve installing ElasticSearch somewhere to get some real performance out of it), but I added a couple additions to analytics.

    The CSS isn't quite right yet (I'm working on that), but now we have a nice chart to plot multiple items onto, similar to the existing charts which only plot a single line on some of the other analytics pages

    There are nicer chart libraries I could use instead of this one, but this one is a lot more customisable (despite not looking as nice and fancy) as you can use CSS unlike the other one which uses canvas.

    I'll see if I can strike a better balance between aesthetics and customisability however.
    I've also added the tentative three months filter option, so you can see activity across larger periods of time than before.
     
  5. Marc

    Marc Paragon

    +10
    0
    -0
    Just some advice.

    Push the "download" more in your face. As someone who just clicked the link to your website, I'm not going to go searching through the entire forum or check the footer just to find if it's free, paid or if I can download it yet.

    You can do this with a notice, a homepage of the forum or the navigation menu. All I could think up atm.. might be more.

    Next, maybe set up an about page or similar. It's forum software that I've never heard about. I would want to know some stuff like how long you intend to support development, a little about yourself, etc. If I'm serious about starting a forum, I'll of course consider the developer possibly dropping support for the software. If that happens, I'm in deep doodoo, ya know what I mean? Having a donation page may put peoples' minds at ease too (eg. support development as it's free software).

    On the forum's homepage, maybe change the title and meta description to..

    Title: Gosora - Free Fast & Super Packed Forum Software Written In (GO) Golang
    Description: "with the usual features you know and love and more." - put some of it down if it can fit and then say something like "and more features you love".. something like that.

    Just an example to give you an example of what I mean. I'm sure you can come up with something better. Google would eat it up more than what you currently have IMO, especially if people search for forum software powered by GO.

    Maybe set up a link in the navigation menu for "Tutorials" and link to tutorials you've written to set this up. If people have trouble, direct them to the forum to ask questions to get support.

    Anyway, good job on the forum software. It's fast. Just got to present it better IMO. Hope this helps.
     
  6. Azareal

    Azareal Paragon

    1,599
    114
    130
    +272
    10
    -0
    It's in a sticky at the top of the homepage (stickies are the posts with gold on the left on Nox and Shadow and below on Cosora), I guess I could have a download button of sorts with bright colours in the sidebar or throw something in the main menu.

    First and foremost, if no one uses it, then I'll use it and go to disrupt some niches myself. There are some things I'd like to get out of the way first though, before getting the launches going. Maybe Q2 or Q3 of 2019? Dunno.

    And uniConverter, when that is completed, should help with moving to a different software, as it or at-least it's planned to be a two-way converter, but only to and from open source software. Ideally, there could be a collaboration effort with other projects.

    Also, for a number of reasons, I can't really give a realistic time-line on "how long" it will be supported for, much like no one else can either. In a best case scenario, other admins will pull their own weight by contributing to development, hence the real spirit of open source.

    If it's used heavily, then the probability of it being supported will tilt to a more favourable degree. And I like the prospect of recouping my investment by launching production sites and there's no reason to close the source and that would dramatically increase costs for what is essentially a hobby anyway.

    I might do a donation page, although I would have to fiddle around Paypal and what-not and I'm not quite sure it'll see that much use. I'll see what I can do.

    I'm fairly casual about running that site, not really particularly pushing hard with promoting it and optimising it for search engines. I talk about it on FP from time to time, but I'm barely using Twitter for it.

    But, I'll see if I can fiddle with those and maybe toss some tweets out, I'm usually better at putting out high quality documentation for installing the software, etc.

    Just about everything of substance is covered in README.md and the documents it links to on the repository. It basically goes over everything except for installing things unrelated to Gosora like MariaDB, Go, etc. which have links going out to other sites.

    This is a convention which a lot of VPS administrators and programmers should be fairly used to, but I'll see if I can make things easier to find and maybe add some more introductory level tutorials, particularly when I add support for Docker as mentioned in Deployment Method Plans.

    Thanks for the tips and the kind remarks :)
     
  7. Azareal

    Azareal Paragon

    1,599
    114
    130
    +272
    10
    -0
    For anyone who uses the software, I'll probably play nice and give support (as-long as it's not MyBB level toxicity), I've already put a fair bit of effort into making things approachable to users, but I am not obligated to do so.

    Unless, there is serious money involved, there is no point in creating an illusion that this is a "job", people misunderstand this important point a lot at MyBB and I'd like to clarify that before any problems arise in the future, although I have a feeling that anyone who uses Gosora will be fairly mature in that aspect.

    It all goes back to a basic concept I described in a topic on here. You treat the maintainers with respect and they'll treat you with respect and will be more likely to help out in their free time.

    It is very much a two-way road.
     
  8. Azareal

    Azareal Paragon

    1,599
    114
    130
    +272
    10
    -0
    I apologise if I'm slow to get to issues as I'm a little sick right now.

    Generally speaking, the moment a newer version is released (or even commit for the development track), the previous one is immediately obsoleted, unless the issue involves the update process. I'm constantly fixing and changing things, so it's generally not worth the time to deal with really old issues.

    This is how Go and Discourse historically handled things anyway.
    Also, if you follow the recommendations and Google issues, if they arise, then you're basically to the point of supporting yourself.
     
  9. Azareal

    Azareal Paragon

    1,599
    114
    130
    +272
    10
    -0
    I'm 400% less sick now, it seems.

    Due to SemrushBot and DotBot's ceaseless requests, I'm adding them to the analytics as independent citizens. Also, it seems like some people who have a referrer of forumpromotion.net accidentally unearthed a UA parser bug, so thanks for that.

    The search endpoint is nearly complete, although there's still work to be done there.

    People keep asking for shared hosts and I think the best approach might be to run Linux as your OS and to compile on there, then upload the files or to somehow cross-compile to amd64 Linux, that might be doable with the Go Compiler.

    Intel and AMD largely share the same assembly language, so that should work on either.
    That option should largely be reserved for experts who know what they're doing though.

    Incidentally, you don't actually need Go installed on the target machine, if you do that. But, a little advanced for most.
     
    Last edited: Feb 18, 2019
  10. Azareal

    Azareal Paragon

    1,599
    114
    130
    +272
    10
    -0
  11. Azareal

    Azareal Paragon

    1,599
    114
    130
    +272
    10
    -0
    Updated the opening post, as it was about a year out of date ;_;

    I also updated configuration.md again, added some notes on setting HTTPS to the installation guide and began work on Feature List 2.0
    For the actual software, the search system largely works and now I'm adding ElasticSearch support to help speed things up. I've also fixed an annoying little crash bug in the inline forum editor.

    The next upcoming update will likely require you to run the patcher, if you're updating from an older version, as I've made some database schema changes.
     
  12. Azareal

    Azareal Paragon

    1,599
    114
    130
    +272
    10
    -0
    https://gosora-project.com/topic/patch-15.75
    I released "Patch 15" which should give you a description of what I've added since the last one.
    I pushed it a little early without ElasticSearch, as that's taking a little longer than expected, but it should have rudimentary support for search, although no suggesters quite yet.

    Also, asides from Patch 15, I've finished deploying the new multi-series charts across the analytics panel, polished some rough edges there and in some little bits of UI, added the one year time range (might tax the database a little, I'll see how I can optimise that later :) and fixed more bugs.

    Details of the subsequent commit: https://github.com/Azareal/Gosora/commit/1fb497adf80966e1674caac4d2bb64fd1eaa15b1

    Now... ElasticSearch. This is an interesting one and slightly annoying as topics and replies have to be indexed in what amounts to a "second database", so I have to write various utilities like say... A script to importer your topics and replies in the future... And I have to use the full power of Go to squeeze every drop of performance out of all the available CPU cores there.

    It should be doable however and I have a few other features and improvements to implement in parallel to that.

    Multi-series Chart Example:

    mseries.png

    The charts are responsive, so the labels are slightly squished there, I'll see what I can do about that.
     
  13. Azareal

    Azareal Paragon

    1,599
    114
    130
    +272
    10
    -0
    https://gosora-project.com/topic/patch-16.76

    On-top of that described in my previous post here, open graph descriptions have been added, so if you post a link to a topic on Discord, Twitter or Facebook, then you'll get a nice little snippet with a small portion of the post and the title.

    Beware though because this feature may get banned by the European Union's upcoming Article 11 which would prevent Discord, Twitter and Facebook from producing the snippets.
    I have also fixed a major performance bug which was lurking in Gosora for a while making it drop down to interpreted templates and slowing it to a visible degree.

    I have also added support for Favicons and the Google Site Verification tokens (without having to edit header.html, just use the Setting Manager.
    Client templates can now be overriden like every other template and will be loaded much more smoothly.

    I have also fixed a number of bugs and improved the stability of the WebSockets subsystem. For more details on things I've changed, you can consult the link above.
     
  14. Azareal

    Azareal Paragon

    1,599
    114
    130
    +272
    10
    -0
    I've done a few things over the past couple of days.

    Email - I've fixed some potential issues with SMTP and added full encryption over port 465, as-well as fixing a few email related bugs like weirdly formatted emails not always being accepted and TokenSubmit having a security error.

    I've tested SMTP in the wild with a fairly well-known transactional email forwarder and so far, none of my emails have gone into spam, which is nice, considering that I tested it with some pretty strict email providers. Results may vary depending on your sender reputation and the reputation of your provider though.

    Analytics - I've localised some of the analytics phrases, so the non-english speakers among us can get a little more comfortable and shortened some of the bits and pieces which kept overflowing from their lines.

    I have also added Facebook's bot to the analytics panel, although they seem to appear fairly rarely compared to Twitterbot and Googlebot to the point that they're akin to a mythical beast lol

    Documentation - I've added some rudimentary information on overriding templates in docs/templates.md, I'll write a proper theme guide soon-ish for anyone interested.

    Security - The content security policy has been tightened and more inline scripts eliminated. If you are not aware, Content-Security-Policy is a HTTP header which controls what scripts can and can't run on a webpage.

    For instance, you can lock scripts down to a certain domain, only run scripts which match a certain set of hashes, etc. Right now, we have one which kills all inline scripts and only allows scripts contained in external JS files to run, and not any random JS file either, but ones served from the same domain.

    I'm always tuning the headers and from to time, so there is the occasional disturbance from a CSP directive being a little too overzealous and blocking an avatar, but I think I've solved most of those issues.

    If you run ads or things which are scared of CSPs then you can step down to a less restrictive CSP with the LooseCSP configuration setting, although you will end up forfeiting that extra degree of security. Nonces and hashes may be able to solve that in the near future.
     
  15. Azareal

    Azareal Paragon

    1,599
    114
    130
    +272
    10
    -0
    https://gosora-project.com/topic/customising-ranks.81 I made a little article on using the phrase system to create ranks other than levels.

    I've also implemented passwords resets which were delayed a little longer than I would have liked. This should be useful, if someone forgets their password or something.
    I have also eliminated a possible attack on validation tokens and added a maybe fix for @meetdilip

    I'll do a few tests and maybe push Patch 17 by the end of the day.
     
    • Like Like x 1
  16. Azareal

    Azareal Paragon

    1,599
    114
    130
    +272
    10
    -0
    https://gosora-project.com/topic/patch-17.82
    A few bits of pieces here like WYSIWYG for Cosora replies, Password Resets, tighter CSPs and a load of bug fixes.

    https://gosora-project.com/topic/rate-limiting.83
    One of the next things I'd like to work on is to get rate limiting deployed to every relevant component. Right now, it's a little sporadic and that has largely worked as Gosora simply doesn't seem to get spambots, but I'd like to play it safe in the future.

    I'd also like to see if I can't improve Nox's post editor and to revamp Nox's Control Panel.
     
  17. Rick Ace

    Rick Ace Administrator Administrator

    3,034
    181
    130
    +302
    23
    -0
    That's one spectacular update. I've been meaning to make a Gosora forum for a while, but haven't had the time lol. What do you plan on doing with the nonces and hashes? :)
     
  18. Azareal

    Azareal Paragon

    1,599
    114
    130
    +272
    10
    -0
    A nonce allows inline script blocks, even with a content security policy, it can be useful for things like ads. It's basically a random string of sorts which must match one in the HTTP Header.

    Hashes ensure that only a script with a certain checksum can run.
     
    • Like Like x 1
  19. Azareal

    Azareal Paragon

    1,599
    114
    130
    +272
    10
    -0
  20. Azareal

    Azareal Paragon

    1,599
    114
    130
    +272
    10
    -0
    Tweaked the timeouts on the server as Cloudflare was being difficult about that yesterday.