Orchid

Start Date: January 22, 2020

Status:
Ongoing


In this project, I'm building a piece of mathematical software that allows humans to actually do pencil and paper mathematics within a computer interface. This is not a super powered calculator like Mathematica, Maple, or Matlab. No. This is the future of mathematics.


Project Posts


The Orchid Manifesto

By: Danny Geisz | January 12, 2021


The Orchid Project aims to replace a wide swath of modern mathematics with a set of digital structures that can be understood and manipulated by humans and computers alike. To understand how Orchid will fulfil this goal, it is fruitful to first consider the nature of mathematics. Mathematics is the study of abstract entities with stable characteristics and behaviors. Over the past millennia, human beings have developed a set of written symbols used to describe the characteristics and behaviors of these abstract entities. These written symbols allow humans to reference properties of the abstract entities being studied and perform symbolic manipulations on these entities in accordance with well-defined rules.

Modern mathematics is a symbiosis between the human mind and the aforementioned symbol set. Without the human mind, the symbols are essentially worthless and only interact with reality in accordance with physics of their constituent physical materials. Without the symbols, humans would have to reason about abstract entities without any outside assistance, and therefore would suffer from the limitations of human memory and intelligence. Together, however, there is a beautiful symbiosis. The abstract structures live within the human mind, but they can be compressed and stored compactly within the symbol set of mathematics.

However, this brings us to an interesting philosophical question: why is mathematics useful? Mathematics is useful simply because there is stable structure in reality as perceived by humans. The term "stable" is defined here to simply mean "existing for a non-trivial duration of time". While there are, of course, no guarantees about the stability of the different entities perceived within reality, there nonetheless seem to exist a very large number of entities that exhibit some degree of stability.

One particularly fundamental reason contributing to humanity's evolutionary fitness is the human mind's ability to create a model of the stable structures in the human’s environment, and act according to this model. If, for instance, a human learns there is a meteor directly overhead, the human will use their internal model of the world to reason that they must run away in order to survive.

While the importance of the brain's ability to harbor an internal representation of reality cannot be understated, humanity has progressed even further by creating spoken language. Spoken languages allow groups of humans to translate the representations stored within their brains into a set of stable auditory signals. These auditory signals are then decoded by other humans and translated into neural representations of the world.

Forming and reasoning about internal neural representations of the world takes time and effort, and frequently humans form the same sorts of representations. For example, even without communicating, multiple humans could easily learn that a meteor overhead probably means grave danger. Spoken language is an incredibly tool because it decentralizes the effort required to formulate internal representations of reality. As a simple example, a person entering India for the first time several millennia ago might never have interacted with a tiger before. The person could either learn about the dangers of tigers by experiencing one for himself/herself, or he/she could communicate with the locals and learn that the big striped orange and white cats ought to be avoided. The latter option obviously better lends itself to human survival.

Spoken language is a miraculously useful tool, but it suffers from the fact that audio signals decay rapidly, thus requiring two humans to be in immediate contact while communicating. This limitation is addressed by written language, which is next in the chain of incalculably useful human developments. The written word can last for centuries or even millennia, and therefore allows humans beings to share neural representations of reality across wide swaths of time.

So where does mathematics fit into all of this? Languages like English or Mandarin allow humans to describe a large portion of either their perceived reality or even hypothetical situations, and typically rely on some context for understanding. “How fast did Blake run?” I might ask. “Fast,” or “slow,” or “faster than Usain Bolt,” you might answer. Given my current context, I’ll probably form an internal representation of the events you witnessed that isn’t too far off from what you actually perceived. However, the words “fast,” “slow,” and even “faster than Usain Bolt” are all very imprecise, and effectively lose all meaning without the ill-defined context I described.

Mathematics attempts to address this lack of precision by describing both the structures and context in terms of abstract imagined entities with infinitely precise characteristics and infinite stability. To my question of how fast Blake ran, you could instead answer “44.83 ± 0.9 km/h.” You could also provide me with a mathematical model of Blake’s trajectory using polynomials and describe the Blake’s physics using Newtonian mechanics. Given the definition of kilometers, hours, and real numbers, someone 300 years from now would still be able to form a highly accurate internal representation of Blake’s speed, were they to desire that knowledge.

Mathematics therefore gives humans the ability to describe reality with far greater detail, precision, and accuracy than languages like English or Mandarin. The toolset of mathematics has also informed the development of some (if not all) of humanity’s most impressive modern technologies.

