The Great SSL Weekend Extravaganza

This past weekend, I embarked upon a task of positively Herculean proportions. With Chrome 68 coming out and the continued emphasis by Google to ensure HTTPS is the default on sites, rather than HTTP, I decided to go ahead and add SSL certificates from Let’s Encrypt to, oh, 13 domains that I host, both for myself and for friends and family. (I had a lot of fun posting to my Instagram story about it, too!)

I’d done a test run with one of my domains earlier in the year and, though it wasn’t without a challenge or two, it seemed to go just fine.

The trouble, of course, came when dealing with various WordPress sites (including this one!) because how do you change ALL THE LINKS in ALL THE POSTS and ALL THE PAGES to HTTPS from HTTP? Well, thankfully, there are database queries and free plugins.

While I’ve generated and installed the certificates for all thirteen domains, one of them basically has no traffic, so I haven’t updated that WordPress database yet. Then, there’s another one that is just too daunting for me to bother with right now — two WordPress installations, plus my own hand-coding elsewhere, plus redirects galore… So I said to hell with it for now. I haven’t forced SSL on for either, but both are accessible via HTTPS. When I have more time, I’ll go through them both and force SSL on, after dealing with updating the references in the databases.

In addition to that, I redid my personal homepage at juliemartin.org. Not only does it also have SSL enabled (and forced), but it’s also mobile-responsive! It’s not as pretty as I’d like it, but it’s not bad for a quick redo. I also used PHP Mailer to create a contact form. Additionally, I put in a hidden field that humans can’t see (owing to CSS) as a honeypot for spammers and if that field is filled out, then the form fails to send.

It was in the creation of this form that I realized how much the form’s enctype matters, because if you choose the wrong one, it’s entirely possible that your $_POST array will be completely empty. It worked fine on my own local environment, but I suspect it was getting wiped out by my host’s mod_security in Apache, because I did get a couple of 406 errors, though they weren’t consistent. I spent a good amount of time on Saturday evening wondering why the hell my $_POST array was empty, checking everything, from making sure the form was set to POST to double, triple, quadruple checking the field names.

In the end, the enctype was the issue and everything ran beautifully once I fixed that up. I used Postman to test out a variety of differences between my browser’s POST request and finally found it.

