Tag: Web Dev

Ben Awad. That is All.

By: Danny Geisz | April 19, 2020

Project: Super Secret App Project


Ding, Ding, Ding! Who’s that at the door? (The door being a metaphorical construct for the web page you’ve just opened). That’s right! It’s me, Danny! Remember me? Who cares! Let me tell you about someone who isn’t me, namely Ben Awad.

Actually wait, hold up. I’ve been lying to all of you, and I need to clear my conscience under the witness of the heavens above and the hells below. I am not a triple major. After taking a math class this semester, I have determined that my time would better spent on other classes than math. I suppose I should probably change that on the web description. Now while I know this earth-shattering revelation affects precisely 0% of you readers, I thought I would clear those matters up before the Jersey Devil caught scent of my malfeasances and deceptions.

K, enough about me. Let me tell you about Ben Awad. Those of you especially exalted readers who have been regularly keeping up with my postage (I can’t imagine that’s proper usage, but who the frickedy frick cares) will know that there are several people who I regard as loves of my life. Grimes, Elon Musk, Corey Schafer, the usual suspects. But let me spin you a tale, (hopefully) enraptured reader, of a boi forging an app who got lost in a deep deep sauce, saw no way out, but then was saved by an unsuspecting YouTube channel.

It all started last week when I essentially finished the bulk portion of the front end for SSAP (super-secret app project). I was in a state of high glee, and I decided it was time to turn my attention to user authentication and registration.

Now then, for most of you schmeags, all authentication is to you is the simple action of hitting the “sign in with Facebook” button and having all your life problems solved. For me, authentication was nothing less than a zombaic dire wolf lurking in the darkness, waiting to sink its teeth into my left shin (this particular dire wolf has an affinity for the left shin. Experts are unclear why it would go for the left shin instead of the right shin, which is known to have potent healing properties, but I suppose you’ll have to just contemplate that on your own time).

Let me pop out of my narrative for just a moment because I imagine that discussion of a metaphorical dire wolf has entirely derailed my train of discussion. Why is authentication such a butt? Because, as I imagine you sensible readers know, this is where ruthless hacking and spamming can occur. In order to prevent this, there are all sorts of protocols and practices in place like OAuth, JWT authentication, refresh tokens, API throttling, to keep this from happening, but it’s a scary world. Alright let me hop back into my train of narrative.

There I was, in the metaphorical darkness, my ears bleeding for any sound of the dire wolf lurking towards me, when there, above the horizon, I saw a light. As quietly as I could, I crept toward this light. As I approached the source of the blessed warm rays of light, I heard a snuffling to my right. I was able to fling myself upon the ground just moments before the dire wolf leapt toward my left shin, eager for developer flesh.

As luck would have it, the dire wolf sailed over my body, and I scrambled toward the light, blood pumping in my ears, adrenaline coursing through my veins. The wolf must have taken a nasty tumble, because I was able to make it to the center of the wonderful luminesce. And there, shining like a beacon in the night, were the words “Amazon Cognito.” I thanked all the unknown divinities watching over my passage through the night, and looked closer at the glorious words, wondering how I might be able to use this magnificent tool. But to my horror, upon reading the fine print, I learned in order to use Cognito, I would have to give up not only my first born, but also my second born child. I sank to my knees, and wept bitterly, wondering how the universe could be so cruel.

Ok, let me pop out of the narrative again. So basically Amazon Cognito is an Authentication as a Service (AaaS) platform that handles all the various aspects of user authentication for you. This is obviously pretty great because you, as the developer, don’t need to worry as much about security concerns with respect to your application. The catch here is the “as a Service” portion of the title. While Cognito is initially free (up to like 50,000 monthly users! Dang!), after that, it starts to cost you a butt ton of money. Also, from what I can tell, it’s either difficult or impossible to transfer your user information out of Cognito, so once you start using it, you’re basically locked in. Back to the narrative.

There I was, a broken man, lying close to a source of glaring brightness. The brightness, however, had lost its cheery glow and now only cast a cold, lifeless glare over the surrounding forest. Utterly defeated, I managed to glimpse another source of light further into the forest. I could hear the wolf snuffling in pain from its earlier fall a good distance away, so I stumbled back into the dark forest towards the other light source.

I approached what looked to be a similar shining object as Amazon Cognito lying on the forest floor. Slightly squinting, I could make out the words “Auth0” shimmering up at me. Wary from my experience with Cognito, I carefully read through the pricing model of Auth0, and once again I was struck with a sense of galactic brutality as I read the Auth0 requires their users into slavery in exchange for its services. I maliciously cast Auth0 back to the ground, and hunched my way back into the forest, looking for anything.

After several more hours, I found one last source of life, “Okta.” Okta was similar to Auth0 in its terrible price, so I slumped back through the forest and eventually lay down at the base of a great tree, waiting for the dire wolf to find me and relieve me of my left shin.

Hopping out of the narrative. As you may have guessed, Auth0 and Okta are also AaaS. From what I can tell, they have more features than Cognito, but they’re even more expensive. It’s honestly egregious. Let me tell you, I’m not a fan. Hopping back into narrative.