Why, then, has mathematics not replaced the languages of the world? If mathematics can provide such superior descriptions of reality, why don’t we entirely replace “the old technologies,” like English? The reason we haven’t done this is because mathematics comes with a high cost. It’s really, really hard. The reason why “Einstein” has become synonymous with “genius” is because Einstein formulated a mathematical description of the world that was more consistent with reality than previous attempts. Mathematics isn’t nearly as forgiving as world languages. While humans can rely on mutual context to convey information with language that would otherwise be imprecise or inaccurate (think metaphors or sarcasm), well-defined mathematics doesn’t allow for any of that behavior.

Before I continue, I’d like to once again emphasize how critical both language and mathematics have been to the improvement of the human condition. Even though I will talk about how Orchid aims to achieve a superior technology, the importance of both mathematics and language should never be taken for granted.

So where does all this leave us? Spoken/written languages can describe a broad swath of reality, but they are imprecise and typically rely on ill-defined and brittle context to actually convey meaning. Mathematics can describe some aspects of reality in incredible detail, but it is difficult to use and struggles at generalizing to complicated systems.

The Orchid Project aims to move beyond language and mathematics for formulating representations of reality by utilizing advances in computers to significantly lower the costs associated with mathematical descriptions of reality. As previously described, right now mathematics is a symbiosis between the human mind and a symbol set, wherein the actual mathematical structures live in neural representations within the human mind but can be represented compactly within a set of written symbols.

Put in high level terms, Orchid transforms neural representations of mathematical entities into computer data structures, which can be created and manipulated by computers. While this is easily said, the ramifications of this statement are enormous. By making this translation from the brain to the computer, Orchid allows computers to “think” about mathematics like humans do.

While you could probably see the importance of this concept after a moment or two of thought, let me perhaps provide some motivation for why this could be revolutionary. Modern computer architectures are capable of roughly a billion operations per second. The spiking rate of a neuron in the human brain is about 200 spikes/second. If we equate a single spike as being approximately equal to a single clock cycle, then a computer processes information more than 5 orders of magnitude faster than the human brain.
What this means, in more accessible terms, is that a task that would take the human mind 1,000 years could be completed by a modern computer in under 4 days. This example obviously makes some irresponsible assumptions about the similarities between the human brain and computers, but the point being made remains valid.

With that said, by drastically reducing the cost associated with mathematical descriptions of reality, Orchid aims to give human beings a tool that robustly addresses the limitations of both languages and mathematics in formulating representations of reality. In accordance with the historical trend outlined throughout this text, one can hope that the tools provided by Orchid can aid in both a drastic improvement of the human condition and the progression of organized complexity within reality as a whole.

An Effective Recipe for Mathematical Modelling

By: Danny Geisz | July 20, 2020


Sup readers. Prepare yourselves for another disjointed post. I’m basically using my blog as a repo for and log of my thought processes.

K, so basically a big thing that I’ve learned about myself is that even though I really enjoy learning about pretty much anything technical (math, physics, CS, etc) it’s immensely hard for me to stay motivated to continue working on a project unless I can very easily discern why the project benefits humanity. That’s part of the reason why I’m really enjoying my current project.

Oh wait. I forgot that I haven’t written a single blog post about my current project yet. RIP. I’ll do that soon. Basically, I’m trying to build a social media platform that psychologically incentivizes healthy, non-violent conversations about traditionally controversial and polarizing topics. I’m bringing this up simply because I perceive the goal of this project as being of upmost importance for the future health of the purportedly self-healing super graph that is humanity.

Anyway, back to Orchid. The reason I bring all this up is because in past months, I haven’t really been able to come up with a compelling reason why building Orchid would be beneficial to humanity, which has meant that it’s somewhat difficult to remain motivated to work on it, which in turn means I haven’t prioritized working on it, which means I haven’t worked on it all that much.

Orchid, however, has been dancing around the back of my head for the past couple of months simply because I think it would be super cool if it worked. If nothing else, it would give me a way to work on learning things like QFT without the overwhelming frustration of working with ginormous equations with pencil and paper. While I personally don’t see learning QFT as a particularly meaningful pursuit at this juncture of my life, the equations that govern quantum fields are super, super juicy, and it’s fun to play around with them.

Anyway, in trying to come up with ways that Orchid could benefit the humanity graph, I’ve had a couple ideas. This first one kinda showed its head in my last post, but I’ll flesh it out a bit more here. Basically, if Orchid works as I intend, it will essentially create a method for storing mathematical entities of all varieties in well-defined computer data structures. Neat. Additionally, the rules governing mathematical manipulations of these particular mathematical entities will also be stored in similarly well-defined computer data structures. The reason why this is compelling is because computers would then have the ability to work with and manipulate these structures on their own, without human interference. Obviously, the algorithmic approach the computers would take in manipulating the mathematical structures would be defined by humans, but it would essentially allow computers to perform the same sorts of computations humans do all by themselves.