Then I was able to easily code in the hidden field and the failure if there’s anything in it. (Fun fact: I’m pretty certain that the placeholder text in a form does, indeed, count when your conditional is if (!empty ($_POST[’emailaddress’]) though it would most certainly require more testing.)

Overall, I did a crapton of stuff this weekend, I learned a ton of stuff and my brain hurts sufficiently.

In other news, making moves towards ordering parts for a new computer. I’m getting pretty excited about it, not gonna lie.

Next post, pics of my living room setup, I promise. I just got a desk-mounted dual monitor stand from Amazon, which I am in love with and really makes my workspace look awesome.

Until next time!

PDO, why must you hate me so?

My glorious four-day weekend is just about over and I did a bunch of coding and no writing. I did, however, sit happily in air-conditioned bliss. When the humidity makes it feel like 46C (114F), you kind of don’t want to move, much less leave an air-conditioned room.

I made a lot of progress on switching things over to PDO from mysqli, but it’s still not done. I’m still flailing around, trying to figure out wtf the problems are that I’m experiencing. Here are some of the issues I’ve had so far this weekend, all of which are resolved:

  • I had an errant space in <?php. And that borked everything that came after it. Why I didn’t see the space between the question mark and the p is unknown.
  • I couldn’t figure out how to copy a file to the directory above (and thus, outside) the web directory in my PHP Docker container.
  • I further couldn’t figure out how to actually edit a file in that directory once I was able to copy it, but then inserted a nano install in my Dockerfile. (My original linux/unix experiences were heavy on pine, tin and pico.)
  • I decided to actually create and use limited-access users for the database calls (as one should) and then had a hell of a time ensuring they could connect to the MySQL Docker container.
  • Even with limited-access users being valid users, I couldn’t run a simple select statement.

All that’s been taken care of. Now it’s a matter of actually writing the code to get a question pulled from the database, displayed to the user and then matching their typed answer with the answer in the database. I gave it a couple of half-hearted attempts tonight, once I finally got one of my database users to properly make a select statement, but figured I’d accomplished enough.

A lot of it this weekend was making sure things were being done right. It’s hilarious how I’m still not to the point where I was when I was writing things with mysqli. Just need more time. This is not going to be simple and it’s not going to be solved quickly.

Speaking of “quickly”, the process of starting up my Docker containers is not so much with the speed. I obviously desperately need to update my computer, because there’s not a lot going on in that startup process, but it takes — and I timed it — upwards of eight minutes to get both the PHP and MySQL containers running. Now, this didn’t pose a huge problem in PHP II, because the containers were configured by our teacher, so we literally did docker-compose build and docker-compose up to start up and then docker-compose down when we were done. So it’s one thing to spend eight minutes or thereabouts waiting for your containers to come up when you do it once, but a whole other thing to do it numerous times in a day. Come to think of it, there’s probably a way to refresh the configuration/etc without killing the containers and starting anew, but that bears more investigation.

And speaking of refreshing configurations and such, I spent a couple of hours updating my IRC server, services and proxy monitor on Sunday. I’m a terrible person because I don’t update often and, when I do, it’s usually because a new major release has come out. As such, I generally have to start from scratch because various updates are incompatible with my existing  configuration file. But not this time! So I backed everything up (like, twice) and then proceeded to install over my IRC server with the new version and then restarted the server and that worked fine. Same with services. Same with the proxy monitor.

I’d set aside three hours for it and it barely took two — and that included all the backing up and reading I was doing to ensure I knew what the hell I was doing. It went so smoothly! I fully expect the earth to open up and swallow it, now.

And on that note, I should go to bed. Back to work tomorrow and I’ll be working from my air-conditioned living room instead of my non-air-conditioned office.

I’ll post some pics of my living room desk with and without my work laptop next time! I’m really loving how it’s turned out.

Back to it?

Tonight, I spent a couple of hours playing with code for my game.

Not that I got particularly much done, mind you. Most of the time was spent flailing wildly on the command line, trying to remember the magical combination of words and characters to push something to GitHub, or remember how to connect to my Docker containers.

I’m trying to switch from using MySQLi to PDO for the database requests, as I’d mentioned back here. It’s the most robust method, especially when you use prepared statements. And, for my game, the majority of database calls will be to a question/answer database, so prepared statements make total sense because they’ll be reused a ton.

Programming is really a skill you need to practice to retain, just like any other language. It’s been about three months since I’ve done any kind of programming at all and more than that since I’ve touched PHP. So I am definitely out of practice and need to spend time working on that some more. So the PDO thing was what I wanted to tackle tonight. It didn’t happen. But I feel better for having tried out a few different options and learning from those attempts.

This weekend is a four-day weekend for me, thanks to a company-wide holiday on Friday and observing Canada Day on Monday. My goals include a lot of sleeping, some writing, some coding and a lot of sitting with my air conditioner on high. It’s supposed to be more than 40C (104F) with the humidity, so that’s disgusting. I love my city, but living in a place where it gets down to -40C and gets up to +40C is kind of stupid.

Anyway, it’s late, so I should get to bed. More updates as events warrant!

Updates and such

First, the last two months of my life have been kind of hectic. I finished my courses. I went to Las Vegas. I went to Lake Tahoe. I came home and wanted to sleep forever… :) I had a birthday. All told, a whirlwind.

Things are calmer now, so I decided to buy a new desk. No, not for my home office, but for my living room. I’ve had this monstrous L-shaped desk with shelving and storage on the side of it for approximately forever. Like, 1999. It’s served me well. I remember putting it together in my bedroom in my parents’ house.

It came with me to my first apartment in 2001.

And my second apartment in 2002.

And, uh, I’m still here.

Basically, the desk hasn’t been touched (moved, emptied, etc) in 16 years. So I’ve spent the last two weekends emptying it and cleaning it, because I’m getting a new desk from IKEA (yes, the same Linnmon/Alex desk as in my office) and getting rid of this one.

Anyway, I’ve been deeply nostalgic as I go through everything from old cable and phone bills to old birthday cards from my grandmothers (both of whom have passed), from old photos to old tickets to the third Harry Potter, which I saw in freaking Newcastle, England.

And now everything is either thrown out (there was a lot) or stored (also a lot) or temporarily stored because I still need those items regularly.

Which leaves me with the desk.

Obviously, I have to move the computer stuff and lamp, which I’ll do on Wednesday, before dissembling the desk into its two major halves. It gets picked up on Thursday evening and the new desk arrives Friday afternoon. So next weekend will be me building another IKEA Linnmon/Alex desk.

I’ll miss the desk. I will. I’ve had so many memories at this desk, strange as it may seem. I’ve blackjacked people over the head in Thief, I’ve conquered worlds in Civilization V, I’ve written hundreds of thousands of words here. I’ve defeated innumerable dungeons and raids and bosses in World of Warcraft, I’ve spent hours laughing as I recorded podcasts, even more hours editing those podcasts… I have spent a lot of time at this desk over the years.

And I know, it’s just a desk. It’s a piece of functional furniture that I picked out and bought and assembled almost two decades ago.

But the laughter and tears (don’t underestimate the emotions one can feel when writing or interacting with others online), the joy and sadness, the victories and defeats that have happened while seated at this desk are uncountably immense.

