Admiring coolness of some internet technologies

As somewhat of a continuation to my previous post, I wanted to take a moment to dork out and marvel over how far internet technologies have come.

When I first starting developing on the web, I was building static websites whose charming user experiences were composed by animated snow that followed your cursor and adorable as hell character illustrations. Probably after a tenth attempt at sitting down and following through on a tutorial, I gained a basic working knowledge of jQuery: somehow grab the elements you’re interested in via classes or ID’s and do something with them… animate ‘em, make them fadeIn or slideUp. I remember it feeling like MAGIC, especially since I struggled with learning vanilla Javascript and couldn’t understand snippets that I found on websites and somehow always broke the original functionality when I tried to mess with them. I was content working with jQuery and didn’t learn about new frontend technologies, let alone understand their role in modern web applications, and observed as they popped in and out of the landscape: Backbone, Angular, Ember… It wasn’t until an internship in the middle of college that I got a chance to really build something meaningful using React that I had a chance to foray into this world again, and that itself was magical MAGIC.

Between learning how I could make elements slide around and make Ajax calls using jQuery and dipping my toes into React, I learned a bit more about the basic of Javascript. Having gone through a formal computer science course and learned a language from a more ?academic? lens (as opposed to one merely guided by the question: “how do I make it do x?”), I found it a lot easier to get a grasp on Javascript as a language and learn some of its concepts. This was probably part going through a formal course and part being older by six years and, hopefully, more apt at the practice of learning itself. After learning about the basics like getElementById, I slowly had a better guess at how $("#myElement") worked under the hood. After learning more about events themselves (honestly don’t even feel like I get them all that well these days though), I had a better guess at what that magical e.preventDefault that I threw around like a panacea was doing. The difference between the MAGIC I felt when I learned some of jQuery and the magical MAGIC I felt when I worked with React is that I still have no clue how React is doing its thing. Nada. I get a headache thinking about how I would try to use jQuery to display and manage some data that can be modified from different parts of the UI. Register the necessary event handlers and use a common function that updates that element’s content? Okay, maybe that could work. But what if there are like 5 different UI modification points, and 2 pieces of data are affected, the first affected by changes coming from all modification points and the second modified by, say, changes in 3 modification points. The possible combinations and thought of maintaining a pattern like this give me an even greater headache! Anyway, React is one of those things that seems so flippin’ COOL. And mysterious. I feel like I could probably do an uber basic basic (emphasis on “basic”, y’all) layer on top of vanilla Javascript that did some of the things that jQuery did, but I don’t even know where I would start if I wanted to build an uber basic basic React. I think part of this stems from my usage and knowledge of jQuery being limited to sprinkling it into my sites like syntactic sugar. On the other hand, React handles waaay more… including things like STATE. Anyway, this is just piece of evidence #1 that internet technologies have evolved in a super cool way.

I have to thank a Youtuber named Nick Frosty for introducing me to the world of dynamic websites. It is from his video tutorials that I learned basic concepts that later helped me build some side projects that allowed me to spiritually escape the boredom of a summer vacation in the good ol’ suburbs of Texas. It was through his tutorials that I learned how to create a website using PHP and MySQL. This opened a whole other can of worms for me. Building websites was slowly getting a bit boring for me since the process usually looked like: move some pixels around in PS7, code into a functional website, maybe move some more pixels and produce something else, add theming capability to the website, code the new pixels into a functional website… rinse and repeat. It’s weird when I reflect on how little interest I had in adding content to a website. I seemed to like setting up shop and then just moving on. This would explain why I had like 10 different emails and 10 different accounts on different websites (Xanga, Webs.com, Photobucket) and have no idea where all my old stuff is now. Silly me. Anyway, learning how to build web applications unlocked new projects for me. I built a fake Twitter once. For some reason, I thought it was a good idea to call it Edoloh. I think using random terms from foreign languages was a thing. (Is it still?) I built a tool for tournament registration for my high school when a STEM club hosted its science and math competition for middle schoolers. The thing is, PHP wasn’t the only way I learned to build websites, since I was fortunate enough to learn about and attend a web design course after 8th grade, where I got to learn about how to build website using VisualStudio and ASP.NET and why some websites ended in .aspx. The thing that was rough was, web hosts who offered ASP on their shared hosting servers were not cheap! So, when I went home, I sighed at the annual price (probably like $100 at the time?) and continued building my sites in what was familiar and accessible: PHP. But the thing that is so cool about the present day is we have things like Heroku, which lets you deploy applications pretty easily in a bunch of different languages. I remember using Heroku for the first time and being absolutely mind blown. And the fact that had a free tier was even cooler! Granted I later figured out why it was slow if I didn’t touch the project for a while — there’s no such thing as free lunch — but my projects were never really seen by anyone besides me for it to really matter that much to me anyway. There you have it: piece of evidence #2 the internet has evolved in cool ways… you can start building super easily these days! I remember asking if I could SSH into a shared hosting box to install or debug some platform I was trying to install on a shared host and being denied (understandably so now… coulda nuked someone else’s stuff!) and frustrated, but these days you can get a box for pretty cheap and do whatever you want with it! Nowadays, I can trust that if I want to build something with a new language and deploy it, either Heroku will support it or I can eventually finesse things by maybe getting into the box, installing some things, banging my head against the keyboard a couple times, and taking some deep breaths.

Another thing that I always wondered as a kid is how some websites were able to immediately grant users what I thought to be a directory on their website. I would sign up for some blogging platform, and they could magically give me a page at blogplatform.com/cindy! Only having an understanding of how my static websites worked, I thought, “Dang, how do they manage to create a new folder and create an index.html with a default blog with my name?” When I learned about dynamic-ish websites using PHP, the customization piece was less magical, but the directory part was still a mystery to me. It was only until years later, when I started learning about web server frameworks and routes, that I understood how they did this! And that websites don’t just have to be files! Even though I’ve gotten a chance to build basic web apps using Flask, Django, Rails, Spring, and more, this still seems so cool to me. In learning about frameworks, I learned that I didn’t have to write raw SQL statements for everything and deal with something like this…

$query = mysql_query("SELECT * FROM friendships WHERE ( (userid1='$userid') OR (userid2='$userid') )");
$stream = mysql_fetch_assoc($query); 
$friend1 = $stream['userid2'];
$friend2 = $stream['userid1'];

This charming bit is from my Twitter clone. Anyway, you can work with your database through objects that are a bit more sensible, using ORM’s! Though, when I look back at some initial models I wrote when I built something using Laravel, ahem:

<?php
	class Student extends Eloquent 
	{
        // does nothing more than 
        // specify the table in the database
        protected $table = 'students';
        public function school()
	    {
    	    return $this->belongsTo('User');
    	}
    }
?>

… it’s pretty clear I didn’t really understand, let alone appreciate, what I was working with. Anyway, the third piece of evidence that internet technologies have evolved in a cool way is that you get these cool things out of the box for free in frameworks. They worry about doing some useful things, like executing when you command that a certain URL pattern be handled in a certain way, so you don’t have to!

Anyway, I’m done, just for now. So many things about the internet boggle me and because I don’t know who to talk to about them, I will continue to report them here.