Why is this potentially cool? Because up until this point, most mathematical software is essentially super-powered calculators. Mathematica, for example, has been built over the last 30 years, and during that time, human beings have translated all varieties of mathematical processes into code. There’s a reason it takes up like 20 GB. It’s gigantic. But if you want to numerically solve erf, like I did back in high school, well then boy is Mathematica for you. How is orchid different? Instead of having a bunch of hard-coded algorithms for solving and manipulating previously defined mathematical expressions, Orchid allows you to define entirely new mathematical entities and the rules that govern them. This, furthermore, allows users to have a central location for creating a manipulating all varieties of mathematical entities.

Not only that, but the computer itself would have a way of creating and manipulating exotic mathematical structures. This means that computers would be able to do what previously could only be done with pencil and paper, or on a blackboard. Instead of slaving away doing a bunch of predefined calculations, computers could actually be “doing the math” in the same way that humans have for the last several centuries.

I imagine it might not be immediately clear why computers doing pencil and paper mathematics would be beneficial to humanity. Let me explain as clearly as I can. Mathematics has provided humanity with perhaps the most robust and effective method for quantitatively understanding the world around us. And when humans better understand the world, they can make better predications about the state of the world. As I’ve discussed in previous posts, whenever a structure exhibits stable characteristics and behaviors, that structure can be effectively utilized in the creation of another, larger stable structure. In this context, that means that whenever humans are able to understand the stable characteristics and behaviors of a system, they are frequently able to use that system in a manner that increases humanity’s overall fitness.

Theoretical physics, as a field of study, is perhaps the best and most well-established example of what I’m describing. The phone in your pocket, the missile defense system that keeps you safe, and the lightbulb that illuminates your house are each examples of the staggering amount of technologies that fundamentally would not exist without developments in theoretical physics.

And what is theoretical physics? It is the practice of modelling physical systems in terms of well-defined mathematical structures, and then making predictions about the systems themselves using well-defined mathematical manipulations on those structures. In case you are wondering, experimental physics is the practice of designing and carrying out experiments to gather data on physical systems. Analyzing these data sets is what allows theoretical physicists to determine the degree to which their models accurately describe reality. So, if you’ve ever wondered what those nerds up in national labs, universities, or particle accelerators are doing, it’s that.

Physics is all fine and good, but I’ve found that much of what goes on in modern day physics doesn’t actually seem to affect many people. Some of it certainly does, but a good deal of it is documented in papers that 99.99% of humanity can’t understand and don’t really do people any good.

However, there are plenty of other real-world systems that could be analyzed using the aforementioned methodology. Data scientists are basically the people attempt to understand large data sets using machine learning or other statistical methods. From what I understand of current practices in data sciences, there really isn’t a large amount of coming up with novel mathematical models for understanding data sets in a manner similar to theoretical physics. There certainly is some, but nothing compared to physics.

And there’s a very good reason for this: coming up with appropriate mathematical models for different systems requires a huge amount creativity and intellectual capacity. In other words, it’s really, really hard. Ever wonder why everyone thinks Einstein was so smart? It’s because he came up with extremely precise mathematical frameworks for describing relativistic systems. He did a bunch of other stuff too, but he’s celebrated mainly for his ability to create compelling mathematical models for physical systems. And let me tell you, General Relativity is no small pill to swallow. There are a ton of moving parts and different mathematical structures at play, but my gosh, the resulting theory is objectively gorgeous.

Anyway, I could fawn on about GR all day long, but that’s not why we’re here. The reason Orchid is compelling is because it would drastically simplify the process of coming up with mathematical models to describe different systems. Not only that, with the right set of algorithms, the computer could by itself create mathematical models to describe data sets.

That last sentence probably didn’t have the desired effect on you, so let me rephrase. Orchid could potentially allow a computer to do the same thing Einstein did that made him famous as one of the smartest people in history.

IMHO, that’s pretty dank. But even if that last bit doesn’t happen, Orchid would still provide humanity with a framework for easily constructing and manipulating mathematical entities, which could in turn be used to understand the world around it with a degree of precision previously unattainable.

Well, maybe that’s being overly optimistic. We’ll see.

Anyway, when I started this post, I wasn’t going to talk about Orchid, I was going to give the recipe for consistently and efficiently modelling a system mathematically. Here goes.

  1. Determine which parts of the system in question that you would like to understand.
  2. Create a set of mathematical structures that quantitatively describe the interesting characteristics of the system in question.
  3. Clearly lay out the method that can be used to extract observable quantities from the structures in part 2.
  4. Describe all factors that effect the system in question as transformations on the mathematical structures from part 2.
  5. Use the defined mathematical entities to make predictions about the system in question. Queso (K, so) I think this is, if nothing else, a reasonable starting point for understanding a system in terms of mathematical structures. It also gives me the spiritual reassurance that Orchid is actually a tool that could be used to improve and optimize the humanity graph.

