Amazing Children

I work crazy hours at times. Nights, weekends, etc. Every now and then I’ll break-away at odd hours to play Monster with them (I basically just slowly chase them around, growling like a zombie), or discuss their favorite video games. These little breaks mean a lot to me.

Sometimes my kids do little things to amaze me. I’ll share something that happened no more than an hour ago.

We just got back from having some dinner, and letting the kids run around to burn off some steam. They ran, then ate, then ran some more. It gets them ready for bed, and gives the grown-ups some time to sit back and relax. It’s really quite nice for everybody.

Once we got home, I jetted straight for the office (as I’m prone to do). The kids began putting on their pajamas, and readying themselves for bed.

As I was studying something on the screen, my son came in with a piece of paper; a sticker. He stuck it to my back, and before I could object, he was already penning something atop the sticker.

“What are you doing, buddy?” I asked. “Writing something for you,” he replied.

Once he was done, I reached over my shoulder and peeled the sticker off to read what he had written:

“My daddy is the greatest. He works hard, and he loves me.”

How. Freaking. Adorable. My children are amazing.

My daughter then promptly scribbled over everything her brother had written. But she made up for it with the greatest hug ever.

Sophie Goes to School

Today was an open-house/orientation at my daughter’s new school. She is almost three, and going on 30 (or so it seems). Watching her grow up is bitter-sweet. As I mentioned to another father, I look forward to when she’s older, but I miss her time as a baby. It’s an interesting paradox of parenthood―you want your kids to grow up, while also never changing.

My daughter has always been very shy around other people. It’s not uncommon for her to hide behind my legs if somebody shoots her a smile or warm greeting. She feels most comfortable in either my arms, or those of my wife. As much as we love having her close, we also want to see her detach, and live.

I fully expected her to be very reserved this evening. I couldn’t have been more mistaken. We were the first in her class to arrive. This meant Sophie got to choose which of the toys, in all the classroom, she wanted to explore. It didn’t take long for her to run straight for the play-kitchen, and begin “cookin’ suppuh.”

Not long after, “Olivia” showed up. She was about Sophie’s age and size. We later learned that they differ only by 2 months in age. Olivia also wanted to play with the play-kitchen. This was it. The moment we have been dreading. Certain that our daughter would tense up and flee from Olivia’s presence, she instead greeted the young girl with a friendly remark: “I’m cookin’.”

We spent about an hour in that classroom. The teacher, Mrs. Darlene, made her rounds. She’d stop and talk with each set of parents, chat with their child, snap a friendly photo, and move on. She was sweet, and made a great impression on Sophie. At one point, Sophie even took her hand, and proceeded to follow her to the other side of the classroom, far away from my wife and me.

Sophie didn’t shut down a single time tonight. Since arriving, she ran, laughed, and played with her classmates. She explored her homeroom, the Spanish classroom, and the large open room wherein kids will sing, dance, and play instruments. I suppose it helped quite a bit that each teacher greeted her with a fun sticker. She built-up quite the collection before the night was over.

Tomorrow is the real test, though. Tomorrow she will spend 5 hours without me or my wife. She’s never really done anything even remotely like that.

I fully expect there to be tears tomorrow. I fully expect there to be a reluctance to detach. I expect there to be a great deal of anxiety tomorrow. But who knows, maybe my wife and I will behave like mature adults 😉

Sophie, I am so proud of you.

My Crazy Friend

There are many great things to have in life, but one of the best things I’ve ever come across is a wild and unpredictable friend. A person whose imagination and curiosity are so insatiable that they can’t help but ooze enthusiasm. These friends get ideas and inspirations all the time, including hours many would consider inconvenient 🙂

Just after midnight I received a short message from a friend regarding a Bitcoin documentary. This friend is not an engineer, but is a very bright individual. After coming across this information, he immediately reached out for discussion. It didn’t matter to him that it was late; great ideas need to be discussed!

After a few texts, I was in the car and driving to his house. I rolled up just before 1 AM; I could see his silhouette standing in the living room. His body was trained on the television. The glow of his Mac dimly lit the curtains. This image is not at all uncommon. This is the type of individual whose mind rarely shuts down.

