The Dark Roast

By Sean Lunsford

Arabica 1.1 and GitHub

So I haven't done a whole lot of programming lately. I've been doing other stuff at work recently, and I hadn't given any free time to it in a good while. But I've been wanting to dip my toes back in those waters again.

Last summer, I read up on git and GitHub, and set up a repository for Arabica, the theme for this site. There were some updates I'd been wanting to make, and it seemed like an easy project to get my feet wet on. But then it sat, untouched on GitHub, for nine months. (So says my commit history.)

So this week, I sat down and spent a few hours staging commits, merging branches, figuring out how best to use repositories and branches on my test server and production server to edit code and then push it live. A really nice thing about using git is that I can keep a branch with my bespoke version for The Dark Roast, which is separate from the master branch intended for the public, and merge changes to the master into it.

Anyways, so I've now released version 1.1, with some of the features I've been wanting to add for a while. The big one is popover footnotes.[1] I've also added support for post images and for tag pages that include the tag name, description, and image.[2]

It feels good to code some again. I have some more updates on the agenda for Arabica, but I have greater aspirations for getting back into iOS development, this time making use of GitHub and all that version control has to offer.

  1. I've been seeing these increasingly on the sites I follow, and I really wanted to ship them on my own. It seems a lot of them use the same jQuery framework, which was easy enough to include in Arabica. Isn't this so much better than the old way? ↩︎

  2. Ghost themes automatically support tag pages, but use the index template if no tag template exists, meaning they show a list of tagged posts, but otherwise look no different. ↩︎


I'm back after a couple years of not writing to announce I started a podcast. My friend EJ and I have known each other since before high school, after which we both studied engineering—he in Germany, I here in the States—and we discovered last year that we have both become avid podcast listeners in the last couple years. A number of months ago we started kicking around the idea of recording a show together. From that discussion, and many hours of recording and editing,[1] was born our first episode, which just went up today.

It'll take some number of days for the first episode to appear on iTunes, but it's embedded below and over at libsyn. And you can subscribe via RSS in your podcast app of choice.

We describe the show as our "weekly chat about things past, present, and future," and we're both excited and interested to see where this experiment goes. In this first episode—in a somewhat appropriate, if unintentional, nod to our name[2]—we talked about food and eating habits, starting all the way back in our childhoods.

So, without any further ado:

Update: Breadcrumbs has made it through review and is now available on iTunes.

  1. Including several recording sessions' worth of content that will probably never see the light of day ↩︎

  2. I didn't even think about this until today while posting it. ↩︎

Tic Tac Toe

So I've been working on my first legit app. It started as an exercise in the online iOS/Swift course I've been working through. The exercise was to create a basic tic tac toe game for two players. That was easy enough, but afterwards I thought I'd see if I could get the program to play one side—to see if I could get it to think like a human, at least well enough to play and win (or tie) against a human.

It's actually been a really good exercise. Tic tac toe is a simple enough game with a fairly straightforward strategy that can be distilled down to an algorithm. I played through my app against myself a bunch, trying to take every approach and play out every scenario I could think of, looking for patterns. I also looked at strategy section of the tic tac toe Wikipedia page and compared notes with what I'd come up with. It was actually pretty close to what I'd determined myself, but it was helpful to have it spelled out, and there were things I hadn't thought of. My own experience had more nuance in certain areas, as well.

Actually coding the strategy has been really interesting, too. This is well beyond the stuff in the tutorials so far. I've created a bunch of functions that analyze the grid of nine cells to determine the best next move. I've created a GridCell class with several different properties and methods to help analyze and manipulate the cells. I've read up about classes like UIAlertController and UISegmentedControl to include interface elements that haven't come up in the course yet.