Just hit page 7, which is about 5 pages longer than I thought this post was going to be, so I’m going to wrap this sucker up. I guess as one last thing, if this stuff interests you, shoot me an email. After leaving Berkeley, I haven’t talked to a lot of people interested in this stuff.

May your socks always come bedecked with cool designs. Peace.

Scattered Thoughts Regarding Appropriate Modelling

By: Danny Geisz | July 18, 2020


Sup readers. Prepare yourself for a post that will make absolutely no sense. Or it might. I’m not really sure yet. Basically, I’m revisiting Orchid, and I’m attempting to determine how to make it fundamentally useful.

The fundamental shift in my thinking that I just recognized is that in order for a mathematical model to be useful, it must be defined within a particular context. I realized two nights ago that if the entire game of complexity comes down to stable structures with well-defined behaviors, and humans are good at categorizing such structures, then in order to replicate it, you need a machine that is able to meaningfully describe the set of characteristics and structures of a particular stable structure it encounters by means of data. So the goal is basically three steps. One: Develop a universal method for describing the characteristics and behavior of stable structures in terms of computer data structures. This is and has been the entire purpose of Orchid, as mathematical entities are essentially perfected abstractions of perfectly stable structures. Two: Develop a method for extracting a set of characteristics and behaviors about a particular stable structure encountered in a data set into the data structures discussed in step one. Three: Develop an algorithm by which computers can meaningfully interact with these data structures in order to make meaningful and increasingly refined predictions about the structures in question.

I’ve already worked out a good deal of the difficulties of step one during my previous efforts with Orchid, but it’s really step two that’s giving me trouble. I presume step three will be the most difficult, but I’ve logically decided not to even consider that yet as to preserve the amount of unpolluted thinking space that currently exists in my brain. Anyway, step two. How do we possibly do this? My first goal is to essentially translate simple statements into mathematical structures that are meaningful. So take this, “If I stack blocks on top of each other, I end up with a taller structure.” Incredibly simple statement, right? Well, how do I translate that statement into a working mathematical entity? That’s a pretty tough question.

I think my mistake for the past day of thinking about this is that I was attempting to match any object or stable structure with a corresponding mathematical entity. Ideally this mathematical entity would be sufficiently robust to fully describe the object in question, including the object’s behaviors. But that’s really tricky. Take me for example. If I jumped off a cliff, a meaningful question might be, “How long is it going to take this boi to hit the ground?” Good question, reader. I certainly would like to know how many seconds of life I have remaining. However, imagine I insulted a friend of mine, causing them to be angry (purely hypothetical, (hehe)). Based on my previous method of description, I would have come up with a mathematical entity that described Danny Geisz and used that object to model the two previous situations I described. But what sort of object would I be? Like, for real? Should I be modelled as a mapping from my environment to a particular phrase, which would in turn be modelled as a mapping from my friend’s previous emotional state to his/her final emotional state? What about the first situation? Should I simply be approximated as massive object as traditionally used in kinematics? If that were the case, then I would be a simple scalar: mass.

I’d like to think that there’s a bit more to me than my mass, so that’s clearly not the way to go. Maybe a slightly better method for modelling myself would be as a cartesian product of a variety of sets that together describe my characteristics and interaction with reality. Still, though, that seems insufficient and highly disorganized.

What I’m realizing even as I write this is the importance of context. The context of me jumping off a cliff ought to be modelled differently than the context of insulting a friend. Specifically, (and now I’m really going stream of consciousness) a particular question should be posed, and a particular quantity studied. More specifically, the characteristics and behavior of the entity being studied should be described in as great a depth as reasonable by mathematical language, and everything else ought to center around that main model. For the example of me jumping off a cliff, the two important quantities are time and my height off the ground. When my height reaches 0, we measured the time elapsed, and wala! We found an accurate prediction of the time I have left to live. (Congrats, Danny, you’ve done basic kinematics).

The situation of the emotional state is a bit less traditional. I think in this situation, the important quantity is the friend’s emotional state. Then we can regard my insult as a mathematical mapping of the previous emotional state to the final emotional state. Furthermore, we could model me, Danny Geisz, as a mapping from my current emotional state, to the words I said to my friend, which affected his/her emotional state.

