Joined: 8/14/2009
Posts: 4090
Location: The Netherlands
Samsara made a topic about features for a potential site redesign, considering it was a topic recently discussed on IRC. Which is fine, but I think it is missing the absolute most crucial point about any redesign idea - how to make it happen.
What we really need are:
• Web coding manpower. We don't have a lot of people doing site coding right now. Writing a whole new site would be a massive amount of work, and we simply currently don't have the workforce for such a project currently. We are going to need to get it from somewhere.
• Ideas about what architecture to run such a site on. TASVideos currently uses a large aging PHP-based codebase which has just about reached its limits in extensibility and maintainability. For a new site, we may want, or need, to consider alternative options. A (web) programming language better suited to making large (web) coding projects such as TASVideos with a sane architecture and codebase that is less likely to devolve into a mess that hardly anybody can maintain a decade later.
This leads me to an experimental idea which adelikat has thrown out a few times when this subject was brought up. Right now we don't know if it is even possible (and I lost some of the specifics), but the basic idea was to create a web application/site in C# and deploying it on a Linux server using Mono. However, so far, nobody (who had a Linux rig to do such tests on, and was asked) has been able to test out the basic idea yet. The advantage here is that not only is adelikat well familiar with C#, which is a well-usable language for large projects of this level, but it would also facilitate getting other coders on the project well, such as other coders from the BizHawk development team. This all depends on the viability of the idea, of course, and if anyone can pull it off even as just a basic "Hello world"-style test.
I'm not saying at all that this is the definite way to go forward. If anybody has an alternative viable idea, that certainly could be considered as well.
Thoughts, anyone?
http://www.youtube.com/Noxxa
<dwangoAC> This is a TAS (...). Not suitable for all audiences. May cause undesirable side-effects. May contain emulator abuse. Emulator may be abusive. This product contains glitches known to the state of California to cause egg defects.
<Masterjun> I'm just a guy arranging bits in a sequence which could potentially amuse other people looking at these bits
<adelikat> In Oregon Trail, I sacrificed my own family to save time. In Star trek, I killed helpless comrades in escape pods to save time. Here, I kill my allies to save time. I think I need help.
Joined: 4/17/2010
Posts: 11495
Location: Lake Chargoggagoggmanchauggagoggchaubunagungamaugg
I'd prefer to hear counter points to using C#. It's interesting to follow which one's benefits outweigh the other's.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
If you're going to write a website, there is absolutely zero reason to not use an existing framework. Frameworks will take care of 90% of the work, leaving you able to focus on what the website does instead of how it's implemented behind the scenes. You cannot afford to be wasting effort on reinventing the wheel, especially when you're short of manpower to start with. And a good framework will still give you a ton of flexibility in terms of picking e.g. what type of database to use and how to scale the site, so you won't be sacrificing control over anything you actually care about.
What specific framework to use...I don't have the necessary background expertise, except that I'd say in general to avoid PHP, despite its wide support, because it is famously fractally bad. I've used Django (which is based on Python) in the past and been perfectly happy with it. I have never heard of a C# web framework; such may well exist, but I'm not aware of them.
My inclination is to say that writing a website is different enough from writing an emulator that you should care more about using the best tools possible than you should about using a language you are familiar with. Whoever works on the website will have a lot of learning to do anyways, and their code will not (should not!) end up looking very much like the code in BizHawk. That said, it would be good if you had access to someone who is familiar with the language, so they can help advise others and smooth over any learning "humps".
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Nowadays when developing a web server backend, it's usually a good idea to use a popular well-tested framework (such as for example Symfony) instead of programming it from scratch.
If you look at Wikipedia's comparison of web frameworks page, C# is conspicuously absent.
Joined: 11/13/2006
Posts: 2822
Location: Northern California
The thing about C#, though, is that we have numerous trustworthy contributors to BizHawk who could make the jump into site coding if we choose to stick with it. It may not be a "proper" framework, but it's something we could potentially start doing very soon without having to look around for people versed in something else. That's the main appeal of it in my eyes, the other one being it would be easier for us to maintain and modify if it's a language we're already familiar with. Hell, I wouldn't mind learning C# just to be able to contribute in some way, since it would be useful to know outside of site architecture, whereas learning some site-specific framework would likely go to waste for me.
Of course, it's not the only idea out there, and I am more than happy to back some other idea if we actually have some manpower behind it. The issue is just that we need that manpower in the first place.
TASvideos Admin and acting Senior Judge 💙 Currently unable to dedicate a lot of time to the site, taking care of family.
Now infrequently posting on Bluesky
I don't want to get involved in this discussion, but as a point of fact C# is literally the first goddamn thing on that fucking page you linked did you even fucking read it
The thing about C#, though, is that we have numerous trustworthy contributors to BizHawk who could make the jump into site coding if we choose to stick with it. It may not be a "proper" framework, but it's something we could potentially start doing very soon without having to look around for people versed in something else.
This is a big project. Precisely the last thing you want to do is leap in half-baked. Enthusiasm is great, don't get me wrong, but you need a lot of planning, too.
Plus, the more languages you already know, the easier it is to learn a new one. Anyone who knows C# will be able to transfer a lot of their knowledge to learning a new language. And naturally, anyone who has not learned any language will not be at any advantage or disadvantage; they'll have to learn something new anyway.
If you can find a good C# web framework, then by all means use it; there's no sense in fracturing your "language platform" unnecessarily. But I would strongly recommend that you use a good framework in another language in preference to a mediocre framework in C#.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
Instead of just blindly picking a framework, why not lay out the requirements first and then decide which framework(s) best fit(s) the requirements? As Derakon puts it, it's better to use something that fits well over something with familiarity, as the latter may not necessarily fit the requirements best. A kind of skunkworks setup in which the architecture is designed and tested might work well if there's no clear goals as long as the existing site continues to run alongside it. An alternative would be to have a few self-hosted solutions using different frameworks; a kind of "shoot-out" of sorts.
But don't use PHP.
Instead of just blindly picking a framework, why not lay out the requirements first and then decide which framework(s) best fit(s) the requirements?
Optimally we would have a person who has a lot of experience in web server programming and different frameworks to at least delineate, if not implement, what would be the best options and how it should be done. There are lots of good web server frameworks out there, but perhaps that's the problem: There are too many to choose from, and they all require experience to be used efficiently.
(I actually have a good friend who is a professional web developer and has a lot of experience on it, and has done work for big companies. Unfortunately I don't think he would be willing to do this kind of thing pro bono.)
But don't use PHP.
Why not? Even if you don't like it as a programming language, the fact is that it's arguably one of the web server development languages that has the most amount of people behind it, and the most amount of well-tested frameworks and libraries, and has endured the test of time. Technically it might not be the best possible language for that purpose in existence, but in practice so much work has been done with it, that it's a very good option. Sometimes it's just better to use the option with the most support, and the best libraries, even if it might not be the best programming language (by some subjective measure).
(I'm not saying PHP should be used. I'm just saying that it shouldn't be ruled out just like that.)
Instead of just blindly picking a framework, why not lay out the requirements first and then decide which framework(s) best fit(s) the requirements?
Optimally we would have a person who has a lot of experience in web server programming and different frameworks to at least delineate, if not implement, what would be the best options and how it should be done. There are lots of good web server frameworks out there, but perhaps that's the problem: There are too many to choose from, and they all require experience to be used efficiently.
(I actually have a good friend who is a professional web developer and has a lot of experience on it, and has done work for big companies. Unfortunately I don't think he would be willing to do this kind of thing pro bono.)
Before even bringing in someone to put down an architecture, some questions should be asked about what the site functionality should be: what do you want the front page to look like? What sorts of tools do you want to have available for submitters, judges and publishers? What sort of integration is desired with the forum and IRC? Even just specifying "something functionally similar to what we have right now" would be a good starting point (although arguments can be made for separation of concerns; for instance, there is a wiki that might benefit from being separated code-wise from everything else). At that point anyone that brings their expertise can have an idea of what they're putting together and how. The specification is allowed to change, but without a clear idea of what's even desired in the future site, you'll probably end up with a bunch of designs with "missing" functionality. Someone like adelikat or Bisqwit or a consortium of the higher-ups and veterans would probably want to codify the absolute requirements and a call for addendums, as seems to be happening in the other thread. There's nothing wrong with mockups, though, but as you're already aware, most people with a favorite hammer will see everything as a nail.
Also the friend of yours might not do pro bono work, but any professional worth their salt can at least give a few suggestions. Most passionate programmers I know just love to spill their opinions all over the place about how something could/should be done. Might as well ask.
Warp wrote:
But don't use PHP.
Why not? Even if you don't like it as a programming language, the fact is that it's arguably one of the web server development languages that has the most amount of people behind it, and the most amount of well-tested frameworks and libraries, and has endured the test of time. Technically it might not be the best possible language for that purpose in existence, but in practice so much work has been done with it, that it's a very good option. Sometimes it's just better to use the option with the most support, and the best libraries, even if it might not be the best programming language (by some subjective measure).
(I'm not saying PHP should be used. I'm just saying that it shouldn't be ruled out just like that.)
PHP is awful, and popularity is a really poor indicator of quality; in fact, its popularity speaks more about its accessibility and availability: you can get packages for just about everything, and it's usually not too difficult to bootstrap a basic project in PHP if only due to the dearth of learning material and available talent; but PHP has somanyfundamentalproblems having mostly to do with poor language choices solidified into compatibility baggage. Variable variables sticks out in my mind as the most PHP-like feature of PHP. It just so visibly demonstrates how the language lends itself to terrible design, and yet this is advertised as a feature.
PHP might have been the web programming language de jeur in the 2000s, but there's a lot of really good alternatives nowadays (some of my friends really like Flask), made much easier to deploy thanks to tools like Docker.
PHP is possibly the worst language in common use today. Sure it has a lot of pre-existing "solutions" that you can leverage if you use it. But plenty of other frameworks written in actually good languages also have a similar, if perhaps not quite as extensive, body of work. And the work that your developers put in to integrate those solutions into your website will go much more smoothly if you aren't working in PHP.
Honestly I'd say just go with Django. It's written in Python, which is an easy-to-learn language with much stronger design fundamentals than PHP. Is Python perfect? No, but no language is, and the ways in which Python is imperfect are mostly matters of personal taste (like semantically relevant whitespace, or lack of strong typing) rather than objectively bad decisions. And Django is easy to set up, easy to "graduate" from a local page to a webserver, and popular enough to have lots of support and help online.
Pyrel - an open-source rewrite of the Angband roguelike game in Python.
PHP is possibly the worst language in common use today. Sure it has a lot of pre-existing "solutions" that you can leverage if you use it. But plenty of other frameworks written in actually good languages also have a similar, if perhaps not quite as extensive, body of work. And the work that your developers put in to integrate those solutions into your website will go much more smoothly if you aren't working in PHP.
Honestly I'd say just go with Django. It's written in Python, which is an easy-to-learn language with much stronger design fundamentals than PHP. Is Python perfect? No, but no language is, and the ways in which Python is imperfect are mostly matters of personal taste (like semantically relevant whitespace, or lack of strong typing) rather than objectively bad decisions. And Django is easy to set up, easy to "graduate" from a local page to a webserver, and popular enough to have lots of support and help online.
I second this. Django is very actively developed and has good deployment options and general compatibility and I have dabbled in it a bit for a simple customer management software (that I never finished, but still). I think there even are BB applications for it now (I have never tested them. In theory we could continue to run this forum separately having it only communicate via the database).
I quite frankly hate Python's type system when used for more complicated applications, because it makes you put expectations about types into comments making them uncheckable automatically (Python's new type hinting reduces this somewhat but there needs to be good infrastructure for that (i.e. it needs to be supported in Django itself)) and defensively programming becomes quite nasty generally (how do you catch runtime errors concerning types without big preludes at the start of every function or exception madness, Django's debugger can help here though).
I know adelikat is in the web dev business, but don't know what software they use and if we could too. In fact I'd appreciate a Nach or adelikat post here concerning general guidance.
P.S.: And yes, I'd be willing to put time into a new site.
All syllogisms have three parts, therefore this is not a syllogism.
Joined: 4/17/2010
Posts: 11495
Location: Lake Chargoggagoggmanchauggagoggchaubunagungamaugg
RGamma wrote:
In fact I'd appreciate a Nach or adelikat post here concerning general guidance.
When we met in person with moozooh last winter, he told me about the problem: Nach wants to run linux-driven things, probably comparable with what is used now, and adelikat wants to use C# and co. It could be run on linux, but the concept would be totally different.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
In fact I'd appreciate a Nach or adelikat post here concerning general guidance.
When we met in person with moozooh last winter, he told me about the problem: Nach wants to run linux-driven things, probably comparable with what is used now, and adelikat wants to use C# and co. It could be run on linux, but the concept would be totally different.
The C# runtime is being ported to Linux: https://blogs.msdn.microsoft.com/dotnet/2016/06/27/announcing-net-core-1-0/, but this is still unfinished I presume. I'm also all for keeping all things Linux/BSD and there's considerable choice there (there's even Rust web frameworks now, or Haskell ones. Two languages that'll have a great future I presume).
All syllogisms have three parts, therefore this is not a syllogism.