While I was going through All The Things, I found a ton of old CDs with lots of data on them, too. Old versions of this very website existed on these CDs, for example.

Also, old stories. Old photos. Even old videos. One day, I’ll try to pull some out and do something with them or whatever.

For now, I’ll sit here, lost in thought, overcome with memories and feelings from the last 19 years of my life.

That’s All, Folks!

It’s nearly 4am on Thursday, March 22nd, 2018.

I should be in bed.

But I just handed in my final JavaScript assignment and my brain is still whirring. Lots of things on my mind tonight-slash-this-morning, so I definitely need to let the brain settle a bit before I try to sleep for maybe five hours before I then work for 6-6.5 hours, before I then go to class.

It was sometime in, oh, June or July of 2016 that I said to myself, “Self, don’t you want to be more technical? Don’t you want to learn PHP?”

My job, at the time, was Head of Customer Success for a small Montreal-based startup and I was forever not quite understanding everything. Tokens? Authentication? PHP errors? Yeah, so it would have been useful, I thought, to learn PHP.

Surprisingly, I don’t learn amazingly well through online classes. Maybe I’m old-school — or just old! — but I need to be sitting in a classroom, listening to a teacher. I know, I know, silly. But still, it’s how I learn best. So I’d looked up what I needed to do at my old university’s Continuing Education department to get to PHP. Pre-requisites: Java Programming, SQL and HTML5/CSS3.

… yeah, so I said screw that. But by fall I’d been thinking about it more and more. I thought, at the minimum, maybe I’d just take the SQL class, just 20 hours or so of the course, one evening a week for a couple of hours, for ten weeks. So I signed up for the fall semester.

And then I saw that the HTML class, taught by my favourite teacher in ContEd, was available, so I swapped SQL for the winter semester, figuring I’d take HTML and update my skills. You know, learn about things like media queries and responsive webpages and maybe not use tables for layouts when I could use divs. It would be a good test for me to see if I could handle four hours of class once a week for ten weeks while juggling work, since it would be mostly a review for me.

Well, I got like 4-5 weeks into the class and then I got laid off at work. So I kept going with the classes. HTML and SQL were already paid for. So I kicked ass in HTML and did very well in SQL and then I took Java, which was so very, very painful, then PHP (with virtually no break in between), oh, and I started a new job in there. And then, finally, I had a bit of a break between PHP and PHP II.

Finished PHP II (it was an awesome class) and that left me with one class left to get a diploma: JavaScript & AJAX. So I took it this winter.

Really not a fan. hahaha.

I’m sleep-deprived and have an exam in, oh, under 14 hours, so that’ll be fun. But this is it. Unless my assignment is a failure (it isn’t), or unless I completely bomb the exam (I’m really hoping I won’t), I should be finished with JavaScript & AJAX after I write my exam tonight.

And with it, I’ll be done with my certificate in Front-End Web Development.

And with that, I’ll be done with my Diploma in Web Programming.

18 months after I started, I have learned an insane amount of stuff. A short list:

  • HTML5, CSS3 and media queries
  • SQL: creation of a database and database table, select statements, nested queries, all from the command line!
  • Java: my real intro to programming, with variables, conditional statements, for loops, data types (booleans, integers, floats, etc), use of NetBeans (ugh), keyboard buffers, regex, arrays, data validation, using database queries to pull an item from a database, object-oriented programming and the like.
  • PHP I: Basically, all the Java stuff but done in PHP, including some cool server stuff. Plus more MySQL.
  • PHP II: Man, where to even start? Docker and virtual containers, GitHub and the command-line interface, repos, pulling, pushing, fetching, etc, APIs, security, passwords and hashing, the cloud, indexing and search within MySQL, unit tests, stuff about composer… Honestly, I probably learned the most in this class and I loved it.
  • JavaScript & AJAX: Well, I can validate forms. haha. And make AJAX calls! And write stuff that’s very similar to Java and PHP within JavaScript. I had no idea it was so deep and complex and we didn’t even touch on frameworks.

I didn’t learn a ton of new stuff here, but it’s a 300-level class and PHP I is 400 and PHP II is 500, so I basically knew most of the stuff. But it’s always good to have it refreshed.

So tonight, after my exam, I’ll have completed 260 hours of class over six courses, in 18 months. I didn’t take any breaks, I just took one every semester until I was done.

Were I to do it over again, I’d book more time off of work for final projects/exam prep. Alas.

I plan to spend several months catching up on everything from sleep to TV shows, plus doing a lot of writing and some coding on the side. There is my game to write, after all!

I have deeper thoughts about this experience. I have more to say about how I feel after all of this.

But it’s 4:28am and I should wake up in about five hours. Maybe I’ll be even more loquacious next time.

More complexities