In Quantum Mechanics, a particle is described as a wave vector. Why? Because simple mathematical manipulations on a wave vector yield interesting quantities like a particles position or momentum (specifically the probability that a particle will have a specific position or momentum). So basically, the interesting quantities of a particle (within the context of QM) are modelled as a wavevector, and any other entities that interact with the particle are modelled as transformations on the wavevector. Neato.

I suppose my goal, however, is to build a computational system that’s capable of analyzing a set of data and generating mathematical models that describe the data. These mathematical models could then be used to make a more cohesive and robust set of predictions about the world than the models traditionally associated with machine learning. If I’m trying to build a computer that beats a human, I need it to be able to replicate the human experience and do it in a manner superior to humans. Humans are really quite good at classifying objects and using logic to make predictions based on their “modelled” view of particular stable structures. So I want Orchid to do this, but better.

After writing this, I’m realizing that simply regressively generating mathematical models isn’t sufficient for the level of classification I require. I think I need to do some more thinking about the relationship between a structure and a mathematical context, because that’s the space where computers could excel relative to humans. Ok, that’s all for now.

A Very Light Shade of Blue

By: Danny Geisz | February 24, 2020


Jambo! My oh my have I neglected to write these posts. My glorious vision for XFA was to write a post every single night. Well, guess what. That didn’t work. It turns out life takes time.

It’s truly been a minute since I scratched the metaphorical nub across this metaphorical piece of parchment. What has happened during that time, you ask? Well, non-existent reader, I had various emotional nadirs.

But before that, why did I name this post the way I did? Because, gentlemen and female gentlemen, I am stream of conscious-ing this post like I have never done before. Some of you particularly befuddled readers are probably wondering what the rest of this flippin’ site is if not for a stream of conscious montage, and to that I can say…nothing. You would be absolutely correct.

Who cares? I have a difficult time believing anyone does, so onward to glory, to victory, to death, and the grave (that’s for you Dr. Ridings).

Oh gosh. There is so much coursing through my mind-icles right now. WHERE DO I BEGIN. Oh I know.

So I decided that my life isn’t nearly busy enough, so I have taken on a super-secret project. The person with whom I am working on this particular project wishes that I keep everything hush hush, so to honor her wishes, I won’t divulge any juicy details.

What I will say, however, is that it involves building an app. FRIK YEA. Ya boi ex fizz has been looking to get into the app dev business for a couple and half minutes or three. At one point in high school, I very unsuccessfully tried to start building Android Apps using Android Studio, but that was a cataclysmic failure, mostly cause I didn’t really know Java at the time.

But times have changed, brethren. No longer are we humans confined to the dark ages where people had to write two separate code bases for Android and IOS apps. No, my friends, we hath progressed. Whilst we lay stewing ignorantly in Xcode and Android Studio, the glorious gods of Facebook bestowed upon humanity the most glorious creation man has ever witnessed: React Native. No longer would the common man have to know Objective-C/Swift and Java in order to build a cross-platform application. After the glorious arrival of React Native, humans need only write their codebase in JavaScript, which would then be exported to either IOS or Android Applications.

If any of you reading this are actually app developers, you are probably shaking your slimy heads and grinding your moldy teeth because I’m so behind the times. Yes, I know FB released React Native 4 years ago. Whatever. I don’t care about you haters. Let your boi enjoy the wonders of React Native in peace, OK?

The rest of you probably have literally no idea what the flip shack frack I’m talking about. Look at me go: in one simple paragraph I have lost the attention or respect of app developers and non-app developers alike. For those of you keeping score, that partition of humanity is in fact the entirety of humanity. I guess I’ll just be lonely. I am, after all, alone in my room, typing away at a blog post that very few of my friends will ever read. Ha. Life is just the funniest thing.

Any discussion of my current loneliness provides a wonderful Segway to my next topic: mental health! Oh boy! Because I know the internet is a trustworthy place full of caring, loving individuals, its time to get personal. I, Daniel Matthias Jehoshaphat Geisz, am going to a therapist this Thursday. Apparently, there’s some sort of stigma associated with therapy, but I think I have done such a tremendously laudable job distancing myself from the rest of humanity that I feel rather immune to societal judgement. That is, of course, until someone judges me to my face. Then I’ll just wilt away like a dainty lil’ fuchsia under the gales of a Missouri storm.

Why am I going to a therapist? Well, I suppose that is the question. Many people throughout my life have told me I should see a therapist. Actually, in retrospect, maybe I should have taken offense at that. Eh, who cares. Life is too short to be offended. And, I mean, maybe they were right.