I made my way to the door, trying to remain quiet for fear of waking his sleeping children. After a gentle rap, he promptly opened the door and began gushing: “Dude, I’m only a little ways into this video but―”, he eagerly pronounced. You could tell he was just dying to catch somebody’s ear.

Within a few minutes he had a notepad out, and we were sketching up schematics, talking about the blockchain, and engaging in some armchair philosophy about the nature of money and currencies themselves. To be honest, it’s the kind of thing I really love to do: sit, and discuss ideas with creative and passionate people.

For as long as I’ve known this guy, he has been this way. Years ago, before either of us had a litter of kids, we’d wind up at the local Waffle House around 1 or 2 AM. He’d be scratching ideas into the back of a napkin, leaning over a plate of hash browns―”scattered, covered, and smothered.”

There is so much value in having a friend like this. They can’t help but keep moving forward, and they drag others along with them. When you surround yourself with crazy friends (or even just one ), you will find it harder to slow down―harder to atrophy. They keep you going, and keep you thinking.

I’m thankful for all of the people I meet, and the relationships I form. But I am particularly thankful for my crazy friend.

I’m Getting a Mac

I’m getting a Mac. Again.

I’ve been a Windows guy since I received my first computer in the mid-nineties. My school had an iMac G3 in the art room; a big, colorful, semi-transparent, bulbous beauty. In spite of its appeal, I never really drifted too far from the Windows camp. Windows had games 🙂

In February of 2012 I began working for a remote company called appendTo (born out of the jQuery project). We had some of the most talented developers you could ever imagine meeting, and they all used Macs. I managed to stick with Windows, which landed us some great contracts. But in 2013, that all changed when I bought a Mac.

It was awkward at first. Simple things like installing software required a radically different approach. It wasn’t a matter of running the installer, and that’s it. I had to literally run the installer, and then drag something across the screen. It felt like some type of bizarre CAPTCHA. I wasn’t a fan.

I received advice from my co-workers to weather the storm, and stick with it. Extra advice was to avoid using a mouse. Get familiar instead with the trackpad. All of their input was received, and proven in time. The MacBook Air quickly became my favorite machine.

To be fair, it didn’t have much competition. The only other machine I had at the time was an Acer Aspire R7, which didn’t work all that well. I recall buying one, sending it back, getting another, and sending it back. The 3rd one wasn’t ideal either, but I was too tired to keep exchanging machines. The weirdest thing about that machine was the placement of the trackpad; it was above the keyboard.

 

The Aspire R7 was neat though, for party tricks. It looked like something out of a Sci-Fi film, with its many modes and orientations. I often worked from a Buffalo Wild Wings at the time, so I’d occasionally get curious glances from people trying to figure out what kind of computer it was.

In 2014 I accepted a job offer from Microsoft. I had been working with them on some community efforts for Internet Explorer, and loved the idea of heading to Geek Mecca in Washington to work more closely. So I headed off to Redmond, MacBook Air in tow.

As I met my new team in Washington, I found that some of them were also using Macs. To be fair, they used Windows too, but there were many fans of Apple’s hardware on the IE team. It’s worth mentioning that we were largely a team of Web Developers, so having a Mac meant having better cross-browser/platform testing.

My first couple of weeks at Microsoft were great, but the honeymoon was over quickly. Microsoft had begun massive layoffs shortly after I joined. Our building was experiencing an exodus of presumably-upset engineers. I had worked until about 7pm or so one evening, and decided to leave my MacBook at the office.

I came into work about 6:30am the next morning to find something missing―my MacBook Air had been stolen. I was so upset; how could this happen? How could this happen to me? How could this happen at Microsoft!? As the hours rolled by, we had learned that a few other devices were stolen from neighboring offices. My MacBook Air was never replaced ☹

So why a Mac? Why now? Well, today I work with another set of amazing engineers who largely use Macs. I have carved out a nice little niche, being the Windows guy, which is all well and good. But I can’t keep relying on others to do my mac-testing for me. That bottleneck slows us down, and ultimately makes me less efficient.

My long, slow, dance with Apple continues. I’m getting a Mac.

A Good Day

Today was a good day. Not only did I not have to use my A.K., I didn’t have a computer melting down, a network outage, or anything else. I popped-up early in the morning, and managed to swim for an hour (hope to do that tomorrow too).