Due to the fact I had a JavaScript midterm last week, I haven’t done any coding for my game project. That’s okay. This is not going to be something I’m going to hack out over the course of a week. Or a month. This is going to take a long, long time.

In the meanwhile, I’ve been doing some reading.

Let’s talk about usernames: Excellent read. Also, horrifying. As I was reading, I came across this line:

There’s our user table, there’s our unique username column. Easy!

That’s exactly what I was thinking. That’s how to make something unique, right?

And then I kept reading. Case-sensitivity, normalization, punycode, other alphabets… Also, single-script confusables (ie: a lower-case L and a number one and a capital i, l 1 I, all look ridiculously similar in many fonts. Is that a problem? And what about unique emails? Gonna have to take the + sign that Gmail allows and nuke everything after it to ensure true unique mails. Also, remove all periods in the email’s username portion. And what about names like “root” or “admin”? Probably should disallow those, too.

So that alone gets complicated.

Then I did some more reading about PHP web apps in particular, in terms of best practices, just to make sure I’m on the right page. This page, PHP Best Practices, is a great resource. It’s mostly in English, basically, which is useful. Or, at the very least, I can understand it. It also goes into detail about why or why you should not use a specific way of doing things.

So in terms of storing passwords, I’d been right — this resource recommends bcrypt hashing. That’s wonderful.

In terms of connecting to, and querying, a MySQL database, not do much. Turns out the method I hated most (PDO – PHP Data Objects) when learning is the newest and most robust method, particularly when using prepared statements. All of my testing code to date uses mysqli, so that’s something I need to rewrite to ensure it works okay.

So lots of reading and understanding done there and more to come, I’m sure.

In other news, I successfully installed a Let’s Encrypt SSL certificate all by myself for one of my (many) domains. The only bummer is that they expire every three months. Still, refreshing them takes like, five minutes. So it’s not too bad. And it’s free! That’s one of my projects for this spring: Get all of my sites to be on SSL, using HTTPS, even though I basically don’t ask for any user information whatsoever. Why? Because Chrome is starting to list things as “insecure”. So that’s something to do.

Finally, in terms of work, can I just say how delightful it is to have a job that allows us to work flexibly? I was about an hour and change short of my 40 hours last week, so I made up the time this weekend. Of course, in making up the time this weekend, I actually worked for almost three hours. So because I worked an extra two hours or so, those are banked against next week’s time. Normally, I work 9-hour days on Mondays or Tuesdays (sometimes both) in order to make up for class on Thursday, but seems as though I won’t need to do so this week. And the bonus is, I’m all caught up on my own outstanding tickets. Whew.

All right, it’s now past midnight, so I should consider going to bed, now. Have an excellent week!

A Crazy Idea

Oh, hello! Didn’t expect to see me so early in the new year, did you? It’s only been about five weeks since my last post, so I know, this is weird. ;)

I passed PHP II. Not only that, I kind of did pretty well. I nailed a bunch of stuff on my final project and am still feeling pretty good about that. I saw The Last Jedi with my brother and his friend A on December 15th. Afterwards, we stopped in at our parents’ house, where my brother would have dinner with them and his wife and the two kids, while I… had to go home and code until my fingers bled. So I bounced my youngest nephew on my knee for a bit, squeezed the eldest in a hug, then headed back home.

It all started to just click for me. I would have passed, if I’d handed things in as they were. But it would have been something like a 65% or something and that would have stuck in my craw. So I was thrilled when things just started to click and I was able to build out a lot of the required functionality that, to that point, hadn’t been working right for me. At the risk of sounding cliché, the force was strong with me that night and I finished the class with an 87%.

So that was a relief, but I also felt like I learned a lot of lasting knowledge in PHP II — and not just PHP stuff, either. We’re talking stuff like gitbash, git, Docker, containers, APIs, JSON, all kinds of stuff. It’s pretty cool and I’m so glad I learned that along with the PHP stuff I learned.

And now, JavaScript & AJAX has begun.

Once I’m done with this, by the end of March, I’ll have my Diploma in Web Programming. That represents 260 hours of class alone. I don’t even want to think about how many hours I’ve slaved over this material outside of class, but it was easily as much time in class for each — if not more, especially in the case of Java. So we’re looking at about 520 hours, if not more, working through HTML/CSS, SQL, Java, PHP and now JavaScript and AJAX.

I can’t wait to be done and reclaim any portion of my free time again. ;)

And speaking of free time, I have a crazy idea.

I spent a lot of time playing on the computer as a kid. A lot. Not a lot playing triple-A games or first-person shooters or whatever (although there were a ton of games from Sierra and such, of course). No, what I spent probably way too much time doing as a kid was calling in to local Bulletin Board Systems and writing on message boards and playing online games. I spent what must be years of my life playing Trade Wars 2002 and Legend of the Red Dragon, which were two of the most popular BBS door games that existed.

