I'm fairly sure I've said this before here and elsewhere, but bears repeating, especially for this post.
Statecharts is currently probably the most undervalued tool when it comes to programming GUIs with state. Statecharts are a continuation of state machines, but with less footguns and better abstractions to be able to build larger systems.
In the end, you either build a GUI that are using state machines implicitly, or explicitly. Tends to be less prone to bugs if you do so explicitly.
If you're interested, here is some starting points (copied from an older comment of mine):
And finally a very well made JS library by David Khourshid that gives you lots of power leveraging statecharts: https://github.com/davidkpiano
While we're at it, here are some links to previous submissions on HN regarding statecharts with lots of useful and interesting information/experiences:
You know what? Not just Reed-Solomon codes, but Information Theory is cool.
People don't realise how ubiquitous different forms of encoding schemes are (I am leaving out compression/decompression schemes altogether here, but it has always amazed me as to what profound impact Information Theory has, and yet it is so out of the way):
Project you can follow that link Unix comprehension, security and programming:
-implementing malloc (C)
-implementing nm and otools (C) (basics options only)
-implementing a ftp server (a fork for each new connection) or a basic IRC-like server (maybe using ring buffers, and only non-blocking I/O if you want to write in C)
-implementing ping then traceroute (in C obviously) (and nmap if you really want to push it).
In security, do small and easy challenges, like nebula (less than a day if you already know your stuff, i'd think maybe ~3 if you don't) and protonstar (i already knew some of the exploits and it still took me 4 days). Don't do those challenges alone, find a friend to help you: a second brain can think of new solutions and allow you to explain what you want to do (and just by explaining you'll get closer to find why it doesn't work, or why it does). The other challenges are not worth it if you just want to get how basic security work imo. At my school we then had to program some stuff like ptrace or strace (i don't remember which), it's pretty helpfull too, and it help a lot understanding gdb. Ah, and prior to the challenges, we rewrote a small part of the libc (strlen, strlcat and stuff like this) in assembly, and it was pretty helpfull (decompilers are fine, but its easier if you know a bit about assembly, at least with protonstar). If you want to do it, chose like 5 easy functions then 5 function which might use rep string operations, and implement them, it'll take you ~2 days (most of those will be research and reflexion, and you can do that during classes, like most of the security stuff actually).
I'll repeat myself, but if you're not crazy about security, i really advice you to work on this with a friend, security is boring when you're stuck (and really interesting when you're not)
I can't find it now but I recently read of one or two guys who systematically tabulated juggling tricks. Gaps in the table led to new tricks which astonished experienced jugglers -- the way gaps in the periodic table led Mendeleev to predict properties of undiscovered elements. One guy gives talks on juggling at math conferences and on math at juggling conferences.
Here's an eclectic mix of examples from various perspectives across multiple domains. Understanding the representation of knowledge and the fundamental structure that underpins the connective essence of things is one of the prime ideas that drives my thinking, and as a consequence much of what I post about on here is related to that in some way. Below is a brief sampling of examples related to this idea, and for a more extensive list, browse through my postings (and if you can see how they all connect, let me know!).
In general, see the Classification of Finite Simple Groups [0]. In terms of specific examples, the minimal classifications of knots [1], trees [2], and braids [3] are 3 instances that popped to mind. From a number-theoretic perspective, the paper Enumerating the Rationals and its derivative works are interesting reads. In terms of spatial structure and spatial decomposition, look at the classification of crystal structures [4], lattices, polytopes (zonotopes are particularly interesting), periodic and aperiodic tilings, the classification of space-filling curves, and the classification of closed surfaces [5]. From a relational perspective, look at the classification of topological spatial relations [6] and Allen's interval algebra [7]. And the one my intuition finds most intriguing is the classification of Group Theory Single Axioms and its relation to my conjecture that division is primary.
P.S. Clifford Algebra / Geometric Algebra [00] unifies much of mathematics, e.g. in GA, Maxwell's equations can be reduced to one equation and expressed on one line [01]:
Statecharts is currently probably the most undervalued tool when it comes to programming GUIs with state. Statecharts are a continuation of state machines, but with less footguns and better abstractions to be able to build larger systems.
In the end, you either build a GUI that are using state machines implicitly, or explicitly. Tends to be less prone to bugs if you do so explicitly.
If you're interested, here is some starting points (copied from an older comment of mine):
Here is the initial paper from David Harel: STATECHARTS: A VISUAL FORMALISM FOR COMPLEX SYSTEMS (1987) - https://www.inf.ed.ac.uk/teaching/courses/seoc/2005_2006/res...
Website with lots of info and resources: https://statecharts.github.io/
And finally a very well made JS library by David Khourshid that gives you lots of power leveraging statecharts: https://github.com/davidkpiano
While we're at it, here are some links to previous submissions on HN regarding statecharts with lots of useful and interesting information/experiences:
- https://news.ycombinator.com/item?id=18483704
- https://news.ycombinator.com/item?id=15835005
- https://news.ycombinator.com/item?id=21867990
- https://news.ycombinator.com/item?id=16606379
- https://news.ycombinator.com/item?id=22093176