After my swim I sat down and began to work backwards through our code base to resolve an extension-related API issue. The Brave browser supports the Web Extension chrome.contextMenus.create method. We didn’t, however, expose an info.parentMenuItemId property to the handler, which caused problems for extensions that utilize nested context menus.

Not being particularly familiar with this part of the code base, I began by checking out the code for our chrome.contextMenus.* bindings. That quickly revealed the implementation of the create method, but I didn’t find that to be a particularly ideal place to add a fix.

With extensions, we pass data around between the C++ and JavaScript sides of the browser. This makes it a little difficult to hunt if you’re somewhat unfamiliar with the territory, as I am. That being said, I was able to eventually find the ideal place to add my changes.

In the end, it took only a single line of code to resolve the issue. But that single line was days in the making. It was the primary issue I have been wanting to resolve for the past week, but every attempt to address it caused some other obstacle to appear.

I was living-out that Light Bulb scene from Malcolm in the Middle. Hal sets out to accomplish a simple task: fix the light bulb. But before he can do that, he’ll have to fix several other things. If you haven’t yet experienced this phenomenon―your day is coming 😉

I’m content though. It has been a rough week, but I am content with how it turned out. I now have a better development environment established. I spent a day using Ubuntu and am better for it. I’m thankful for each stumble along the way. It wasn’t fun, but it made me better. It always does.

Today was a good day.

Busy Doing Nothing

Today was, yet again, a seemingly unproductive day. I’m still fighting with my development environment; attempting to find a long-term solution to my short-present frustrations. And I think, finally, I may be making progress.

Over the last few days I have spent time cloning, nuking and re-cloning repos. I’ve installed Ubuntu nearly half a dozen times, between VirtualBox and Hyper-V. I’ve made post-hoc changes to the size of virtual disks numerous times. I’ve ran between two machines, performed close to a 100 Google searches, and wound up spending over $100 in search of respite.

My wife suggested today that I try to see if our VR tower would serve as a good build machine. It’s got 8 CPU cores, and 4 GPU cores. It has massive amounts of on-board memory, and crazy amounts of RAM. She’s right, I thought. Maybe I should consider that.

The VR tower sits in the living room, where the family congregates to play Oculus games. I can’t rob the living room of it, so I have to devise a plan to remotely control that machine from my home office. Not a problem―I’ll use Remote Desktop Connection, which is built right into Windows.

These solutions are nearly always easier said than done. I started by getting the IP address of the tower, and tried to connect. That failed. Hmm, maybe the machines are on two different networks? I do, after all, have a 5mhz and 2.4mhz options. As it turns out, that wasn’t the issue either. Both were on my 5mhz connection.

My next thought was that the tower  was configured to reject remote connections. After a bit of fiddling, I found that was also not the case. Every checkbox I could find warmly welcomed incoming connections from computers on the same network. So what then could it be!?

At this point I was getting desperate; time to turn off the Windows firewall. Perhaps there was some obscure inbound connection rule that prevented me from accessing that machine remotely. That too failed to address the issue.

After about an hour or so of walking between the office and living room, adjusting knobs here and there, I happened to notice that the tower was running Windows 10 Home edition. Could it be that this is some bizarre limitation of Home edition? Sadly, a quick search confirmed my fears.

As it turns out, if you want to connect to your machine, your machine needs to be a Pro version of Windows. Granted, you could instead use some other Remoting application (I’ve used VNC Viewer in the past with success). I try to stick with Windows solutions these days though. If it’s built-in, that’s what I prefer to adopt.

After an hour, and $109.99 later, I had my  Windows 10 Home upgraded to Windows 10 Pro, and I was able to move on to the next step!

It was at this point I began feeling as though there was a light at the end of the tunnel. Not a bright one, but a faint glimmer of hope. It slowly approached me, instilling a pregnant sense of confidence that everything would be alright. Boy was I wrong!

After installing Git, Node, Python, PIP, and more, I began cloning my project. This usually takes some time, so I decided to step away for a bit. I managed to come back just as it was wrapping up the tedious middle-portion of the process, and began the latter steps.

Then it struck. Failure. Errors across the terminal. My wife happened to step in just as this happened, and let out an audible gasp. Look at all of those errors, she exclaimed. As if I wasn’t already being tormented by them to begin with 🙂 I was missing a few necessary components, and to get them I’d have to install Visual Studio 2015 Community Editions (emphasis on the “2015”).