Another one I loved was written by a friend of mine. It was called Sky Mountain. The goal was to climb to the peak of the mountain, at 241,000 feet, but you had to mind the Sky Lord and the other climbers on the mountain. The way you climbed the mountain was by answering trivia questions. (Or was that how you gained health? Magic? Whatever, trivia questions were vital.)

So I’m going to take my neophyte PHP skillz and create a web-based game. Details are very fuzzy right now, but I’m planning on a game that harkens back to Sky Mountain in that it has a lot of trivia in it, which will, naturally, be vital to game progression. I’m hoping to have over 4000 questions to start with, in a ton of categories, and I also hope to have a reasonable mechanism to prevent duplicate questions (outside of just having a metric assload of questions to draw from). We’ll see how that goes, since, you know, I’m going to write all these questions myself. While I’m sure that there are open-source trivia databases out there, if this is my game, it’s going to be my game, at least for the content. Some of the questions will be easy to come up with — periodic table stuff, for example, or capital cities. Stuff about geography, music, religion? All a little more difficult.

So that’s my plan for basically the rest of the year. My goal is to have a working beta by late September. Of course, I can’t dedicate much time to it right now because of class, and I do have a full-time job (which I love) and I do have at least a couple of trips happening this year, plus there’s National Novel Writing Month in November… It’s going to be challenging for sure, but I’m really looking forward to taking all the stuff I’ve learned (and will be shortly learning) and incorporating it into a real, actual project.

I’ll be sure to check in again before JavaScript/AJAX ends!

Three months later…

Whoops. And here I thought I’d be updating this more frequently.

Work, class, business trip, National Novel Writing Month, all of these things are conspiring me from actually updating things here. Also, not going to lie, the fact that I deal with WordPress installations all day long makes me a little less likely to want to open up my own blog admin page. ;)

Seattle was awesome. Meeting my team was great, but so was meeting Sandra. At long last! Just 23 years in the making, no big deal. ;) And how “Seattle” is this pic? Seriously.

Seattle’s Ferris Wheel on a rainy day. How much more “Seattle” could this picture get? #seattle

In terms of National Novel Writing Month, I had taken the last week of November off from work to get that taken care of and to work on my PHP final project. I hit 50k at 6:58am on Thursday, November 30th, after pulling an all-nighter. I do not remember the last 3000 words or so. I was falling asleep while typing, which was an interesting experience. But I validated!

Then I went to sleep for six hours and then I went to class that night and did PHP stuff.

Honestly, PHP II has been a very different class from PHP I and I’ve really, really enjoyed it. I’m conversant with tools like git, now, and GitHub. I’m doing shit from the command line. Merging things, making branches, testing stuff out. It’s pretty cool.

I’m still panicked because my final project is due this Friday, the 15th, but at least now I think I should be able to pass. I got Stripe integration working, which is GLORIOUS, and also a chunk of my grade. I still have a lot of finicky work to do, but hey, that’s what this weekend should help me to accomplish. Plus every day after work this coming week. I basically can’t do anything until the 15th.

But also on the 15th? Seeing The Last Jedi with my brother and his friend, A. My brother, A and I have seen The Force Awakens and Rogue One together, so it’s like a tradition now. And we have reserved seating. AND it’s not a stupid 3D showing! (Yo, some of us get motion sick at the drop of a hat, okay??) So I took a half day off work that day (I had 11.5 days off allocated to me when I joined my company, which resets to 25 on Jan. 1!) and will go see the afternoon movie with my brother and A and then come home and finish my project. If, by some miracle, I’m finished my project before 11:59pm on the 15th, I’ll go Christmas shopping after the movie.

Can’t believe another year is nearly over and that the holidays are almost upon us. This year has, in equal parts, dragged by and flown by. It seems as though it’s been in fast-forward since I started working in June. Days turn into weeks and weeks into months without my realizing.

Oh, and for those of you interested in the final version of my home office:

My home office was completed last week. Here's the result. #homeoffice #remotework #desk #mac #huelights

I do quite enjoy it.

Okay, on that note, I should get back to gitbash and Sublime Text 3 and GitHub and Docker and Postman. #nerd #geek

Working Remotely

I have to admit to being pretty surprised that I’m posting here within a couple of days of my last post, but, uh, hey. When you’re inspired, you’re inspired, right? Right.

So first, new theme. Libretto. It’s pretty and I like it and I didn’t much like the other one. Hopefully, this convinces me to gasp blog even more frequently.

The real reason I wanted to write tonight, though, is that I’ve been thinking a lot about remote work. I’ve been thinking about it a lot over the last year and a half or so, but most especially over the last three months since I’ve been, well, working remotely.