For hours I lay at the base of the great tree waiting for the wolf. Delirious and starving, I thought I was dreaming when I heard the faint glittering of bells toward me right. As I lay there, powerless to stand, I glimpsed a glowing figure approaching me. The figure knelt down beside me, and gently placed a hand on my chest. As though I had been touched by the very hand of the divinities, I felt strength rush through my body. I staggered to my feet, and even as I watched, my arms and chest began swelling with thick cords of raw muscle. Not my legs though, because even supernatural forces can’t save you if you skip leg day.

I looked over my powerful new body, feeling my deltoids flex as I stretched my arms around my body. I looked at the glowing figure, and saw that he was hooded. From within his robe, he withdrew two swords.

“This sword is called ‘Json web token,’ and the other’s name is ‘Argon2’,” he told me. “With these weapons in your hands, not even the dire wolf will be able to stop you.”

I took the swords from him and tested their weight and balance in my hands. Even as I did so, he unsheathed a dagger and offered it to me as well.

“This dagger’s name is ‘Graphql.’ I offer this as a gift and a peace offering, for you to use it as you see fit.”

As I sheathed the dagger, the hooded figure turned away and began walking back into the forest.

“Wait!” I called, “Why have you given these to me? Who are you to do so?”

The figure turned back to me, and I could faintly see a smile playing across his lips.

“I am Ben Awad,” he said. “Freely I give you these gifts. Now go, defeat the wolf and reclaim your destiny!”

He raised his left hand, a badly scarred yet powerful looking appendage, and made a thrusting gesture towards me. I yelled out in surprise as the forest folded in around me, in a suffocating, yet potent display of sorceraical dominance.

For exactly three seconds I hurtled through a mottled darkness, unable to move even my smallest finger, but then, as quickly as it started, reality unfolded, and I found myself standing in the light of Amazon Cognito once more.

I squinted, my eyes adjusting to the bright light, and I heard it before I saw it. I put a hand over my eyes to guard against the glare, and there before me lurked the dire wolf, in deep crouch.

Even before I could prepare myself, the wolf leapt. I dodged to the right, but not before the wolf grazed my left shoulder with one of its front claws. I staggered to the side and drew Json web token and Argon2 from their sheaths.

The wolf had regained its footing and was already pouncing at me again. I was able to crouch to the side, and I swung Argon2 over my head as the wolf sailed overhead. I felt the sword thud against the wolf’s pelt just before a sickening yelp escaped the beast.

I had lost my footing when the Argon2 had struck true, and before I could get to my feet, the wolf had already turned and was hurtling back at my unstable form.

And in that instance time slowed to an ungodly creep. Twenty feet above the ground, Ben Awad was levitating, a hand held outstretched. I lowered my eyes back to the wolf, to see the monster flying towards me as though through a thick syrup. Murder gleamed both in the dire wolf’s eyes and teeth, its terrible glare fixated on my shin.

Though my arms moved at agonizingly slow rate, I drew both Json web token and Argon2 and directed them towards the wolf.

In those final moments, I could see that the wolf recognized his error. The murderous glare in its eyes turned to fear as it hurtled towards my outstretched swords, powerless to stop the inevitable.

Overhead, Ben Awad made a clutching motion with his hand, and time quickened to its standard pace. The wolf slammed into me, and I felt my swords slide through its unprotected body. The beast made a horrific gurgling noise, and then its lifeless form fell on top of me. And even as I lost consciousness from the exertion of the battle and my wounds, I knew that with Ben Awad’s help, I had just conquered the dire wolf of user authentication.

Ok, concerned readers, I’m well aware that we just hit the eighth page. This is a new record. So then, in a manner horrifically similar to high school English classes, let’s sit down and quickly unpack this. Basically, after realizing that Cognito, Auth0, and Okta were all no goes unless I wanted to do the equivalent of dropping cash off a cliff, I desperately hunted through the internet looking for ways to properly approach user authentication. After literally hours, I randomly stumbled on a YouTube video about using Json web tokens (JWT) for authentication. As you may have guessed, this video was by a lad named Ben Awad. It was a veritable bucket of gold. I’m not sure where Ben Awad works, but he’s an American Hero at the very least. His videos are really just well-distilled alfredo when it comes to clear descriptions of authentication flows and implementation. As you might have guessed, Ben Awad is the lomlofm (Love of My Life of the Month).

To keep this from going to nine pages, I’ll wrap this up by saying for the 0.5% of my readers who care about server programming, Ben Awad is your boi. Check him out, smash that subscribe button, ask for his hand in marriage, all of these are appropriate. Mahalo nui loa.

The Joys of App Forging

By: Danny Geisz | April 8, 2020

Project: Super Secret App Project


Hi. You know how all the kids are saying “it’s been a minute,” or “it’s been a phat second?” Well, in the name of bad floutations, it’s been an hour since I last wrote about my super-secret app.

