# Project Ideas

These are not meant to be the only projects you can do, or complete ideas that can't be modified. They are just here to give some idea what the project might look like, how big it should be, etc.

## Text Processing

There are many tools to convert various text formats between one another. The likely input is a format that an author might want to write: WikiText, Markdown, reStructuredText, LaTeX. Output would likely be a format compatible with appropriate viewers: HTML, PDF, EPUB.

The problem is that these formats are sometimes only supported in certain languages (e.g. GitHub-flavoured markdown is only implemented in Ruby; reStructuredText is fairly Python-specific; MediaWiki-style WikiText is apparently implemented standalone in JavaScript).

Any kind of system that can convert a reasonable subset of these is going to have to use libraries from multiple languages, one way or another.

At some point, you might also have to face the fact that some of these languages aren't the fastest at actually processing text. It might be worth using something else (C++, Rust, Go) to do some of the work because it's “faster”.

## Calculation on the Web

If you are creating a web-based system (or even a single web page), JavaScript is almost unavoidable: it is built into all web browsers. As a result, if you implement any behaviour in the browser (where you manipulate what the user is seeing in real-time, or respond in specific ways of their clicks), it's probably going to be in JavaScript.

The JavaScript code in the browser can use a REST API to talk to a web server. On the server, you can use any language you want to generate HTTP responses (Python, Ruby, PHP are common choices, using frameworks like Django, Rails, Laravel).

In this scenario, I'm going to imagine that the user in the web browser is going to be shown some information that is the result of a large calculation. The languages that are common choices to implement REST APIs aren't generally the fastest at pure computation. We can incorporate something “faster” (like C++, Rust, Go) to do the hard work. [For this project, it doesn't really matter if the calculation you're doing is actually that complex; it's perfectly reasonable to do some smaller calculation that makes sense, use that as an excuse to switch to a different language, and describe in the README that it could be more complex in some future version.]

Updated Thu May 13 2021, 11:21 by ggbaker.