I’ve been really lucky in life (and I recognize that!) in a lot of ways and I’ve been especially lucky when it comes to work situations. I became the Chatting Online Guide at About.com back in September of 1997 — when it was still The Mining Company — and was in that position for four years. It was a remote position and I not only learned a lot about business (and stocks and shares and options and IPOs) but I learned a lot about how I work best.

For most of those four years (not counting the first 6-8 months or so), I made a great living while working remotely. Of course, the compensation structure was such that I got paid for site traffic, including people chatting in my chatrooms, which is where the vast majority of my compensation came from. It took a lot of effort to moderate and manage those communities, including giving moderation privileges to up to ten volunteers, all of whom took shifts during a given week. Plus I was putting out content on a weekly (and eventually biweekly) basis, along with newsletters, answering emails and making attempts to get people to discuss things in our forums.

Due to the fact that my compensation was based on traffic, every bit of effort I put into my site and my communities translated into actual dollars. (Well, fractions of a penny, to be honest — but you’d be surprised how quickly all of those fractions can add up!) As such, I cannot say I attacked this job in a healthy way.

And this is where I realized, probably for the first time in my adult life, that I am an all-or-nothing person. I rarely go halfway on anything and, if I do, I feel oogy about it, for lack of a better word. I go into a situation and, if I decide to commit to it, I commit to it. I don’t always choose to commit, though. Sometimes I don’t. Heck, most of the time, I don’t. But if something catches my attention, ignites a spark, gets me passionate… I’m all in.

So it was with About.com. Not just because of the money, because that definitely started coming in later on.
(My first paycheque for About.com was $6.53 US.) It was writing! It was sharing knowledge! It was answering questions! It was building a real community. I was — I am — passionate about these things.

Due to my silly passion (and, okay, eventually the money), I poured a lot of time into the site. That doesn’t mean I worked 100 hour weeks regularly, but it meant that sometimes I did. It meant that I’d regularly be up until 3-4 in the morning, sometimes later if I had a deadline, then sleep like the dead for a few hours and then get right back to it. It literally paid off. Every day I wasn’t doing something with my site meant a dip in my revenue, meant that people weren’t going to my site (except to chat) because there wasn’t anything new. I would regularly work on weekends and holidays.

Now, let me tell you a secret: I have never been good at consistent effort. Never. It’s pretty much my Achilles’ heel. I can pull all-nighters with the best of them and I can make my deadlines with little sleep and lots of caffeine. That is a lot easier, to me, than doing a little bit every single week or every single day. So I would definitely take days off of working on my site and do nothing (although I’d think about it a lot, usually) and I would spend days (and nights) working my ass off to try to “catch up”. Like, 10am-4am with an hour break, total, sometimes.

Either I was 100% on (always working on the site throughout the day and into the night) or I was 100% off (though, like I said, thinking about the site) and occasionally, I would be on overdrive at 200%.

Yeah, like I said, not healthy.

I was happy, though. Some of the best times of my entire life happened in the four years I worked remotely. Some of the worst, too, to be fair. More good than bad, though. And, over the years, I’ve done other stuff remotely. I’ve been a paid moderator, I’ve been a website developer/freelancer… And I really enjoyed working in my own space, on my own schedule, doing my own thing.

So when I got laid off in late October of 2016, I knew I wanted to work remotely for my next job, if it was at all possible. I’d been applying to various places who hired remotely for a few months by the time I got laid off: Stripe, GitHub, Buffer, HelpScout and more. I got through a few interviews with some and others didn’t even respond to my application. (Which, by the way, is so ridiculously commonplace but so rude! When I was hiring direct reports, I always responded to people in the initial waves of applications, since I always preferred to know rather than be kept in limbo.)

As the weeks (and months!) passed, the thought of going into another office just depressed me. I was sitting there, writing applications for jobs I didn’t want, where I’d have to get up at like, 7, go to work, come home around 6 and then start the whole cycle again. I really didn’t want that. My soul just couldn’t take it. And yet, I applied, because apparently I’m not someone my landlady thinks is cool enough to not need to pay rent. And the utility companies, they insist I pay them as well. And so on.

And then, I got my current job doing customer support — remotely. It was an extensive interview process with coding exercises as part of it! And three phone calls. And through it all, I was like “is this happening? Am I going to get it?”

When I got it, I was still shocked. Stunned. I still am, really. I absolutely delight in the fact that I don’t have a commute anymore. I love that I can do my laundry in the middle of a day when there isn’t a soul in the tiny laundry room of my building. (As opposed to deathmatches on the weekends.) I love that I’m here for deliveries. I love that I can buy groceries and not have to decide what’s for lunch until I want to have lunch, as opposed to making it the night before or the morning of. I love that I don’t have to pay for a monthly transit pass. I love that my company trusts me (and the other employees — we’re all remote!) to do our work and that it’ll get done, whether or not I had lunch with a friend from out of town and took that afternoon off. (Which I did a couple of weeks ago, by the way.) I love that I can leave work at four so I can get to class on time, even if I only showed up for work at 10am, because the other couple of hours will be made up sometime.