I know the progress of some random schmeag’s (my) app is a top priority for most of you casual readers, so I’ll have you know it’s generally going quite well. I continue to be stunned and amazed at React Native for so easily allowing for the creation of masterpieces in the form of JSX tree structures. Frankly, I think might compose a poem for React Native. Here goes:



In the beginning I was lost,

With no clear way ahead,

Then a new software I was sauced,

Which silenced all my dread.

For Lord Facebook gave to us,

A tool most creative,

To end app-making fuss,

The glorious React Native.

Components are my brush,

And renders are my canvas,

With Stylesheets so lush,

I emerge out of the madness.

So lavishly use props,

Keep careful tract of state,

Your app will reach the top,

For React Native is the gate.



I think that’s probably one of the better things I’ve done. So yeah, I like React Native. Nothing new there.

I’m just now realizing that because I can’t reveal any other details of the app at this time, these posts are essentially just becoming a software review. Well, I suppose that’s good for me. In my experience, there’s nothing that really speaks to the hearts and souls of the worldwide population more than a software review. That said, buckle up kids, and let me tell you about the cutthroat world of APIs (Application Programming Interfaces).

Let’s talk about Google. Now I know most everyone at this point is at least a little apprehensive about Google. Recently they used their truly staggering stores of data to analyze the spreading of COVID-19. Great, except for the fact that it gave the general population a truer sense of how much data they’ve unknowingly given away to that great glutted pig.

Perhaps less known to the general population are the wide range of software and computing products Google offers outside of their basic search engine. I’ll certainly give this to Google: they’ve open-sourced a ton of incredible software like TensorFlow and Android, and that’s pretty great of them. However, their APIs are so expensive. One aspect of my app deals with determining a user’s location based on their GPS coordinates. I wanted to use Google Places API, until I realized that it costs a metric butt-ton. It’s kinda insane. I guess that’s the sort of stuff you can do when you’re a multi-billion dollar glutted corporation.

Let’s move on from Google, and let’s talk about WebSockets. While I don’t have the same feelings for WebSockets as I do React Native, they’re pretty darn close. Now I bet you probably think WebSockets are just another nerdy thing that nerdy ol’ Danny likes. Yes, you would be absolutely correct. However, you like them too, you just don’t know it. All of you online gamers out there, ever wonder how a bunch of different people can play the same game at once? WebSockets. I was going to give another relatable example of how WebSocket are used, but I don’t wanna. Basically any real-time feature of an app or software is best done with WebSockets. What are WebSockets, you ask?

Well, inquisitive reader, WebSocket is a computer communications protocol that allows for two-way communication using a single TCP connection. I know, I know. I can feel you trembling in excitement. So was I when I first learned of them.

In real-people language, what this means is that people created a wicked fast way to transmit information between various parties, which is really just the best thing ever when you’re developing an app that has a variety of real-time features.

Hmm, I’m trying to think if I’m using any other juicy software. Well, I guess this isn’t a particular dependency in this project, but a general shout-out to Jet Brains for forging some of the illest, dare I even say trillest IDE’s this side of River Styx. Some people I’ve talked to don’t like the bulky overhead associated with modern IDE’s (@IntelliJ), but it’s the only home I know. Bless your frikin’ souls. I do not exaggerate when I say that every single time I open WebStorm or IntelliJ, I’m filled with a sense of calm and joy. Well done.

At this point, I’m just grasping for straws, but let me give a shout-out to the haversine formula. What is the @#$%#ing $%^^& is the haversine formula, you ask? Well, enraged reader, the haversine formula is a formula that allows you to calculate the distance between two points using their latitude and longitude. It really makes developing geo-features a blessing.

Well, I’m done, I think I will take a seat, but before I go, here’s one last beat. (That was the last lyric to the first song I produced at Berkeley. Talk about a flashback). Peace!

Stop and Smell the Orchids

By: Danny Geisz | February 16, 2020

Project: Orchid


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.

Quasi-Documentation Story for XFA Genesis

By: Danny Geisz | January 18, 2020

Project: XFA Genesis


Just as a brief warning, this post is going to be quite technical. I imagine this content might be dry for those of you who aren't computer science-ically inclined. For those of you who are computer science-ically inclined, I can only hope this will be useful, but know the following content is mostly for my own benefit. If you're looking to be entertained, I suggest hitting the next/previous buttons on the bottom of the screen.

Now then, I have largely finished the architecture for the XFA site. I think it is very likely that I will build more web apps in the future, so I’m going to write what I like to call a documentation story for this project. The “Quasi” prefix is there because the last time I wrote a documentation story it was incredibly long and detailed, and here I’m only really going to include important points from the project. This is going to be in mostly chronological order with respect to when I completed the various parts of the project. I should also note that this is also mostly for my benefit, and this shouldn’t be taken as a comprehensive guide.

Django:

There are five main parts of a Django web app (when you’re using Django templates): Models, Views, Urls, Templates, and Settings. I will go over each in order.

  1. Models: Models are the Django python abstraction for entries in a database. They are really quite straightforward once you get the hang of it. To figure out how they work, it’s easiest to look at examples. If you want a field in a model to be optional, be sure to include null and blank kwarg options. Make sure to run manage.py makemigrations and manage.py migrate when you create or edit a model.
  2. Views: This is how Django handles Url requests. Basically, you use Django’s database API to get necessary data, and then you create a context object containing information necessary to render a specific page, and then render a page using information from the context object and a template.
  3. Urls: Django provides a way to create beautiful Urls. Writing Urls.py is quite straightforward, but two things are worth noting. You can include urls from different files throughout the project by using the “include” function. This is very easy. You can also create Urls that contain contextual information that is sent to Views in the form of kwargs.
  4. Templates: Django provides a wonderfully easy way to make dynamic templates that render to HTML using context passed in from a particular view function or class. I will talk about two features. You can use {% block %} to create template blocks that can be included in other template files. This is a very useful functionality if you have various features of a web app that appear on each page (like the header, footer). Django allows you to use namespaced Urls in templates, which means that if something changes with the urls of a project, you don’t have to change the hrefs of all the anchor tags. This is quite good. You can also call functions of different objects from within templates.
  5. Settings. This file obviously contains the settings of the project, but a couple things are worth noting. You should use a config json file or environment variables to store sensitive information about the project. This is also where you can include a list of other Django compatible web apps.

HTML / CSS:

This is really only my second web dev project, so I learned a great deal about HTML/ CSS in this project. I’m going to include points that I find valuable. Some of these are quite basic.

  • Use divs to organize everything.
  • Use position: absolute if you know exactly where you want the element to be located.
  • If you use position: absolute, make sure the parent element has its position set to relative.
  • Margins are everything. Never forget.
  • To specify where something should be, margin, height, width and padding. Never forget.
  • The order of margin and padding is top, right, bottom, left.
  • Make sure to be mindful of cross-browser support.
  • To make a transparent linear gradient not look grey on mobile, use rgba, and make the “a” value 0.01.
  • Keep making websites and keep learning.

Materialize CSS:

I used the Materialize CSS framework for some of the CSS heavy lifting. Here are some important things to be done with Materialize:

  • Use center-align for alignment. This is so very wonderful.
  • Use container to put content in the middle of the screen. This is also so very wonderful.
  • Use Rows and columns for positioning objects. A very good feature.
  • The “hide-on-small-and-down” and other hide/show classes are incredibly useful for making webpages look good on mobile.

Deployment:

This was very daunting, but thanks to Corey Schafer, everything is up and working. This was my process for getting the XFA site up on the interweb.

  1. Make a Linode account.
  2. Create a new Linode Server. Mine runs Ubuntu 19.10. In retrospect I probably should have used Ubuntu 18.04 because its LTS, but hopefully that doesn’t bite me in the butt too hard.
  3. On the server, create a new user with sudo privileges. Honestly for the next couple steps, the best way to relearn is to just rewatch Corey Schafer’s videos until you understand everything completely.
  4. Set up SSH for passwordless authentication.
  5. Install ufw (uncomplicated firewall).
  6. Install and set up an Apache2 server. I’m a bit fan of Apache because it’s configuration files are pretty straightforward.
  7. Use git to transfer files from local to server (more details below).
  8. Configure Apache to work with the Django wsgi.
  9. Allow http traffic from the firewall.
  10. Buy a domain from a domain registry and set its namespace records according to Linode’s instructions.
  11. Use Linode to configure RDNS for your domain, and in your settings.py make sure you include your domain in the list of allowed hosts. More details in Schafer’s vid.
  12. Your website should be up and running by now, but it won’t be secure.
  13. Use let’s encrypt and certbot to make the site secure. These instructions are on Let’s Encrypt’s website.
  14. Add a section in the firewall configuration to redirect traffic from the non-www to the www site. This was causing some issues.

Setting up Git: This is super important because it allows you to develop on your local machine and easily push changes to the server. I will redirect you to this link which has much more information about this. Somethings to note about this process. Include your settings.py and your db.sqlite3 database in the .gitignore because you will have different settings for your live Django app than for your local Django app. It is also best practice for the server to have its own database. I used PostgreSQL for my live server. It’s super easy to setup and configure with Django, and Django migrations worked just as well for the Postgres as they did for Sqlite.

I think that just about covers everything. There are, of course, a ton of other nitty gritty details to figure out, but that’s how any software project goes. Once again, I’m mostly writing this as a way for me to remember the main steps for building a web app with Django. Perhaps this may be of some use to the rest of you.

Corey Schafer is the Love of my Frikin Life

By: Danny Geisz | January 15, 2020

Project: XFA Genesis


I did despair, my friends. I had sunk low into the darkness. I thought all was lost. I thought that all the work I had done on the XFA site was for naught. I thought…it’s almost too difficult to write. I thought I would have to…*gags*. I thought I would have to build my website with WordPress. Wow, that was hard to say. Allow me to explain.