The latest version version is 2017, and that is all that Microsoft offers on their VS page. I thought perhaps I’d be able to use 2017, even though the documentation explicitly says to use 2015. Maybe it’s just out of date, I thought. To be safe, I decided to see if anybody else was talking about the 2017 edition. To my relief, they were, and it is not compatible at this time. Dodged that bullet!

After finding a download option for Visual Studio 2015 Community Edition, I began the lengthy process of installing the more than 10GB of data. Again, all I could do was sit and wait. I’m often at the mercy of my machines these days.

Once the install completed, I was a back on track! The build script was running beautifully, until it stopped AGAIN! Numerous complaints filled the screen about not being able to reach a particular domain. No way. That domain is accessible. It has to be! I tried to manually ping it; no good.

I was tired at this point. I just wanted to shut the machine down, and give up for the evening. It has been 3 days of constant trouble. Every step forward is followed by 2 or 3 tumbles backward. I decided to take an hour and play a bit of Final Fantasy XV.

As I sat there on my couch, flicking at the controls, watching as the Xbox One complained that it couldn’t sync my saved game data. Great. You want to ruin my night too, do ya? The machines, I was convinced, were coming alive. And they were bent on crushing my spirit 🙂

As it turns out, thunderstorms in the area took out internet services for many people. They just happened to take out mine at a time which wouldn’t be obvious to me.

I’ve been writing software professionally for nearly 20 years now. There are good days, and there are bad days. And one thing is for sure, when it rains, it pours.

I’ve been hit pretty hard this past week, but I’m hopeful that better days are ahead. I’m not about to turn in; I’m not about to give up.

While it is true that I was too busy doing nothing this past week, I’m fully aware that this isn’t foreign to any other developer in the industry. We win some, and we lose some. But we press forward.

The Ups and Downs

Hello, I’m Jonathan Sampson. I am a Web Developer.

Unfortunately, today you can’t be just a Web Developer. Not if you want to remain active in the industry, that is. You have got to do so much more, and it can be very tiring.

I work on a Browser. Our project is a native application, but under the hood it is largely HTML, CSS, and JavaScript. Well, JSX, Less/Aphrodite, and React, but you get the point. Every now and then I have to venture into the world of C++ though, and that may be a bit out of the wheelhouse for a web developer.

I’m happy to explore beyond my comfort zone; C++ isn’t that foreign to me. My primary complaint is that I can’t test changes as rapidly as I can JavaScript. In a browser, you need only to refresh after a single change. With C++, you have to wait a few minutes in order for the build to finish (assuming you don’t have to do a full build, which could take hours in my case).

I recently ran into a problem on Windows where LOG statements weren’t printing to the CMD window, or to our browser’s console. I have spent days trying to figure out the cause, but to no avail. I finally decided to revisit Ubuntu; perhaps if I did my development there, logs would print as expected.

There were many other reasons to explore a UNIX system again; the vast majority of our team is already using Linux or macOS. Many of the tools we rely on work less reliably on Windows, if they even work at all. But that is neither here nor there. Let me get to what I really want to discuss.

I decided to download an ISO for Ubuntu, and get a Virtual Machine up and running. Since I don’t spend much time thinking about VMs these days, I decided to go with the software I last recall using―VirtualBox.

Not long after I had the ISO downloaded, I had a VM setup, and I was configuring my account details in Ubuntu. VirtualBox was dead-simple to use. Shortly thereafter I was reminded that Windows 10 has built-in virtualization tech called Hyper-V.

I remember trying Hyper-V once, the last time I setup Ubuntu. That experience was plagued with network connectivity issues, abysmal performance, and more. Perhaps things were better now though. Knowing full well how incompetent I am with these things, I decided to give it another shot. Who knows, the issues I faced before may have been due to a mistake on my part.

Well, this is when the evening started to go downhill. VirtualBox and Hyper-V refuse to coexist on the same machine, at the same time, apparently. Once I had Hyper-V up and running, I was unable to start my virtual machine. Flustered, I even tried to delete my VM. I couldn’t do that either.

