Frequently Asked Questions

These are some questions I've been asked often. Before asking me a question, please check if it's already answered on here.

Contact

Should I use dchen@dennisc.net or dchen@mathadvance.org?

I don't really care which, to be honest, so don't spend too much time worrying about it. However, if it's very obviously Math Advance related (MAT, MAST, etc) you probably should email the Math Advance email. It may be worth noting that I'm getting more newsletter emails on dchen@dennisc.net, since personal stuff defaults to there,

I have other contact information besides your email, can I use it?

If any of the following conditions are met:

  • It is productivity related (can you teach me/my kid/volunteer for my program/etc) and long-term.
  • You will want a record of this, or have reason to believe I will (the point above is a good reason to believe I will want a record).
  • It's MAST related (besides "can you unlock/check a unit"). Tech issues should be opened up on GitLab if you know how and emailed otherwise. then please use email.

Math

How do I learn math?

Can you look at or help with my contest?

Yes, but if and only if you are using mapm (why mapm?). There are a ton of examples, tutorials, and documentation:

  • Zero To Mapm, for total newbies to Rust (and to a lesser extent, LaTeX). You do not actually need to learn how to write Rust, just how to install Rust programs.
  • Official docs, use them once you've correctly setup your mapm install
  • mathadvance contests, which can be used as real-world examples of mapm contests.
  • Zulip for discussion. You will need to make an account.1

I am willing to help you setup mapm, migrate to it, etc. We've got decent adoption of mapm inside of Math Advance, I want to see if I can get a couple groups outside to use it.

If you're running a non-math contest and want assistance with mapm, my offer still stands. (Though of course I can't help from a non-technical standpoint, since I don't know anything besides math well enough to do so.)

Can you teach me/my kid?

Probably not (unless you go through MAST). Note that MAST is an AIME program, so if you/your student aren't quite at that level, I won't be able to instruct them. My hands are full with MAST at the moment, so I won't be teaching anything else in the school year. Email me anyway though, my schedule should clear up during the summer and I want to try a new introductory geometry textbook I've been writing, if you don't mind that sort of thing.

Programming

Can I use X project that you made?

Yes; in fact, please do. I couldn't even stop you if I wanted to, that's the point of open source. (If I didn't want you to use it, I wouldn't have made it public, would I?)

I'm curious by disposition though, so if you're using one of my projects, I'd appreciate it if you sent an email letting me know. That way I know which of my projects has the most reach, which is one of the factors I consider when deciding what to work on.

How did you make this website and the Math Advance websites?

I use the following stack for frontend:

Node JS + React JS + Next JS + Tailwind CSS + MDX

Perhaps some of these tools are unfamiliar to you. Here's a quick summary on what each of them do.

Node JS is a Javascript runtime. React JS is the framework.2 Next JS handles page fetching and rendering. Tailwind CSS is a tool to quickly create components with utility classes. MDX, or MarkdownX, is a fusion of the markdown and JSX filetypes, and I use it to write the content of the website.

Now, it's important to understand that each piece in a stack is orthogonal. They are not related to each other at all. Sure, there are integrations that make them play together better. But if you don't like a certain piece, just substitute it for something else. And above all, understand the general role that each piece of the stack serves.

As for backend, we use Firebase in the MAT website, and MongoDB for the MAST website. We have our own server for the MAST website, and we're not using Mongo Atlas.

How should I make a full-stack web app?

Before you ask "how" ask "if" you have to. Programming is agony, but websites are especially horrid.

If you have to do something complex (typically the measure for "complex" I use is: does anyone need to have an account on your website?) then the whole Node JS ecosystem might be justified. If you don't have a server and don't want to pay for one, then use Firebase. Otherwise you can run a server-side instance of Mongo or whatever database strikes your fancy.

I regret using Next JS for my API. JS is far too unreliable a language for this sort of thing, you should use something sane like Rust to construct your API. Django also seems worth trying, given that it is super batteries included.

No matter what you choose, you can't get away with not knowing the fundamentals of server-client communication. (Hint: your website is the client.) Assume all actors are malicious, be aware that your server is basically an amnesiac, all data must be stored somewhere and that somewhere is the server, etc.

TeX Live or MiKTeX?

TeX Live hands down. Particularly if you are using Windows, which is probably the reason you'd ask such a question. The installation/setup process has a lot less hiccups, particularly with Asymptote.

Also, if you are using Windows, you might want to consider not?

Footnotes

  1. I'd use IRC and would for most other projects but want mapm to be a little more beginner friendly. Plus, I can't be bothered to set up an IRC bouncer and I don't want to, chat is ephemeral. Speaking of beginner friendly, I also mean culture-wise: Zulip is a lot closer to Discord than IRC is. In particular, copy-pasting long code snippets is frowned upon in IRC and not in Zulip (at least as far as I know).

  2. If we're splitting hairs, React is really more of a library than a framework.