Yesterday, I had finished the first version of the XFA site. I happily, giddily even, danced over to the BlueHost website and almost mindlessly bought a 3 YEAR shared hosting plan. Up until that point, like the good lil programmer I am, whenever I had run into an issue, I waltzed on over to StackOverflow to figure out what I was doing wrong. After I looked at the BlueHost interface, I thought to myself, “self, I have no idea how to deploy a website on a shared server, I should probably bop on over to StackOverflow.” But then, to my overwhelming horror, the internet absolutely failed me. As much as I looked into the revolting bowels of the interweb, I couldn’t find a single (applicable) tutorial about how to deploy a Django web app on a BlueHost server.

Ya boi was all like, “what the flippin’ heck?” In my confusion, I did a bit more research into general Django deployment practices, and it was there that I found the truth. It turns out that it is SUPER, SUPER, SUPER, SUPER overkill to use Django to build a blog site, which is precisely what I had done. Because it is SUPER, SUPER, SUPER, SUPER overkill to build and deploy a blog with Django, no one really ever does it. And because no one ever does it, there’s no one to make a tutorial for how to do it. And thus, the internet community failed me.

It was in that moment that I reached a nadir. I very, very angstily arose from my computer perch, vented to my brother, and then took a walk outside in the cold, cold Colorado air.

I decided that the only reasonable way to deal with this situation was to be brutally honest with myself. I know that I have no experience with server programming. You don’t either, so stop judging me. I knew that I might be able to get Django to work on BlueHost, but it would likely require a knowledge of Apache that I don’t possess, and several long heart-to-hearts with the Support Team of BlueHost. As a quick aside, the Support Team of BlueHost is hands down the best customer service with which I have ever interacted. Let be the first to tell you: if you are building a WordPress site, or a static web page, look no further than BlueHost. They’ll be the Obi-wan to your Qui-gon Jin.

And that is when I began to despair. BlueHost is super good at building and deploying WordPress sites, so there I was with my 3 year subscription, thinking I would have to sell my soul to the abusive mistress that is WordPress.

But then, when all hope was lost, a single beam of light shone through the dark stormy chaos that is the world-wide web. I was desperately flinging myself at every forum I could find, desperately searching for answers I never hoped I would find, when Reddit in all of its glory deposited a single comment into my lap that would come to fundamentally change the entire course of my afternoon.

The comment said something like, “…check out Corey Schafer’s tutorial on Django Deployment. He probably will have something that can help.” While to the untrained eye, this comment may have appeared as an emotionless recommendation for an online tutorial, I saw it for what it truly was: a supernatural sign of hope, where no hope could be found. Blessed readers, I will have you know that I did go to Corey Schafer’s website in an almost delirious fervor, and I found his tutorial on Django Deployment.

I’ll leave out the juicy, juicy details associated with the process of setting up SSH keys, configuring apache, and massaging linux, but I am here to tell you that as I sit here tonight, you yourself can go to exfizzassist.com, and there you will find the XFA site. I know, I know. I can hear your whoops and hollers from across the bounds of space and time itself. The XFA site is comfortably siting on a Linode Server somewhere in Fremont, California.

But I think the true moral of this story is not that the XFA site is finally up. The really, truly fundamental take away from this post is that Corey Schafer is a sexy, sexy beast. For all you girls out there trying to find a strong, yet sensitive man, you’ve got your priorities all wrong. There is really nothing more animalistically sexy than a man who can battle a Linux web server and emerge the victor. To be perfectly honest, I have absolutely no idea if Corey Schafer is romantically involved with anyone. But by the hammer of Thor, if he’s not, then citizens of the world, hop on over to that hunk of man-meat!

Ugh. It’s 11:30pm. Last night I got like 5 hours of sleep, so I told myself that I would be in bed by 11 tonight. Well, that didn’t happen. Anyway, I best be off. However, one more quick thing. If you do happen to be looking for tutorials on Python, Corey Schafer is your man. Don’t go to pythonprogramming.net (I love you Harrison, but Corey is better). Don’t ask questions and go directly to Corey Schafer’s YouTube channel. Peace.

I may have Icarussed this Bad Boy

By: Danny Geisz | January 15, 2020

Project: XFA Genesis


What’s good, people? I’ll tell you what’s good. I basically finished all the source files for the XFA site. YEET! I won’t make any effort to hide my emotions. I am deeply, deeply stoked.

Now then, what’s bad, people? I’ll tell you what’s bad. Deploying the website. For some reason I figured the deployment process would be a walk in the park. Not so, readers, not so. It turns out that there is a tremendous amount of hullaballoo associated with getting servers up and working.