It’s that trust that makes me absolutely gleeful.

When I’d occasionally work from home at my last position, I felt like everyone thought I was goofing off. I mean, I wasn’t. Other people did so when they worked from home and I was worried I’d get painted with the same brush, so I really didn’t do it terribly often. But I was always, always so productive at home. I don’t know how people are expected to put in a good day of work when people are always talking to them. At my last job, I was in a big room with five other people at one point (at times up to 9) and it was just impossible to get stuff done. There was always a conversation going. Even with headphones on. It wasn’t rare for me to stay late, ’till 7 or 8. Once, I stayed at work — working — ’till ten at night. It was peaceful once everyone left.

At the same time, working remotely does have its challenges. You do want to be there for your team and you do want to put in the time and get the work done. But the temptation to Work More is always there. That’s why I’ve now turned my spare room into my office. I am in there when I’m working and rarely when I’m not. I try not to log in to work stuff elsewhere — not on my phone, not on my desktop computer, not anywhere. It’s an extremely conscious decision on my part to just … leave work in the office, really. And it’s hard, because part of me wants to go all in and work 15 hours a day sometimes.

The main challenge, then, for me, when it comes to remote work is that I am constantly feeling as though I should do more. There’s no reason for me to do so. It’s not like other people work much more than the 40 hours expected of them. (I’m certain there are exceptions.) But I would work too much at my last job and got burnt out. I worked too hard at About.com and, while I didn’t get burnt out, I’m sure it was just a matter of time before I did. Hell, I work too hard on my classes and am totally burnt out there. Thank God I have three weeks before PHP II starts.

My point is that it’s hard for me to not constantly work when I’m in a remote position. So far, I’ve been very good at setting limits. Having other things to do with my time is also helpful (like class stuff, family stuff, friends, writing, etc) because otherwise that time could easily be filled with work.

Still, the draw is always there.

That said, I gotta say, I break the rules of remote work and I work in my pajamas, at least during the mornings, most days. That is definitely a nice perk!

All right, I’ve rambled for nearly 2000 words. That ought to suffice. More thoughts on remote work at some point in the future.

Heck of a few months…

Well, I finished Java by pulling more almost-all-nighters than I’d care to think about. I was also in the midst of, you know, working, so I couldn’t do actual all-nighters. But I survived on something like five nights in a row of under four hours of sleep. And then did it again for three (?) more nights.

But I passed, in the end.

Unfortunately, I didn’t have any kind of break between Java and PHP I.

So, PHP is kind of the reason I wanted to take these classes in the first place. My previous workplace had a web app built in PHP, so I thought to myself, “Self, you should learn PHP so you can actually sort of kind of understand what people are talking about.” Essentially, I was just so tired of always telling my clients “I’m sorry, I’m not a technical contact”, and I was tired of not fully grasping what the devs at work were talking about.

However, in order to take PHP I (and then PHP II), I had to take:

  • HTML 5/CSS 3
  • SQL Essentials
  • Fundamentals of Java Programming

So I did all those. I did HTML/CSS (which was a nice refresher, but I learned all about media queries! HOORAY!) and I did SQL Essentials (I can create database tables! And query them! And stuff!) and then I suffered through Java, but, ultimately, I emerged victorious.

And finally, PHP.

I don’t know what I was really expecting. I’d known of PHP for years. I’d edited old PHP scripts, used PHP includes. It wasn’t a complete black box to me.

And yet, that was a hell of a difficult course. Not sure how I passed my final exam because it was pretty rough. Still, I passed the exam, did well on my assignments… well, the two of the three that I know of, anyway. The third assignment is due in less than half an hour as I write this, but I finished it 90 minutes ago or so and that completes my obligations for PHP I. I didn’t even really need to do the assignment, but it got personal. Stupid databases and displaying them as tables in HTML using PHP. Still, I learned a lot of stuff. Database stuff, especially, but also things like foreach loops and all about arrays and sticky forms! Note to self: redo your personal website (not this one) and incorporate not just pretty forms like you learned in HTML/CSS, but sticky forms.

I gotta say, it’s come in handy. Work, which is going well, supports some stuff built in PHP, so a customer asked me why a subscribe button wouldn’t display on her site. So I went and it was displaying for me. And then I realized that she must be subscribed to her own list. So I checked the code and, yep, right there — if user is already subscribed or if the third-party site is unreachable, don’t display the subscribe button. Of course, it was in PHP and not basic English, but I understood it just fine!