The real reason I’m going to the therapist is because, for a variety of reasons, I took Berkeley’s online screening for bipolar, and my test answers were very consistent with someone who has bipolar. Now then, do I think I think I have a serious case of bipolar? Absolutely not. I happen to know someone with this condition, and I cannot even begin to imagine what bad bipolar is actually like. Be that as it may, I suppose the narcissistic side of me is quite interested in talking to someone about myself and seeing what they have to say. Hopefully it will be…therapeutic. Ha.

I have been quite emotional lately. I suppose now is as good a time as ever to discuss that in some level of detail. Those of you who know me (let’s see, that’s all of you) will probably know that I was raised in a Christian household by my truly wonderful Christian parents, and that I took Christianity very seriously my entire life. My childhood essentially had the effect of baking in a belief in God to my very existence. With this belief in God came a certain belief in the afterlife. Regardless of whether I made it to Heaven or Hell, I was guaranteed existence after death.

Now then, even though I logically decided two months ago that I do not believe in Christianity, my body basically still did. What I mean by that is that for 20 years I became so used to believing in Christianity that my brain wasn’t really emotionally ready to accept my decision, and so I’ve basically been subconsciously believing in the afterlife for these last two months, even though I logically don’t believe in anything.

This all changed this last week, however. My brain was finally ready to accept my change in beliefs, and for the first time, I was forced to emotionally reconcile with the notion that this life might be the only life I get. For those of you out there who don’t believe in the afterlife, this realization is old hat for you. For me however, I was basically stripped of the emotional security I have been carrying with me for 20 years.

Normally, I try not to be too dramatic about my personal problems because that’s literally so annoying, but honestly who the hell is actually reading this? I don’t think I’m going to publicize this post, so I think it’s safe to say it’s going to get about zero views.

To that end, stripping is terrifying. No one likes to strip, particularly when it’s the metaphorical stripping of emotional security. Basically, I was frickin terrified of the future. For those of you fluent in the enneagram, I’m pretty sure I’m a 6, and 6s really don’t like it when you take security away from then.

But, blessed readers, I emerged from that gauntlet like the offspring of a hippocampus and a griffin. The fear of what’s to come has been crippling me…So to your silhouette I turn once more. Gotta love Mumford and Sons. Anyhooooo, this minor emotional setback has really driven home the importance of living in the moment and enjoying the present. Wow I’m original. Slap that on a building and call it a plaque.

Well now. I think that’s enough stream of conscious for one night. I’ve been trying to get to bed earlier anyway, so tonight’s going to be a win, win, win. A phat W, if you will. An upside-down M, if you won’t.

Best of luck with all your endeavors, and may no goblins attempt to lick your pinky toes.

Stop and Smell the Orchids

By: Danny Geisz | February 16, 2020


Bon-frikin-jour, brethren! What a week it has been. Last night my housemate and I journeyed into San Francisco to see the SF Symphony perform Saint-Saens’ Organ Symphony among other pieces. The Organ Symphony has a special place in my heart because:

  1. Saint-Saens was a musical sorcerer and everything he touched is distilled platinum.
  2. I myself played the Organ Symphony back in my glorious bassoon days, and I know the piece in and out. Listening to it performed live is remarkably similar to the feeling of seeing an old friend.

This schmeag named Jean-Yves Thibaudet debuted a spicy, spicy tango concerto for piano which was also quite fun. Monsieur Thibaudet is apparently one of the sauciest pianists still trotting, but I certainly hadn’t heard of him before this concert. Perhaps I need to make a better effort to remain attached to the culture of classical music. Perhaps not.

Now then, onto Orchid! Gracious me. I just looked at the Orchid project, and to my general horror I have only posted one piece about Orchid. This is slightly egregious because Orchid is hands down my most time-consuming personal project right now (aside from Project Supernatural, which implicitly consumes several hours per day), and literally the whole point of XFA is to document such endeavors. Perhaps I should just drop all pretenses of XFA being anything other than a brain dump for me. That would certainly be easier to explain in person. Eh, I like it as it is.

So what’s the latest news with Orchid, you ask? I think I’ll give a bit of an update as to my general progress, and then I shall give an account about how this project is affecting my life.

Superficially, Orchid has changed very little since I last posted. Actually, it literally doesn’t even properly compile, so to the untrained eye it may appear that I’m doing everything all wrong. However, if you take a peep under the hood into the code base, you’ll see an expansive evolving architecture for this project. You may remember from previous posts when I was noisily complaining about Orchid being the most organizationally challenging project on which I have ever worked. Well, blessed readers, nothing has changed. I’m not gonna lie. This is hard.

For my own personal gratification, I will now give a bit of an overview on how this project is working from a software perspective. If you consider yourself above computer science nerds, by all means, skip these next paragraphs and go to the part of the story where I tell the tale of Orchid provoking emotional breakdowns.