After I finally finished the source code for the project, I began poking around at which hosting service to use. I decided on BlueHost because the internet told me to. If the internet told me to jump off a bridge, would I do it? Well, readers, that depends. If the bridge was sufficiently high and I had a ballistic parachute strapped on, that might be a wild ride. In that case, I would probably have the internet to thank for its peer pressure. As a brief side note, in High School we’re taught that peer pressure is a bad, bad thing. While I have found that this is mostly true, I have found that mountain biking and longboarding are two activities where peer pressure is invaluable. If you are longboarding, however, please for the love of Thor’s hammer, wear a helmet. Perhaps this statement has shattered your perception of me as an invincible Coloradan (which I am, don’t you forget it), but I will have you know that one of my friends almost got into a horrible longboarding accident involving a pendy slide and an aggressively placed curb because he hadn’t strapped his helmet on. No one cares if you’re cool. Wear the fracking helmet. If nothing else, how on earth are you going to understand the covariant form of Maxwell’s equations if you have brain damage? That alone should hopefully scare you into keeping that helmet on whenever you’re on a mountain or boarding down a road.

Now then, back to the main issue at hand: website deployment. If you have been diligently reading my posts (or even just the “About” page), you know that I had grand notions of building my website up from scratch using good ol’ code. I believe my exact quote was “In an effort to not be a weak-minded codpiece, I’m going to build my site with Django, Python, Javascript, HTML, and CSS like the heroes of old.” Such insolence, my readers. Such naivete. Would it have been incredibly easier to build the site with WordPress? Absolutely. Is there any reason I didn’t? I dunno. Pride? I tend to be more enamored with code than the average citizen and I didn’t want to be just another blogger using WordPress haphazardly without taking the time to respect the underlying mechanics of the world wide web.

Wait, hold up a moment. I believe I hear coyotes howling. It honestly sounds more like wolves, but we haven’t had wild wolves in Colorado for ages. What an interesting sound. I don’t really know why they howl like that. They can’t howl before a kill because it would alert the prey. The can’t howl after the kill because it might lure other predators. Maybe they just do it because it feels awesome. I can certainly understand that sentiment. I have been known to make bizarre noises for the good, good mouth-feel. Yowl on, coyote brethren (and sisthren), yowl on.

Back to the main matter at hand. What to do about website deployment? In a courageous and noble effort, I shall strive onward. I shalt not let the tribulations of restricted Shell access keep me from that for which I conquest. I conquest for glory! I thirst for honor! I strive onward empowered by the vision of a day that may come when our sons and daughters can deploy their Django applications without fear of bad documentation and bad tutorials. Yes, my readers, yes! Let us not by hindered by the afflictions of server programming! Let us draw together, and march on toward the glorious horizon, a future where we are no longer at the mercy of nefarious hackers cloaked in scripted shadows, trying to steal or personal information from the whois database! (the whois database, btw, seems like one of the most anarchical creations of man. I openly condemn it. Do I fully understand it? No. Did I learn about its existence tonight? Yes.) For honor! the crowd roars in agreement. For glory! the crowd stamps their feet and pounds their fists. For our sons and our daughters! one member of the crowd becomes so impassioned he starts performing a ceremonial jig. The rest of the crowd openly shuns him and tries to pretend he doesn’t exist. To me! with an army of programmer-warriors at my back, I rush forward into battle I know we may lose, but will no doubt be sung about for generations to come.

Goodness me. Nothing like leading a pack of hypothetical programmer-warriors (a lovely oxymoron, you’ll agree) into a hypothetical battle against a metaphorical manifestation of my troubles with web app deployment. You may be amused to know that I’m currently propped up on my queen-sized bed (yeah, I know. It’s absolutely egregious that I possess a queen-sized bed) which is covered in snowflake flannel sheets. The morning light has been waking me up at ungodly hours, so I have placed a green flannel blanket around one set of windows (this blanket’s original purpose was as a green-screen for a project I did in seventh grade about caecilians), and a brown fitted sheet over the other. The green and the brown really come together to produce a wonderfully swampy effect during the day, which only solidifies the “Cave of Sorrows” motif I’ve been trying to cultivate in my current living space.

Goodness gracious, to my left is An Introduction to Analysis, Calculus, An Introduction to Astronomy, and Modern Physics. Those of you who are rightfully concerned about my sanity are probably wondering what these books are doing in my bed. Well, my friends, I honestly don’t know. I could try to pull off the ultimate weird flex and tell you all that I sleep with them, but we both know in our heart of hearts that isn’t true.

I am fast approaching… wait hold on. I can hear an animal prowling right outside my room. If it weren’t 12:40 am, I could try to see if it’s a mountain lion or bobcat. Drat. Anyway, I am fast approaching the hour of 1am, so I feel I should wrap this sucker up.

I can assure you all that I will remove the textbooks from my bed with extreme prejudice. Toodles!

XFA is Looking Gorgeous

By: Danny Geisz | January 12, 2020

Project: XFA Genesis


Good tidings, brethren! Brethren seems to be a masculine word. My university would be most displeased if I only used masculine greetings. Berkeley actually outlawed the use of gender-specific words in legal settings like ‘manhole’ and ‘manmade.’ It’s really quite something that Berkeley prides itself on free speech. What would the female equivalent of brethren be? Sisthren? Well then, good tidings my brethren and sisthren! Why are the tidings good, you ask? Because I have been putting in a good deal of work on the XFA site, and as the title suggests, it is looking simply gorgeous! I realize that these particular posts are a bit meta because I’m writing posts about the creation of the site that I will use to post these posts, but I suppose that’s just one of the beauties of life.