So that was exciting.

As to work, I’m getting into the swing of things. Still learning, but I don’t feel completely idiotic anymore, which is nice. I’m heading to Seattle in October for a conference, so that should be fun, especially because I’m finally going to get to meet Sandra, who I first met online in late 1994 — and we still haven’t met. She is the oldest online friend I have whom I’ve not yet met. Well, not old in that sense, but the person I’ve known the longest, consider a friend and yet haven’t met. I won’t have a ton of time due to work conference stuff, but should be able to steal a couple of hours to meet up.

So I work from home and that is such a lovely thing. I decided I would redo my spare room into a home office. I remember from working at About.com that it was important to have a workspace and a living space, so I, uh, might have potentially gone a little bit overboard with the home office thing. To begin, I got my parents to take me to IKEA… All we could fit in the car was the Alex Riser so I assembled that on the Friday night before my delivery was due.

building
Me, about to start building things.
Alex Riser from IKEA
Building the Alex riser.

Then, on Saturday, the desk arrived and so I started building that stuff. It’s not an actual desk, per se, it’s two sets of drawers and then a countertop, basically. It’s the Linnmon/Alex “desk” from IKEA.

Alex drawers
Gotta start somewhere, right?
Drawer building
The outer shell.
Drawers.
And drawers to go inside!
Completed drawers.
Voila. One set of drawers done. That was enough for Saturday.

On Sunday, I started anew with the other set of drawers.

More Alex drawers
Drawer set number two.
Doodads.
Inventory of the pieces. Yep, everything’s there.
The shell
The shell.
Desk
Completed desk.

So once I’d finished constructing everything, I screwed in the middle leg and added the riser. Looks pretty great, right?

BUT WE’RE JUST GETTING STARTED.

Backlit desk
Lights!

Why yes, that is a blue-coloured light coming from behind my desk. Why Julie, how did you achieve this? Simple, the Philips Hue Light Strip Plus. I MAY have gone a little nuts and spent, oh, a few hundred bucks on smart lights I can control with my phone. I have two in the living room (soon to add another three) and I’ve got four bulbs and the light strip in the office. The light strip is actually stuck on the back of my desk. It’s great.

desk
Desk, with monitor and computer.

So this is what my desk started out as. Oh, yeah, did I mention the Light Strip Plus has sixteen million colours? Because it does. :)

The monitor is an ASUS VC279 (27″) and it’s perfect for me with its large desktop, allowing me to put less important applications on my work laptop. The large grey pad is a Corsair Gaming Mouse Mat and I have a Fellowes wrist support I got at Staples with a Logitech USB wireless mouse. The keyboard is an older version of the Apple Magic Keyboard,

The lamp is also from IKEA — a Klabb. It needed an adapter to be able to take the Philips Hue bulb I had bought for it, so it’s not lit here.

Computer workspace
The adapter did arrive.

What you see under the monitor, under the riser, is my Sony bluetooth speaker. It’s not great — I usually let it hook up to my iPad when I’m in the kitchen — but it works nicely here. Still, it’s a temporary solution. I’m planning to get actual speakers. Also a riser for the laptop.

Desk
Oh yeah, the lamp bulb is also 16 million colours!

I stole my own floor lamp from the living room and put in three Philips Hue Ambiance/White light bulbs in there. So they don’t change colour, really, but they can be one of 50,000 shades of white. Bright white, blue white, yellow white, etc. It’s very cool. I actually went out and bought an identical floor lamp to put back in my living room and I’ll purchase another three bulbs to place in it. Mwahahaha.

Of course, there are all these icky cables everywhere.

Cable management
So I decided to do something about it.

I bought ALL KINDS OF SHIT, yo. And I put a lot of it to good use!

Power bar stuck on to the back of one of my drawers.

The desk is a little further out from the wall than I’d orginally wanted, but there’s just no way to keep it closer if you want things to appear clean.

Cable management
See the hooks? They carry the power cable to the OTHER side, where I have another power bar hooked up, which is the one that actually plugs into the wall.

It’s not perfect. I probably should spend some time re-doing parts of it, but it’ll do for now. Just gotta get those speakers and the laptop riser and I should be good to go.

I like the setup so much that I want to get a second one for my PC desktop computer. I kind of want to put it on the opposite wall as the work computer and just have that be The Computer Room, but I do think it’s smart to keep business and pleasure far away from each other. Or, at least one room away.

I definitely need a new main desk for my desktop, though. We’ll see, we’ll see. :)

So that’s what’s been up with me. PHP II starts in about three weeks, so we’ll see if I manage to do anything with my personal website before then. ;)

Oh, and my eldest nephew, Henry, turned three on Sunday! Here’s a selfie of me with the birthday boy.

Henry and me on his third birthday.