If you read the first post, you will know that one of my principal goals for Orchid is for it to look really good. Like Latex, for those of you who are familiar. This, in practice, is very difficult to accomplish. At the beginning of the project, I had to make the very big decision about how I want to actually render the math onto the application window. This is tricky, because I need the computer to be able to tell what mathematical terms are being clicked, which means the computer has to know where the terms are being rendered on the screen. This isn’t a problem if you’re using a text editor, and the computer only has to worry about one line of text. It is a problem if you’re trying to allow for more complicated mathematical expressions that aren’t linear in writing.

Because I really am trying to avoid reinventing the wheel as much as possible, I ended up settling on a slightly strange approach to the problem. During my research, I noticed that people have gotten really good at rendering math on web pages. Web pages are nice because you can add behaviors to each of the individual html elements that can allow you to easily detect if some element has been clicked or is highlighted, or whatever else.

Now then, JavaFX (which is what I’m using to build this application) has a cute little feature called a WebView, which can be used to display web pages. With Orchid, I basically have a WebView as the main editor window, and in the background, Orchid is just adding html to and manipulating the WebView’s DOM. I’m actually quite happy with this approach because I can very easily use the application to convert the entire editor window into html, which can then very easily be converted into a pdf.

This approach is, however, a bit quirky because I’ll have JavaScript listening to what the user is doing with respect to the main editor window, and the JavaScript will communicate this to the Java on the backend, so it kinda feels like I just stuffed a website into a desktop application (which is exactly what happened).

Another reason Orchid is a bit strange is because it doesn’t really lend itself to a MVC architecture. This is simply because each mathematical term in the model has a one-to-one correspondence with an html element in the WebView’s DOM, so it actually ended up making most sense to have each piece of the model be able to contribute to the view. So then, while the controller is abstracted from the model and the view, the model and the view are extremely parallel in nature, which is interesting.

Gracious me, if you don’t like CS, I super hope you didn’t read those last paragraphs. It honestly may not have been comprehensible to those of you who do like CS. Whatever. Let’s go right on ahead to how Orchid is messing with my life.

A simple axiom of my current existence is that I would rather be working on Orchid than doing my schoolwork. While this is of course in part due to the fact that I find Orchid more exciting that things like finding the infimums of sets, there are also more subtle reasons. Interestingly enough, ever since I started working on Orchid, whenever I’m doing math or physics, I’m always subconsciously trying to figure out how I would approach the current problem with Orchid, once it is completed. Because Orchid is inherently category-theory based, this mindset is actually quite useful in understanding the subtleties of various equations.

However, this has also started biting me in the butt. There are some topics in physics that Orchid will be able to handle incredibly easily and efficiently, and so now it’s frustrating to do my physics homework by hand because I know how much faster and easier it would be to do it with Orchid.

So then, the very idea of Orchid is making me frustrated with my math and physics homework, which isn’t exactly where you want to be when those are the subjects you’re majoring in.

Another reason I find Orchid to be particularly compelling is because it’s literally a perfect marriage of math, logic, and computer science. It’s kinda my ideal project. And because of that, I would rather be working on it than, well, most anything else.

Finally, I have found throughout my life that I tend to learn more useful information from my own personal projects and academic pursuits than I do in my classes. This is simply because school and classes can’t tailor their curriculum to the interests of each student, so they just teach you a ton of generally useful information, most of which you may never need. When I’m working on a personal project however, whether it be Orchid, building XFA, or ever learning Quantum Mechanics back in High School, I’m only learning information that is personally gratifying and applicable to my interests.

Now, I’m going to complain like an annoying twit.

I’m generally just frustrated with college in general. There, I said it. It feels like I’m spending a tremendous amount of time learning somewhat useful information when I could be spending my time learning and applying more practical information.

Gracious me, I’m starting to annoy myself. I’ll get straight to the point. My frustration with academics coupled with my liminal spiritual state has made me particularly prone to emotional crises. Two days ago, I hit the emotional nadir of my semester. I wasn’t doing great, I’ll admit.

Well whatever, enough complaining. I know for a fact that some part of me loves all the math, physics, and CS I’m doing in school right now, so I’m just trying to bring that mentality to the forefront of my mind.

Wow, I’m fading. I suppose if you want to take something away from this post, know that Orchid is a fun and cool boi. I got midterms to study for. Peace.

The Birth of an Orchid

By: Danny Geisz | January 23, 2020