I am planning on putting several pictures of myself around the site (to confirm that I am in fact a human being, and not just another sexy poltergeist) but these pictures haven’t yet been taken, so I’ve had to use random surrogate pictures from the internet. I only mention this because the picture I grabbed from the clutches of google images for XFA’s homepage makes the homepage look like an ad for a makeup company. I’m coming for you Kylie! They told me a straight male physicist/computer scientist/mathematician with no experience in fashion would never be able to start a successful makeup brand, but I’ll show ‘em!

Interestingly enough, I’ve actually thought that I would actually really enjoy doing hair/makeup. This was a passing thought/feeling I had a couple years back that I clearly haven’t done anything about, but perhaps at some point if I ever achieve fame and riches, I’ll give it a go. What I do know is that I have an incredibly hard time keeping myself from bursting into fits of birdlike laughter whenever I watch makeup tutorials on YouTube. I haven’t watched that many, but for some reason I absolutely can’t take them seriously. Now that I think about it, I doubt that I’ve watched any more than two throughout my entire life. I don’t remember much about the first one, but the second one was by Belle Delphine. As a concerned reader, you might be wondering why on God’s green earth I was watching a video by Belle Delphine. If you must know, I believe Pewdiepie mentioned her at one point (yes, I have watched several of Pewdiepie’s videos. I’m honestly not a huge fan. YouTuber culture is a truly bizarre phenomenon) and when I looked at her channel, I was astounded at her subscriber count. Everything made sense when I did a bit more research and realized she essentially makes softcore porn. Nothing like porn to get you a massive internet following. It may not be crystal clear from reading this, but I would like to formally state that I do not condone the practice of using porn for generating a massive internet following. If you are actively doing this, I would suggest you perhaps find a counselor of some sort or perhaps a therapist.

Good heavens, how on earth did I get onto a high horse about porn? Ah yes Belle Delphine. Always the troll.

Anyway, in a desperate effort to stop writing about porn, let me tell you about my day. I think that even I have the right to share my feelings with the emotionally psychotic, entirely chaotic lifeforce that is the internet.

So today I woke up in the mountains, and my brother and I went skiing at A-Basin in Colorado. I had a free day pass at A-Basin because last summer I went skiing in a lightning storm at A-Basin, which resulted in me being awarded a free day pass. It was a superb day of skiing, aside from the fact that it was a complete white-out, and we literally couldn’t see the ground. It’s always a bit disconcerting when you think you’re going to move in a straight line and then suddenly you’re skiing up the side of a mountain by accident. At one point my brother and I were on the chairlift, and a girl skiing beneath us yelled, “Where is the ground!?” I think that pretty well sums up the day.

As with most nature activities, I can only fully enjoy skiing for about three hours before my mind starts drifting to other matters. Today, for instance, I thoroughly enjoyed skiing in the morning, and then my twit little brain started zoning off trying to figure out how I can use category theory in the math software I plan to begin developing.

You can bet your sweet petunia that this math software is going to be an XFA project, so I won’t give too many details away just yet.

Goodness me, now I’m just blabbering about my day. I will have you know that I don’t plan on posting about my everyday life very frequently because why should I? Isn’t hearing about someone else’s life half the point of friends? If that’s what you’re looking for, maybe you should go make some friends. Now then, I’m off to bed. Until tomorrow night my sisthren!

Micromanaging will be the Death of Me

By: Danny Geisz | January 5, 2020

Project: XFA Genesis


Shalom, brethren. I have spent this week of winter recess in Arizona with my family, which means I have had time to obsessively build the XFA site. I understand that many of you readers may not be programmers, but let me tell you, if you’re looking for a hot, passionate night of shameful pleasure, learn Python and then build a web app with the Django framework. I can barely contain my feelings toward Django. It is juicy, juicy sauce. If you are in fact a programmer, and have previously used Django in your endeavors, I’m sure you share my sentiment.

My compulsive programming this week has also been a time of self-learning for me. I know all you readers care deeply about even the most minute details of my work life, so I won’t hold anything back. Actually scratch that, I am going to hold some stuff back. Otherwise, many of you might be concerned I’m an egotistical sociopath, which isn’t good for business. Anyways, I have specifically been paying attention to my micromanaging tendencies. When building a web app you generally have to keep track of several moving parts (models, views, CSS styling, whatnot), and I very much tend to spend far too much time perfecting small details when much larger pieces aren’t in place. For example, you know how sometimes you go to a news or blog site that only displays part of an article, and then the text fades out with a “Read More,” button at the bottom? For some reason, I had a spontaneous love affair with incorporating that effect on the XFA site, and I honestly think I spent an hour (“…A full hour!” –Crazy Craig) getting everything right. Now, this wouldn’t have necessarily been the end of the world, except for the fact that the entire site looks like garbage right now because I haven’t started styling the site yet. The engaged reader might be tempted to ask the question, “Why oh why, Danny, did you spend so much time perfecting the text fade away effect when you haven’t even started styling yet?” Well, my wonderfully engaged reader, I don’t really have a good answer for you, aside from the fact that I derive an irrationally large amount of utility from having perfect control over small details. Some might say I’m a perfectionist. Others would be wrong.