I must have spent an hour, at least, trying to get Hyper-V working. Ideally, I’d stick with Windows tech. But my patience was quickly wearing thin. I decided to shelf this effort, and go back to Virtual Box.

I rage-quit Windows, told my Wife I was headed out for a few minutes, and went to drown my sorrows in a chocolate shake. I recommend that when you face any technical issue. Upon returning home, I set out to revisit VirtualBox.

The evening was already going downhill, but this is when it began to tumble violently. Upon returning to VirtualBox, I found that I could no longer start my virtual machine. Crap! Did I delete the disk image or something? My mind started to enumerate all of the crazy things I might have done to bring this agony upon myself.

If it weren’t for sites like Ask Ubuntu and Super User, I’d be entirely lost. With a bit of searching, I found that I needed to disable Hyper-V in order to run VirtualBox reliably. Fair enough, though it does stink that this process requires another restart of the machine.

Fast-forward about 10 minutes, and I’m in Ubuntu setting up Python PIP, Git, Nodejs, and more. My goal for the evening was to clone the Browser project onto the VM, install it’s dependencies, and complete the initialization before bedtime. After a few minutes, Ubuntu prompted me that I was running out of space.

Side note, think about your needs before progressing too far into a project. I naively applied the recommended disk size of 10GB to this VM. I should have known better.

Part of our project initialization downloads many, many gigs of data onto the host machine. My 10GB quickly ran out. Now I had to figure out how to expand the size of the virtual disk, and pick up where I left off.

For all that VirtualBox does well, empowering the user to make post-hoc changes to virtual disk sizes isn’t covered. Instead, I had to use VBoxManage, a utility that ships with VirtualBox. You can see my Tweet about this online.

Once the disk was resized, I jumped back into Ubuntu to pick up where I left off. Sadly, it was still complaining about a lack of space. Oh! The partition! So tired was I from the fruitless hours spent wrangling virtual machines that I forgot to expand the partition. GParted was a pretty stellar application, and worked with very little effort.

So here I sit, typing away, waiting for the npm run init script to complete. I’m still not 100% positive that it’s going to work. I’m hoping that 30GB is sufficient. I guess we’ll just have to wait and see.

On a positive note, I was able to make a contact on the Hyper-V team. Kudos to Sarah Cooley for assisting. I’m hoping to continue the discussion with her, and figure out where I went wrong to begin with.

The terrain of any given day is hard to predict. There are days where things flow smoothly, and you advance toward your goals light-footed. On other days you lift up your eyes to see a cascade to mountains before you, each with razor sharp rocks, lining unforgivable cliffs.

The one thing I’m thankful for is the experience, the forced education, and the figurative calluses that line my hands at the end of the ups and downs.

Update: Everything was going great, until I tried to install build dependencies only to learn Ubuntu 17.04 is not a supported distro. C’est la vie 😒

The Adventures of Fart Arthur!

Bedtime is a fun time in our household. Our family usually reads together, prays together, and then my wife and I proceed to lay the children down for the evening. Tonight, as I was putting my son and daughter to bed, they asked for a story.

I’m always telling stories. I’ve run out of stories to share, so I typically have to make them up on the spot. I often find myself to be as much an audience as my children to the ad-hoc nonsense I conjure up.

Tonight was the story of Fart Arthur, a young man with a terrible problem. You can probably guess what ails him 😂. The bigger story here was about knowing your “weaknesses,” and even finding strength in them.

Fart Arthur discovered his super power after getting lost in the nearby woods, and finding his own pungent odor to be a reliable path back to safety.  His super-scent also aggressively informed bystanders that he was in the area―likely doing something very heroic.

We spent a good 20 minutes laughing together, making sound effects, exploring the depths of our own (crude) imaginations, and taking turns with the story. I’m thankful for these moments, however obnoxious they may be.

No Second Chances

Since I was a teen, I’ve made infrequent use of the expression “You don’t get a second chance to make a good first impression.” There are so many things in life that you don’t get to do over, no matter how bad you’d like to, or how deserving of a second chance you feel yourself to be.

I grew up in a fatherless household. My mother bore the full burden of raising me and my siblings. Today, every cell of my being wants to scribble-over my family legacy, and put things on a better path for my children. My goal is to be the present and involved father that I lacked.