Good morning, schmeagy deags. I bring tell of great tidings. I have finally started birthing an Orchid. To formalize the previous statement, my mind has begun the painful, several-year-long process of giving birth to Orchid. What is Orchid? Certainly not a human child. I don’t have the biological hardware for that. Will it be as good as a human child? I suppose that will be for the world to decide.

You’ll notice I never answered the first question. To put it in the most boring way humanly possible, Orchid will be a piece of mathematical software. Bleh. To put it in a far more intriguing way, Orchid will be a tool that allows human beings to mercilessly take advantage of the parts of computer that are better than humans to construct magnificent pieces of logical structure with extreme simplicity.

If you’re at all involved in STEM, you probably have some level of familiarity with Mathematica, Maple, or Matlab. For the uninitiated, these are all programs that have been developed over the course of several decades and are essentially superpowered calculators. I do not mean for Orchid to attempt to overthrow these three giants of this particular industry. That would be ultimate folly for several reasons:

  1. Mathematica, Maple, and Matlab are all extremely good at what they do. It would be a staggering waste of time for me to try to build something even slightly like these pieces of software.
  2. These pieces of software are actively being developed by large groups of people. Regardless of any claims made about my arrogance or egotism, I assure you all that I would never hope to accomplish in any short amount of time what a group of several hundred people have accomplished over the last several decades.

Goodness, that was only two reason. Last I checked, “two” doesn’t fall within the set of numbers described by “several.” Well I think they are both good enough. Those of you familiar with the Big Three mathematical programs know the staggering breadth of mathematical material that they support. What then could I possibly wish to accomplish with Orchid? What will Orchid be able to do that these pieces of software cannot?

I will answer by giving you the story that motivated Orchid in the first place. Last semester, I wanted a break from my regular schoolwork, so I bopped on over to the law library and violently threw open Steven Weinberg’s Foundations of Quantum Field Theory. That book is, in a word, dense. With my other courses last semester, I took me about four months to get through the first (real) chapter of the book. I was finally at the point where I could start working through the problems at the end of the chapter. To many of you readers not actively involved in physics, you may be wondering why on Earth I was purposely subjecting myself to the third level of hell. To many of you readers actively involved in physics, you may be wondering why on Earth I was purposely subjecting myself to the third level of hell. To those of you readers who actually enjoy theoretical physics, you will know exactly why I was purposely subjecting myself to the third level of hell, and understand I was doing this for the same reason a drug addict will go to any lengths to get another sweet, sweet hit of whatever particular substance has been giving them problems.

Because I was in Weinberg’s book, the problems were hard. Like really, really hard. However, I wasn’t annoyed by the length of the problems, I was annoyed at how I was doing the problem. I was naturally doing everything with pencil and paper, and I found that I was constantly rewriting extremely long equations with an incredible number of moving parts. I think everyone except the true weirdos can agree that the act of constantly rewriting extremely long equations is incredibly tedious, but it is also extremely prone to errors. Eventually, blessed readers, I had had enough. You better believe I wanted to find the Lie Algebra of the Galilean group, but at a certain point, a girl has got to put her foot down. I, being the metaphorical girl, fled the Law Library feeling particularly defeated.

As a budding computer scientist, however, I had another reason to be frustrated. Literally one of the biggest purposes of computers is to do simple monotonous tasks that probably could be done by humans. Why couldn’t I just use a computer to find the Lie Algebra of the Galilean group for me?
With this question glistening upon my tongue, I started a deep dive into the documentation of all the major pieces of math software with which I’m familiar. These pieces of software are incredibly good and fast at doing standard computations in a wide variety of fields in mathematics. Their issue is that they don’t allow you to define your own logical structures with their own rules. The particular piece of mathematics that I needed to do cannot easily be done using the Big Three.

I then began researching the incredibly huge variety of other pieces of mathematical software. The closest thing I found to a software that could solve my problems are two programs called Coq and Lean. Let me tell you, the language and interface for both of these pieces of software are absolutely disgusting. Coq in particular has that “90s software” feel that makes everyone want to amputate one of their feet.

From the beginning of this venture, I felt I would likely need to develop my own piece of software to accomplish my needs, and as I continued to research, the requirements and features of what I now call Orchid came to me as though from a half-remembered dream. In essence, I have two main requirements for Orchid:

  1. It does math like we normally do with pencil and paper.
  2. It looks good. We’re talking LaTex, but LaTex that is mathematically interactive.

As a final note, some of you overly masculine readers may ask why I am choosing to call the system Orchid. I could give you some hooplala about Orchids being beautiful yet unique, or them having cool adaptations that mirror logical structures. That ain’t true. I wanted to name it something cool that in my mind evokes a similar emotion in my being as when I think about the Euler-Lagrange equation. “Orchid” therefore, fit the bill remarkably well.