I think because I’ve spent the last five years mostly doing physics (not hard stuff like QFT or GR or String Theory. I’m not Wolfram sigh) I’ve generally been rewarded for being cripplingly OCD about the minute details of derivations. However, recently I have been attempting to tackle more complex theories (the hard stuff like QFT and GR), and I have been running into issues because I tend to spend way too much time trying to understand the incredibly minute details of every equation instead of trying to grasp the central tenets of the theories. It's also hard because the minute details of the mathematical theory usually give me the most pleasure (the details are a bit fuzzy, but at one point I believe I was accused of having romantic feelings for eigenvalues. I can’t say that’s too far off the mark. Honestly, eigenvalues are the Django of basic linear algebra). The issues I’ve been having with these theories specifically have genuinely caused me to wonder if my brain is already slowing down, but I think it’s far more likely that my perfectionist tendencies are finally catching up to me.

So then, the ~groundbreaking~ (really pretty obvious) conclusion I’ve come to is that I have to be much more militaristic with myself when it comes to my organizational approach to learning new subjects or working on my projects. As a practical example, I will have to force myself to implement the architecture of the XFA site before I go about trying to style the thrice-fracked thing. This organizational approach is pretty obviously the best way to go, but my time of self-reflection has really showed me how shamefully unorganized I’ve been with my past projects.

As an example of this shameful, shameful behavior, for the past two semesters, I’ve been doing a research apprenticeship for the ATLAS group at Berkeley (For the uninitiated, the ATLAS detector is a detector in the Large Hadron Collider in Geneva, Switzerland, which just so happens to be the largest particle collider in the world). I won’t go into the specifics of my projects with ATLAS, but this last semester I was primarily working with the incredibly elaborate data readout system used by ATLAS.

It’s honestly a bit painful to think back to my project this semester, because I really did a poor job learning the necessary material to do the project I was working on. The fundamental issue was that in order to understand anything about anything, you had to first develop a basic understanding of the system as a whole. This was an issue for wee physicist Danny because I’m used to reading out of a physics textbook, understanding equations line-by-line, and then watching the main ideas unfold before me like the glorious phoenixes they are. When confronted with a subject that wasn’t possible to learn line-by-line, I hopelessly floundered about like the weird fish in Harry Styles music video for Adore You.

The moral of the story is that if you’re a perfectionist, you’re annoying and I don’t like you. JK, we’re all friends here. The moral is that in the future, I’ve learned that I need to make a much more concerted effort to outline whatever it is I’m working toward, and only dive into the details when I can see how they support the bigger picture. Unless I’m just looking to trip out on some delicious math. Then I’ll just shamefully and giddily open Weinberg’s QFT book to the section about the topology of the Lorentz Group. Until next time, my friends.

Forging the Blog – Entry 1

By: Danny Geisz | January 2, 2020

Project: XFA Genesis


Like so many others, today was a remarkably interesting day. As the title might suggest, I began work creating the site for XFA today. I am currently refamiliarizing myself with Django, which is a python framework for building web applications. I naturally will need to have perfect control over the XFA site in order to convey the precise information and emotion I wish to convey, and thus I feel as though I necessarily must build the site myself, instead of turning to some easy way out, like WordPress. I simply cannot convey my excitement about enacting my vision for the XFA site, and it is a gift from life itself that I have the ability to birth this site from my mind in the form of succinct blocks of code.

Now then, I feel as though I ought to expound upon my first statement pertaining to the interesting character of this very day. After a brief stint journaling, I began reading Srendniki’s book on Quantum Field Theory. Up until now I have been attempting to learn the subject by means of Weinberg’s text, but let me tell you, that book is dense. A good friend of mine suggested I use Srendniki’s text instead of Weinberg for an introduction to the subject, so I decided to give it a whirl today. I read through the first section which motivated the use of Quantum Fields to deal with the problem of unifying special relativity and quantum mechanics, and the math was quite interesting. I am currently on Winter Recess and am spending time in Arizona with my family, and at about 12 I went to play 18 holes of golf with my father, brother, and Grandmother.

It was a truly gorgeous day. Arizona can sometimes be reconkulously hot, especially when playing golf in the desert, but this winter day was wonderfully temperate, and the sky was an incredibly compelling shade of eggshell blue. Anyway, I was able to enjoy the day and the golf for about 9 holes, when I was suddenly overtaken by the compulsion to work on quantum field theory problems. Gone was my enjoyment of the day, my family, and ridiculous sport of golf. This compulsion is very interesting to me. It happens fairly frequently to me, and it honestly seems quite silly. It robs me of the joy of living and fills me with a profound sense of anxiety.

I’m going to abruptly cut off this entry simply because it’s nearly midnight, and I’m quite tired.

Stars; in your multitudes; scarce to be counted; filling the darkness.