As I've gone, I've added more and more complexity to the algorithm. It's gone from just reacting to the board, blocking when necessary and winning when possible, to playing more aggressively, looking for opportunities to force the player's hand or create forks that guarantee a win—and even anticipating forks by the player and stopping them before they happen. I've introduced easy, medium, and hard modes. Hard mode may be a bit of a misnomer—unbeatable is more accurate. It's the strategy played out perfectly, so that it will tie another perfect player every time. (An interesting and unexpected result was that, by coding it to compete with an experienced player and testing it that way, I accidentally left gaps in the early stages of the hard mode. An inexperienced player would do something unexpected and could actually beat it. I've plugged those holes now, so it should be actually unbeatable now. I've also improved the algorithm so that it should be better at handling scenarios that I haven't anticipated.)


One of the app's more interesting features (at least in my opinion) started life as a debugging tool—at least the concept did. Testing and debugging the program has involved playing it over and over, trying every possible scenario against every AI mode. Sometimes I'd find a bug in one specific case, but once I tweaked the code, it would take playing through multiple times to try and get that specific scenario to play out again. I found myself wishing there was an easier way to set the game up at a specific midgame state and then trigger the algorithm. To start in two-player mode and then switch to one-player on demand. At first I thought it would be a switch that I would include in the prerelease version, but then I thought that this might be a better interaction for game settings than the series of action alerts that let you choose the mode and starting player. Now there is a segmented control to set the AI to easy, medium, hard, or off. As always, the AI will play in response to a move by the human, but now there is a button to trigger the AI player on demand. This can be used to tell it to start the game, but also to trigger it at any point during the game. These two controls together are great debugging tools, but I think they're a much more interesting approach to the game settings, as well.

This is the best part of learning to code—the course is a great starting point, but what I love is going above and beyond what I've been taught, and figuring things out for myself.

I also have to mention in passing that it's really great that stark, flat, minimalism is in, because that's exactly what my app is. A couple years ago you had to have fancy graphics to be taken seriously, but now a grid and a couple of controls on a white background fits right in.

So I've submitted my first app to Beta Review. It'll be cool to get this thing live on the App Store at some point. Not that I expect it to bring much in, if anything (the release version will probably be ad-supported), but it's a baby step towards someday having apps that might actually make money. And just having an app on the App Store will be cool.

Since the Apple keynote last week, I've been meaning to write out my reaction to what was announced. It was a lot to wrap my head around, and I've had a lot going on. And I've spent a lot of time listening to and reading others' thoughts on the event. You'll have to take my word for it that most of what I've written here is my own thoughts that I had during or after watching the keynote. Some of my thoughts have developed since then, some influenced by what others have been saying. I've been working on this on and off for the past week or so. Now that the iPhones are coming out in the morning, I'm finally pushing myself to wrap it up and publish.

There was more hype leading up to this event than any other since I've been following Apple this closely—that is, in the past few years. I remember when the iPad came out, and I was an Apple fan then, but I hadn't been following the rumors and opinions leading up to it. I had no idea anything was coming, or even that there was an Apple event that day. I just remember loading, which I did from time to time, and seeing this new device plastered across the home page, with a strange-sounding name. But it blew my mind as soon as I saw it. Of course, I couldn't have imagined then how quickly the iPad would take the world by storm.

But this time, I was up to date with the blogs and the rumors. I knew two iPhones were coming. I knew the sizes. I knew some wearable was coming, that most people were expecting to be a watch. It was interesting to see how the focus of all the blogs shifted. Everyone had been talking about the phones, right up until a few days before, when the watch, which had been a side story up till this point, suddenly became the center of rumors and speculation. And Apple didn't try and dampen expectations, but fueled them, even putting the countdown up. Clearly, this really was a big deal.

All the hype made it really disappointing when the live stream failed. Apparently it cleared up after the first 20 minutes or so, but between the issues and my bad connection, it just wasn't working, and I was missing too much. So 10 or 15 minutes in I gave up and watched it when they posted it that night instead.


I have to say, I was surprised at the pace of the keynote. I've gotten so used to the ritual of updates and stats on the App Store, retail stores, market share, and everything else we sit through before they get to the good stuff. When the iPhone 6 showed up on screen not ten minutes in, I was stunned.

The iPhones look great. There were no surprises there. Better camera, better processor, better battery life (I would've loved to see the phones stay slightly thicker, and add a lot more battery life, but oh well). Obviously, bigger screens. I guess we didn't know what variations of "iPhone 6" they would be called. Although I expected that if one of them was called "iPhone 6" with no modifiers, it would be the 4.7".

I'm glad that they finally doubled the storage capacity for the two higher tiers, introducing a 128 GB model. I already knew next time around I needed to get 64 GB. I was tempted to go for 128, but I decided I'd be happy to take the 64 GB for what I've been paying for 32, and save the $100.

It's a little crazy that the bottom tier didn't get doubled with the rest of them, though, instead staying at 16 GB. Not that it effects me any, but with all the apps and media available to fill these devices with, it seems like 32 GB should be a minimum. Especially when you need 5 GB free for a software update.

What surprised me was that I actually found myself considering the Plus. Yes, it's a ridiculously massive iPhone, but the extra productivity and camera features are attractive, as is the better battery life. Given how much I use my phone, the extra screen space even beyond what we're getting in the 4.7" model would be very welcome, especially with the iPad-like landscape layouts. I would love an iPad mini, but I've seriously considered the Plus as a single device to replace both my iPhone and iPad. But it just seems like it could be way too big and unwieldy as an iPhone. (A lot of people point out that it would look funny holding up to your head to talk on the phone. That's not a factor for me at all. This is a computer that I happen to use to make phone calls sometimes. And when I do, I tend to use earbuds anyways.)

So I preordered the 4.7" last Friday. But I've been wondering ever since if I should've gone all the way to 5.5". I've been far more torn over this issue than I ever thought I would be.

To think two years ago, 4 inches seemed big.


Apple Pay seems to have a lot of potential. The fact that it's dependent on partners could limit its reach, at least initially. You have to have one of the handful of partner banks, and you have to be shopping at a place with the readers. I'm less worried about the merchants end. My understanding is that anyone can install an NFC reader at their physical location and begin accepting Apple Pay. Maybe there's a little more to it than that. But there will be pressure to get on board, and I think once this starts gaining momentum we'll see a pretty rapid expansion of places accepting Apple Pay. Of course, for shopping apps, it's even easier. There's no reason every store app shouldn't implement the API and start accepting payments that way.

Where I'm more concerned is at the bank end. Apple lists six current partners and five upcoming partners. Eventually all the big players will be on board. But will smaller institutions, like local banks and credit unions, ever be part of this? If NFC—between Apple Pay, Google Wallet, and others—replaces plastic cards with magnetic stripes as the standard, then this will be the way every financial institution issues credit and debit "cards". But as long as this plays second fiddle to plastic, and as long as it's a niche product for geeks, I don't see the small players getting on board. Currently, my primary credit card will work with Apple Pay, but my debit card, which I make almost all my day-to-day purchases on, won't. Of course, the convenience may win out and convince me to start using it everywhere I can, with my supported card.

If anyone is in a position to finally sway the payments standard to NFC, it's Apple. We already know Apple strong armed its launch partners into submission, down to announcing the product Apple's way on Apple's timing. Again, typical Apple. They did it to the record labels. They did it to the phone carriers. They're doing it to banks. And they have an edge from the privacy angle. They've already made it clear they have no interest in collecting your data. They're in the business of selling devices and user experience, not targeted ads. And with Apple Pay, they explicitly said they wouldn't store your cards on their servers, and they won't capture or even see transaction data. They have no idea where you're shopping, what you're buying, or how much you're spending. I think in light of developments in privacy in tech these last few years, this will be very welcome and a strong selling point.

One more thing...

Then, an hour in, we heard that familiar line. If there was a time for Tim Cook to bring back Steve's line, this was it. Someone pointed out (I think it was on one of the podcasts I listen to) that Tim actually got a little choked up when he said it. Then was the reveal, and he came back to a standing ovation, fists in the air like a rock star. It was a pretty incredible moment.

Like the iPhone, it was interesting that they spent no time on build-up to the reveal. Tim said a couple lines about this being the next chapter of Apple, and then came the video.

I have to admit, I was a little disappointed when this wearable turned out to be a watch. That looked form-wise basically like all the smartwatches that have come in the past year. I was hoping for something like the iPhone was to Blackberries and Treos. Something totally different.

Where they really came through was in input methods. The mouse on the Macintosh, the scroll wheel on the iPod, the multitouch screen on the iPhone—when they introduce new products, they find new ways to interact with these products. They didn't always introduce these methods first, but they did them best, and the products they put them in took off, and these interactions became the industry standard. And once again, when everyone else was just slapping a multitouch screen on your wrist and calling it a day, Apple introduced the Digital Crown. This is Apple at its finest—taking something already in traditional watches and putting a new spin on it (no pun intended, again). It's also very reminiscent of the scroll wheel. (Ten bucks says every Android Wear device from here on out has a knob on the side.)

The pressure-sensitive screen is pretty interesting too. I hope to see this make it back to the iPhone and iPad at some point. These, plus Siri, give you a lot of ways to interact with this thing. I do wonder if it starts to get confusing at some point.

The mechanism for switching out wristbands is also typical Apple—a simple, elegant solution that's so obvious now and yet for some reason hasn't been done already. Speaking of switching out wristbands, they also took a notable departure from their one-size-fits-all approach by introducing not only three lines in two colors and two sizes each, but a multitude of bands. This is an unprecedented allowance for customization in an Apple product, especially for a first generation. The iPhone 6 comes in three colors and two sizes, but it's taken eight generations of evolution to get to this point. But Apple realizes that for a watch to take off, it needs to allow for a lot of personalization. It's as much a fashion item as it is a piece of technology. They're marketing it as their most personal product yet. Personally, I really like the space black stainless steel and the space gray aluminum.

The name was a surprise. John Gruber had notably been avoiding using the name "iWatch", because he seemed to think this wasn't going to be a watch (see above). But I think we all were taking it as a given that if it did, in fact, look like a watch, iWatch would be the name. It's interesting that two of the things they announced on Tuesday—Apple Watch and Apple Pay (or WATCH and Pay)—both ditched the "i". Maybe the i is starting to feel dated. Maybe they're bringing these products more in line with tv. Maybe it just sounds better.

When they started getting into functionality, they seemed to take the complete opposite approach than their usual one (I'm sensing a theme here). The iPhone was notable in what it didn't do. Over the eight generations of its existence, they've added a ton of features, to where for some people, it could be their only computer (iPhone 6 Plus, anyone?). But it started out by doing a few things well. With the Apple Watch, they're cramming this thing with features.

I was glad to see they didn't do a straight port of iOS to the watch. The home screen was a little jarring at first, but refreshing. It felt very busy, and I couldn't help but wonder if it might be easy to lose apps on it. But I love that they're doing something different with it. The magnification of icons as they get closer to the center seems like a good way to get an overview of your apps, but make the tap targets larger when you pan over to open them. (Being able to zoom in and out also helps.) Come to think of it, the magnification is very reminiscent of that feature on the OS X dock.

In fact, the software on the watch is different from iOS in a lot of ways besides the home screen. It looks akin in some ways, but very different. It's still flat. Many of the icons came straight from iOS. But just as OS X is switching to Helvetica to match iOS, they designed a new and different-looking typeface for the watch. I would say that overall, from the typeface to the home screen to the animations, the word that comes to mind is whimsical. Something that used to define Apple products, but that they seem to be moving away from, especially in iOS, in favor of utilitarian. I like the iOS 7+ design language (for the most part), and I think they nailed it with Yosemite. But it was refreshing to see them take a different approach on the watch. I think for this product, it fits.

Apple is clearly pitching this as primarily a communication device, going so far as to set the only dedicated button on it (besides the Digital Crown) to bring up a list of contacts. And I admire their attempt to find new types of non-text messages that play to the strengths of the device. The heartbeat is particularly interesting in this respect. But honestly, they all feel a little gimmicky to me. I really don't see myself sending my heartbeat to people. A significant other is where that particular one seems the least creepy, but still a little gimmicky.

The part of the watch that I'm most excited about is fitness. I'm also excited about how they handle notifications and the potential for developers to do even more things with them. It's become so normal to pull our phones out of our pockets and check them every time they buzz, but there's definitely a convenience to being able to glance at your wrist, and even act on incoming notifications from your wrist.

Apple Pay on the watch was almost presented as an afterthought. The bulk of the presentation of Apple Pay was relating to the iPhones. Then they went through almost the entire Watch part of the keynote without mentioning it. Then, at the very end, they said, "Oh yeah, you can use this for Apple Pay, too." I guess there wasn't really any more to say, but this is a much bigger deal than you would assume based on the time they gave it. Because for all they said about the convenience of paying with your phone, your phone is still in your pocket. In the end, it's not a whole lot better than pulling out your credit card and swiping. (Don't get me wrong. It's still better.) But being able to wave your wrist at the reader and walk out—that's a game-changer.

And even beyond what Apple's shown us, I can't wait to see what comes from the developer community. We've already seen apps and use cases emerge for the iPhone and iPad that nobody could've imagined when those devices emerged into the world. There are a lot of brilliant, creative people developing apps for mobile devices, and I think the numerous apps on the Apple Watch right now are only the obvious ones. We've only just started to tap into the potential of a tiny computer on your wrist. It may be dependent on your iPhone now, but I expect that'll change within a few years. I could see this becoming the hub for our lives the way smartphones are now.

As I've thought more about it over the past week, shifting the hub from your phone to your watch makes a lot of the apps and features shipping on this thing make a lot more sense. Browsing through a photos app on your wrist seems pretty ridiculous. But AirPlaying photos, or even videos, from your wrist to a TV makes total sense.

And it didn't come up at all, as far as I can remember, but HomeKit, as great as it will be on an iPhone, will be even better on an Apple Watch.

Finally, the price. I'd heard the rumors of $400, as well as the speculation that this was a play by Apple to stun us all when they announced a much lower price. It turns out that it is lower, but not by much. The optimist in me was really hoping for a sub-$300 device, even $199 (I knew it was a long shot. One can always hope.) But the starting price of $349 is aligned with the expectations of my realistic side. Of course, we have no idea how high the prices go, or how quickly. I think it's safe to say the starting price is for the Sport line, and the smaller model at that.

The more I think about it, the more reasonable $349 seems. Your average fitness tracker is at least $100. An iPod nano starts at $149. This is a supercharged fitness tracker + an iPod nano + a whole bunch of other stuff. Oh yeah, also a watch. When you get into the non-Sport lines, especially the Edition line, you're getting into legit luxury watch territory, and will pay a large premium for that. But for the Sport, $349 as strictly a piece of (Apple) technology is a good price.

That said, I think it's expensive enough that I don't see this generation going too mainstream. I could be wrong, but this seems like it will appeal to the early adopters, especially the ones with disposable income. I'm not sure that a satisfactory case has been made to convince the average person that this is worth $349 or more of their hard-earned cash. Even the base model has a luxury feel to it, the way the first iPad did or the first couple iPhones. But that'll change. The first iPhone was thick, underpowered, and expensive. It got cheaper with the 3G, and over the first few generations they made it more capable and iterated on the design. With the 4, they nailed it. (I think the iPhone 4 may still be my favorite design of the iPhone over the years.) I expect to see the same pattern with the Apple Watch. I think there's a good chance that the second or third generation will start at a lower price. And will definitely be vastly improved.

Bottom line, I want one. I want it for the fitness capabilities and Apple Pay, if nothing else. But everything else just makes it even better. It is a lot of money. But like I said, it's not unreasonable, when you think about all you're getting. That said, it might be a better idea to wait for version 2. It might be cheaper, and it will be better.

As a budding developer, I'm really excited about the possibilities here. It's a fresh start. An entirely new platform. I would love to have an app on this thing on day one. Of course, going back to the last paragraph, if I'm going to develop for this thing, it would probably be a good idea to own one.

Either way, this thing is still months from shipping. There's still a lot we don't know about it. So I'll just have to wait and see.

The nice thing about taking more than a week to finish this is that along the way I've had the chance to read what others have written about the Apple Watch, from a variety of perspectives, and listen to a number of podcasts discussing it. I thought Marco Arment's and Gruber's thoughts were really good.

Final thoughts

I can't wrap up a commentary on this event without touching on U2's appearance. Apple bringing up a band at the end of an event is not that unusual. But the terribly scripted exchange between Tim Cook and Bono after the much cringe. Culminating in the finger touch. Ugh. And giving away a free album seems like a good idea, but I think featuring it on iTunes as a free download would have been a much better idea. People's reactions on finding a U2 album they hadn't bought on their phone ranged from confused to paranoid to ticked off at Apple (for those who actually knew Apple was behind it.) It was a marketing stunt gone bad, and Apple's probably learned their lesson from it.

Tim Cook said at the beginning of the keynote that it would be a key event in Apple's history, worthy of being in the same venue where the original Mac and the iMac were announced. I think that beyond the introduction of a new product category, as has been hoped for for years now, this really does mark the beginning of a new chapter for Apple. Between this and WWDC, we've seen Tim Cook's Apple truly emerge. That was clearly most tangible in that moment where he was pumping his fists in the air to the crowd's applause, and in the ensuing discussion of the Apple Watch. While he has typically MC'd these keynotes, handing off most of the discussion of products to Craig Federighi, Phil Schiller, or Jony-Ive-in-the-white-room, he was noticeably much more present on stage, covering most of the watch presentation himself. (Maybe the "i" was Steve's thing.  is Tim's.) It was his answer to the critics of the past three years. Yes, he can launch a new product category. Yes, Apple still has it. Apple has a new face, and has made some changes, but at the core, they're still Apple. They still make great products. Someday Apple will fade into oblivion. But that is not this day.


Welcome to the inaugural post of my new blog, where I plan to log my experiences as I try to break into the world of development—specifically of the Apple variety (probably some web, too). Programming in general has been a thread that's weaved through my life, in and out, over the years, but as much as I love Apple products and have wanted to develop for them, I've never taken the time to do it. This summer I've finally realized there's no reason I shouldn't just go for it.

Like I said, my history with code is a long but inconsistent one. It started in Dreamweaver MX. Back when Macromedia was still a thing. I think this was seventh grade. My dad had a copy that he was using some for a couple of projects, and he installed it on the family desktop so I could play around with it some. (Most of what I've learned about computers over the years has been using the dangerous but effective method of: I wonder what this button does...) Anyways, I started using the splitscreen view, with code on top and WYSIWYG on the bottom. It was cool to see the code take shape as I played with stuff down below.

Then I bought a book on C++. Knowing nothing about programming languages, I went to the bookstore and looked at the programming section. I saw a lot of books about C, and some about C++, and a bunch of others with weird names. C++ sounded better than C, so that's what I bought. I don't remember getting very far before losing interest. But I learned what a variable was from that book. When I took algebra a year later, in eight grade, and the class was introduced to variables, it immediately made sense because I was remembering that book.

Also in eight grade, I came back to HTML. I didn't have access to Dreamweaver at the time, so I opened Notepad and started recalling those tags I'd learned by playing around before. I loved the instant gratification of typing a few lines, Control-S, refreshing Internet Explorer (remember IE6?) and seeing my page appear right away.

Starting with the basics I remembered, and experimenting, I kept building web pages for the next few years, for fun, and occasionally for school projects. Nothing was ever actually live on the web, just running locally. But it was cool. Then I bought a book on CSS, which revolutionized the way I designed my web pages. (I cringe when I remember tables used for page layout.) A byproduct of this book was picking up on more HTML from the examples to add to my arsenal. By my senior year, I was the developer for an online school newspaper. Of course, this was well before I'd discovered CMS or platforms like WordPress. (Needless to say, this was way before Ghost, what I'm using here.) So the editors sent me each article, which I handcrafted in its own web page, down to every <p> tag. Yeah, it was a little tedious.

In spite of all this, for some reason, when it came time to pick a college major, computers never even crossed my mind. I ended up studying construction engineering, but by the time I started into my senior year, about a year ago, I knew I was in the wrong major.

One of the required courses for my major, which I took in my junior year, was "Computer Applications for Civil Engineering." It was mostly a class in Excel and VBA. I had a pretty good handle on Excel already, but VBA got me back into code again, and I loved it. The fact that I was the only one I knew of enjoying this class was the first sign that maybe I was pursuing the wrong degree.

Then last summer I got an internship at a builder in Bethesda, MD, tasked with building a tool in Excel that they could use for budgeting jobs based on data from previous jobs. What it ended up becoming over the course of the summer was a database of cost and budget data with an Excel front end for both reading and visualizing the data from the database, and aggregating and analyzing the data from the subcontractors' bids before importing the contract amounts into the database. Under the hood it was all VBA.

It was really cool to see this vision develop, and to build it. The thing is, I could never have just walked in and built what I ended up building with the knowledge I started with. But as we kept dreaming up features, it kept pushing the product just a little beyond my capabilities, so I would have to figure out how to implement it, build the parts of it I could, and then go hunting around on Stack Overflow for snippets of code I could modify and use for the parts I didn't know how to do. Through that iterative process each time I added a feature, I kept learning new ways to do things and discovering entirely new things I'd had no idea could be done. By the end of the summer, I was rebuilding components of my work from early in the summer, with the more advanced, streamlined methods I'd learned since then.

I spent the entire summer flying by the seat of my pants, and it was hands down the best way to learn this stuff.

I took two things away from that summer. One, I now knew beyond the shadow of a doubt that I was in the wrong major—although at this point it just didn't seem worth it to change majors and have to start basically at the freshman level all over again. But two, it's entirely possible to learn this stuff on your own, with the abundance of resources on the internet, and it's even better to learn it in the context of a real-world project than in the classroom. Especially for me and anyone like me. I think academia has picked up on this, hence all the hands-on learning that's being pushed more and more. It's a step in the right direction, but in the end, it's (usually) still a simulated experience, and can only approximate the real world so well.

Having built what I built last summer, I found myself wanting to get into iOS and Mac development. I started by finding some online tutorial for Objective-C. That tutorial strongly recommended familiarity with C, though, so I started there instead. I guess I picked the wrong tutorial, but the guy's philosophy was that if you type the same line of code enough times, it'll stick. That probably works for some people, but I'm not one of them.

So here I was, typing the same line of C over and over, so that eventually I could move onto a new line of C, so that eventually I could repeat the process in Objective-C, so that eventually I could actually write the first line of code for my own iPhone app. This completely flew in the face of the whole approach I'd been taking with VBA in my job the whole summer, and it was sucking the life out of me and my excitement about development.

Then my senior year started, and it was a long time before I touched a line of code again.

After graduating in May, I started working part time back at the same company in Bethesda. (The rest of the time I'm raising support to go back to Virginia Tech for campus ministry.) My desire to get into Apple development was rekindled, and when Apple announced Swift, it seemed like a good time to start learning a new language—since I'd never really gotten anywhere with Objective-C anyways.

So to cut a long story short, over the last couple months, I've started tinkering with Swift development in my free time. I'll follow up this post at some point soon with what I've done so far. I've also been getting back into web development some and I want to develop those skills further—both front end, where I already have some experience but am way behind the times, and starting into back end development.

This blog is running on a pretty new platform called Ghost. While I could've used their hosted service and installed a theme that someone else has already created (or stuck with the default), I opted to self-host on Digital Ocean (for the same price—and cheaper if I ever have multiple sites) and to build my own theme from (almost) scratch (that is, borrowing snippets of code from the default theme here and there). Building what I've called Arabica (available to download) was good for bringing back my HTML and CSS from days of old, and self-hosting has been a good introduction into running a VPS.

I could see all this coming together in developing an integrated Mac/iOS app with my own back end service, and possibly a web app as well. Which is basically what I'm shooting for now. One piece at a time, obviously. This is strictly a hobby at this point, but I would love to see this become a sustainable side business, and eventually, maybe more.

I wanted to start this blog as a way to share about my progress with all this, as I go through the process of learning all these languages, learning the ins and outs of the App Store from the developer's side, learning server maintenance, and whatever else gets thrown at me. I hope this can be a resource and even an inspiration (or warning) to others who are on a similar path or maybe just thinking about it at this point.

PS: Courses on Sale

I wanted to mention a couple online courses that would fit better in my next post (I'll probably have more to say about them then), but they're on sale now, and I don't know for how long. I've been exploring different resources for both Swift and web development, and last night I came across two courses on a site called Udemy:

These are both by the same guy, and normally cost $199 each, but as part of a giant sale across a few hundred courses on the site, they're $24 and $49, respectively, if you buy them in the mobile app. (They'll still be available in your account on the web site as well.) So if you're interested, download Udemy on the App Store (or Google Play, if that's your thing. I won't judge. Too much.) The web developer course, as I'm looking now, is the second one on the "On Sale" section of the iPhone app. The iOS course is the first search result for "complete ios developer".

I started the iOS course last night, and so far, it seems good. It's a series of video lectures, which are mostly screencasts of the guy working in Xcode. It's hands on, and seems pretty comprehensive. It looks like the web one covers a lot too, including PHP, MySQL, jQuery, get the picture. All stuff I've had on my list.

Like I said, I'll get more into these courses next post, but there's so much to wrap my head around, especially on the iOS/Swift side, that I thought something structured, visual, and practical, like these, would be a worthwhile investment and a good place to start.