With my children starting school soon, I have been forced to think about their education, and their rearing in general. You don’t get a second chance at raising your sons and daughters. You get one shot to do it as best you can. You get one shot to raise them well, so that when they’re grown they’ll have a solid foundation upon which to build the rest of their life.

Being sober to this fact can put you on an emotional roller-coaster. There are nights where I put my children to bed, an reflect on the missed opportunities of the day. Moments in which I could have taught them something―anything. Not simply for the sake of teaching, but for the sake of showing them that I am here, and that I love them.

I don’t have much to say tonight. Writing this short post has me frequently pausing in thought, failing to feed the cursor on my screen. Today is over. The day is done.

While I may not get a do over for today, I do have tomorrow (for now), and that is the next best thing. I just need to keep reminding myself: no second chances, no second chances.

Learning How to Learn

Learning is really difficult. It’s not always a matter of exploring a new concept; sometimes it requires the breaking-up of a long-settled foundation, and replacing it with something more reliable.

The hardest thing about learning, however, is learning how to learn. Sounds weird, I’m sure, but think about it for just a moment. What drives you? What is it that actually makes a topic interesting to you?

Early on in my childhood I was diagnosed with ADD, and drugged mercilessly to combat the general apathy I had towards just about everything. It didn’t really matter what you were trying to teach me, I had no interest in learning.

I remember being perplexed by multiplication. “What is it?” I asked a classmate. They halfheartedly replied, “it’s the opposite of division.” What the heck does that even mean? Now I have to figure out what division is, and then be able to think about it backwards to discover the magic of multiplication?

As an adult, I look back and realize that I had no interest, because nobody was truly communicating with me. They would tell me the answer, but they weren’t successfully getting through. One teacher even had me stay after school on many occasions to explain per-cent; she used the nutritional information on a box of cereal as an example. Who the heck cares about cereal?

It wasn’t until I was in high school that I started showing an interest in learning. I had just gotten a computer and began playing Jedi Knight: Dark Forces II on the Microsoft Gaming Zone. Our clan was totes the best. Shout out to the Golden Warriors, wherever you are these days!

This was the first computer game I really ever played, and I was blown away that people were able to make their own maps. Gamers were able to build their own little worlds, out of nothing. I wanted in on that experience, and nothing would stop me.

Back in the 90’s, the software kind of stunk for this. It was CAD-like orthographic views. You started off your map with a single cube, only it looked like a square on the screen, because you dealt with geometric shapes.

Drawn all across the screen were boxes, lines, and dots. The dots were a means by which you could measure distance, and served also as snap-points. The boxes were sectors, or rooms in your map. The lines were the edge of surfaces, and where those lines met were vertices. It took a little work to get the general vocabulary down, but once I did, I hit the ground running.

Drawn to the idea of creating my own worlds, I began learning geometry. I started thinking about math more. Everything required me to learn some foreign math concept. Want a river with a current? You have to read up on vectors.

This excitement for math stuck with me. Most recently, I’ve found myself learning additional math concepts to achieve certain effects in canvas animations, or trying to manipulate large data.

It took me years to learn how to learn. Nobody was able to teach me; I had to learn it for myself. For me, learning comes by way of creating. I wanted so badly to create that I found a way to scale the once insurmountable mounts that now shrink into the horizon behind me.

My son reminds me a lot of myself when I was younger. He doesn’t want to sit still, he wants to be up, jumping, kicking, and moving around. He wants to be talking about video games, and “smoking turkeys” (pwning n00bs).

I’ve found that he responds well to video games, as I did. Together we play Warcraft II: Tides of Darkness. If a farm feeds 5 soldiers, and we need 10 soldiers to protect our base, how many farms do we need to build? We need to figure that out quickly; the Orcs are coming!

It’s really hard to get into another persons head, and learn what makes them tick. As teachers, adults in my young life sure tried (and perhaps succeeded in some ways). As a father, I’m trying my hardest with my kids. If you’re reading this, you are likely in a similar situation.

I still struggle with attention and focus as an adult. Sometimes working from a public place helps. Sometimes it hurts. Sometimes I’ll need a colored light in my office, and sometimes I need only the glow of my monitor. Sometimes I need music, and at other times I need complete silence.

I am still figuring myself out, as I work to help my son do the same. He and I are fighting this dragon together, side by side. We’re both learning how to learn.