Archive

Archive for the ‘Computer Blue’ Category

Ooey-GUI

February 7, 2015 Leave a comment

I saw someone on Reddit recently say that there are four stages to learning to program. I can’t find the link so I’m going from memory, but roughly, they are:

  1. The rush of excitement in learning something new – In this stage, you there are plenty of tutorials and hand holding. 
  2. Venturing out – You are newly confident after having grasped the basic concepts. You can read (some) code and get an idea of what it means, and if you are not sure, you expect that you can look it up and figure it out. Sure, there are some areas of code that look impenetrable, but you are confident that you’re just missing a few more basic concepts and you’ll be able to understand them easily enough. 
  3. The Wasteland – Now you want to do something non-trivial, and all the documentation still seems over your head. Everyone seems to know more than you do, and none of the tutorials are aimed at your level. They are either directed to newbies at stage 1, or they are directed to experienced programmers and assume that the reader has already worked with something similar, so they explain only what is unique about their implementation. 
  4. Actually having some idea of what you’re doing – If you manage to somehow get pas the Wasteland, your confidence builds again, and one day you realize that you actually are able to build non-trivial systems. 

I think the first three stages make a lot of sense. I’m not sure at this point if number four actually exists, or if it is just a cruel joke. I will say that there does seem to be a huge gap between the trivial (“Hello World!”) sort of programming and the more complex programming required to make what the average person on the street would recognize as software. 

Modern software is complex. It does a lot, and everyone has expectations from years of using professionally created applications. This applies to mobile as well. It’s crazy to think that the iPhone launched 8 years ago. Everyone who’s been using a smart phone for even a fraction of that time has an idea of how an app on their preferred platform should look, act, and, more importantly, feel

So what I’ve learned this week is that building GUI is really hard. Sure, you’re probably working with an SDK, so at least you’re not reinventing the wheel, but this is still hugely complex, with a lot of nuances. It’s hard to keep all of that in your brain at once. 

Right now I’m working my way through the Big Nerd Ranch’s book on iOS Programming. They do a fairly good job of speaking in plain English–of helping you past the Wasteland. But it’s tough. I just finished the chapters on UITableView, a super common and relatively basic design. No bells and whistles here. Just a pretty standard list. And I’ve spent a good week trying to figure out a few challenges they give you. Move the items around the list. Create one item at the bottom that doesn’t move. You wouldn’t think this would be so hard. But because you’re not just dealing with variables and simple operations, but instead a whole mass of interconnected objects, things don’t behave the way they do in those first few tutorials. Intuition goes out the window. You’re basically left with trial and error. 

Sometimes that’s good enough. And I get a feeling that more programming—real programming—is trial and error than anyone would ever admit. And through that method, I have almost completed the challenges. Now I have just one more simple method to master. 

Advertisements
Categories: Computer Blue

Mojo

The big question today on the tech blogs is has Apple lost it? You can rephrase that question several ways. Is Apple’s schedule of yearly iOS and OS X releases too ambitious? Are their priorities in the right place? Can any company reasonably expect to simultaneously grow platforms as complex as OS X and iOS and introduce a new watch platform while keeping software quality high? 

I don’t know the answer to that. But I can tell you that I don’t see Apple slowing down any time soon. 

Imagine a world where Apple held back several years between releases. We would all be using, what, Mountain Lion and iOS 6 today? Sure, it would be stable. But it would feel stagnant. Lacking of ideas. Your iPhone 6 would look antediluvian running a two year old OS, especially next to Android’s new Material design language. The “Apple bit off too much–is doomed!” argument would be replaced by “Apple is out of ideas–is doomed!”.

Apple are in a tough spot. On the mobile side, their competition is stronger than ever. Microsoft has stumbled on the desktop, but that doesn’t matter because the Mac is being measured against its younger siblings now. We expect our devices to work seamlessly together. 

As a customer, I do think now would be a good time for a “Snow Leopard” type release. Fix the weird little bugs. But I don’t think Apple can get away with that. A year is a long time to tell the world that you’re busying working on bug fixes. 

And frankly, while I do have complaints about the software I’m running today, I sure wouldn’t go back. 

Categories: Computer Blue Tags: , ,

Learning By Doing

November 30, 2014 Leave a comment

Several months ago I made two resolutions. One was to learn how to program, the other was to write about it more on this blog. I’ve partly kept one of those. The other, not so much.

Part of the reason is that I don’t feel that I had quite as much to say as I expected I would. I was reading some books and following along in some online communities, and that didn’t really sound interesting.

Now, though, I have a project. A personal itch that needs scratching. It’s small, and it’s pretty banal in the scheme of things, but it is kind of gnawing at my brain.

For my job, I find myself sorting large numbers of PDFs pretty often. The details aren’t important, but suffice it to say that this is something I’m sure a computer can do much more quickly than I can. So I set about figuring out how to get this done.

My first inclination was to come up with a Python script. I’m sure that it is possible in Python, but if I wanted to get into the raw data inside the PDF, I thought I’d need something more powerful. My next thought was to write something in C. This seemed like it would be way more effort than it was worth, since my knowledge of C is… well, lets just say I read a book on it once, and still own that book, so at least I have that.

My next thought was Swift, but again, there’s a serious learning curve there. Finally, I decided on Objective-C. Xcode offers an option for “Command Line Utilities”, so why not actually create one?

This is exciting because it’s my first time diving into an Objective-C project without a net. I honestly have no way of knowing how far above my head this project is until I hit a wall, and at that point there’s no flipping to the back of the book.

I started my project on Wednesday, after preparing for Thanksgiving. After working for a few hours here and there over the weekend, I currently have two classes totaling a couple hundred lines of code. I roughly sketched out the plan. The first goal was to find all of the PDFs in a directory. I got that part down. It took me a while, figuring out when to use NSArrays and when to use NSMutableArrays.

Beyond that rather basic syntax, my biggest confusion so far has been navigating the file system from inside an app. You have NSFileManager available to you, but some methods take NSURLs, and some take paths. How exactly do they work? Can I convert between the two? Are they really giving me what I want? How do I check?

I think I have that more or less sorted out. But now comes the hard part. Digging into a PDF file and seeing what I can pull out. I know the raw bytes I’m looking for are there. My worry now is separating the signal from the noise.

Categories: Computer Blue

My Week With The iPhone 6

September 28, 2014 Leave a comment

I know you’ve been thinking about getting an iPhone 6, but have been holding off. When is the official Nothing Was Delivered review going to drop? you ask. Well wait no more. 

The first thing you notice about the iPhone 6 is that it’s big. Not enormous, but it fills your hand in a way previous iPhones never did. One thing to remember is that the iPhone width has stayed pretty much the same for the past 7 years. Your fingers would wrap around the iPhone 5S nearly the same way as the original. 

The 6 changes that, adding width while shaving off depth. Apple tries to distract from the increased size by moving away from the monolith shape. The new phone is rounded on all sides. Even the glass on the front curves down to meet the front. It feels really nice but also really slippery. I am afraid I’m going to drop the 6 in ways I wasn’t afraid before. In practice, I have only dropped it once so far, but it will take some getting used to. 

The larger screen still seems wasted. Nice for looking at photos or watching videos, or even for the occasional responsive web site. But most of my apps still seem to be just scaled up versions of their iOS 7 predecessors. Even among those that have updated their apps for the new iPhones, no one seems to be doing much with the extra real estate. 

My big complaint, however, is with one-handed use. My hands seem fairly unremarkable. They’re not particularly large, no are that especially dainty. I grip my phone somewhat loosely with my right hand, the right side nestled in my palm, my pinky providing support in the lower left hand corner, my ring and middle fingers gripping around the side, and my pointer finger propping up the back. The entirety of the screen that I can therefore comfortably interact with is within the arc of my thumb. 

If I position my phone in this usual set up, then I can easily reach the home button, the dock, and all but the top rows of apps. I can (barely) reach the top right app, but the top left is an app too far. Apple’s primary solution is Reachability, which is, unfortunately, kinda gross. What I used to be able to reach easily with my thumb now requires two taps on the home button, then a swing all the way back towards the top of my reach. What was one motion is now three. A terrible kludge. 

Luckily, the item that is most often in that upper left corner is a “Back” button, and Apple had one last trick up their sleeve. Swiping in from the left edge of the screen is now generally treated as a “Back” gesture. Still, I am going to make sure my most useless apps fill that top corner, because it’s generally not worth the effort. 

(note to self – come up with a placeholder app that doesn’t do anything, just sits in the top left corner of your iPhone. Step 3, profit). 

When all is said and done, this is a great phone, but the compromises are clear. Apple decided that the public wanted bigger phones (don’t get me started on the 6 +). And judging by their opening weekend sales, they’re probably right. But honestly, I kind of wish they made a phone with the 6’s internals and a 4” screen. That’s not going to happen this year, so I’ll have to somehow get by with a magic 4.7” computer that fits in my pocket. If there’s any lesson to be learned here it’s that screen sizes are going to keep changing. One day the fashion will no doubt swing back to smaller screens (iPhone Nano, anyone?). Till then, I welcome our new gigantic iPhone overlords. 

Categories: Computer Blue Tags: ,

An Index In Your Head

It’s been a month since I said that this blog would have a new direction and I haven’t posted anything meaningful on the subject. Let that not reflect on the subject matter, since there has been plenty that I meant to write about. I just… got side tracked.

So what have I been doing? Well, summer is never the most productive time of the year, but I have found some time to sit myself down and try to figure this thing out. 

My main study guide has been Aaron Hillegass and Mikey Ward’s Objective-C Programming (2nd Edition). I found this to be a good place to start due to what it is not. It is not a book on how to make iPhone apps. The arcane incantations that get Xcode to work are only touched on briefly. Mostly this book aims lower. Start at the language. How does Objective-C work? What is Object Oriented Programming, and how does Apple want you to use it? What is going on in memory while your code is doing its thing? How the fuck do blocks work?

It remains to be seen whether this detour was worth it. There’s still plenty I don’t quite grok, but I’m betting that once I’m done with the text books and sample code, just having read these books and having a rough index in my head will be helpful. 

Parlez-vous Swift?

So here I am ready to make an iOS app from scratch, except that I have no idea how make iOS apps (or apps of any other kind, for that matter). But I do know that you need to program in Objective-C, a language developed largely by NeXT in the late 80’s, adopted by Apple in the early 2000s, and used today mostly to make apps for the iPhone. So I bought a couple of books and set to work learning the basics. 

Every year, just as summer is getting under way, Apple hosts their World Wide Developers Conference, where they lay out their current thinking on the best way to make apps. There are new technologies introduced, lessons available, and for those of us who can’t take a week off to fly to San Francisco, they put videos of everything up on line. Knowing this was coming up, I thought I could focus on learning the basics of the Objective-C language, as the higher level elements were likely to change.

Then Apple upended everything. Objective-C, they said, is no longer the only way to make apps for their devices. Swift was a brand new language created in secret by small team inside Apple. It was modern, they said, and apps built using it would be less likely to crash. 

That’s all well and good, but I was just starting to get a hang on the old way! Did I now need to start from scratch? How would I even do that? Swift was brand new, and the only way to learn it was an ebook that Apple released that was clearly aimed at people with a better understanding of how computing worked. 

After spending roughly a week paralyzed with indecision about which path to take, I picked back up the book I had been working on. For the time being, I’m making this app the old fashioned way. A couple of points factored in to this decision. 

  • Swift is really new, and was created by a very small (though I’m sure very smart) team inside Apple. Now that there are hundreds of thousands of developers poking around through it, I’m sure they’re going to find bugs. And I’m sure that Apple is going to fix some of those bugs, meaning that the language is going to change quickly. Behaviors you can expect today might not apply a year or two down the road. That could cause problems that I’m not confident I’d be able to detect. 
  • Objective-C is old. In some sense, that means it’s creaky, and there are some difficult concepts to grok that are papered over in newer languages like Swift. But it also means that it is well tested, and that it’s peculiarities are well documented. If I have questions, it’s pretty easy to google the method names I’m working with and find explainers, and other people who have had the same issues. Answers are abundant, and if I can’t find them already existing online there are tons of people with experience working with these technologies that I can ask. 
  • I already have the books.
  • Swift and Objective-C code can live side by side. Apps are written as smaller files that are compiled and combined into that neat little icon on your phone. You will be able to Objective-C and Swift files together in the same app to solve different problems. That is exciting because it means I can start today in Objective-C, and then start adding Swift files in the future once I see that it is starting to mature, and I won’t have to go back and redo everything I had already built. 
  • Swift is clearly the future, but Objective-C is not yet the past. It’s still being used by Apple itself for most everything, and likely will be for years to come. That means it’s not going to go away any time soon. I don’t think we have to be afraid of Apple coming in next year and saying that all submissions must be Swift-only. This is going to be a slow transition, and the end state is going to be a world where Swift is the preferred, but not only language.  

So on a beautiful Saturday like today, I am hashing this around in my head, and I think I’ve finally convinced myself. Now that I’ve gotten this off my chest, I can go enjoy the day.

Categories: Computer Blue Tags: , , ,

Why This Blog?

Right now you are reading this blog. Your reasons are your own. My reasons for writing, however, effects us both, so I thought I’d lay them out here. 

This has always been somewhat of an aimless blog. I started writing some slice-of-life essays, added some recipes, and throwing in some bits about computers. Because there was no focus, I never really new what to write about, and as such I posted rather infrequently. Most of what I wrote I found myself putting out on Twitter. I lacked the attention span for long form blogging. Meanwhile, I never saw much traffic because who was the target audience, anyway?

But now I’ve got a new project, and as such the focus of Nothing Was Delivered is going to change some. If you’ve followed me before, I hope you’ll find the new content interesting. If you found your way here because of the is new content, I hope you enjoy it, and please check out the back catalog, so to speak. 

Here’s the deal. I’ve gotten bored lately. I had a band, which fell apart. I thought about starting a new one, or striking out on my own, but haven’t felt inspired. I’ll leave the details for a separate post, but ultimately that was something I had done, and I wanted a new challenge. 

So a while ago I started poking around with programming. Like many Americans, I sit in front of a computer most of the day, and when I’m on the go I have my iPhone with me. The power and flexibility of these devices constantly amazes me, but I realized I had no idea how they worked, at a basic level. We all know that computers see 1’s and 0’s, but how the hell does that translate to all the things that go on on these screens? 

In particular, I was interested in Apple’s ecosystem. I started reading Apple rumor sites, which lead to technical descriptions that I couldn’t make heads or tails of. I also stumbled on some Apple centric podcasts, which lead to others that were less fan sites and more developer focused. I would sit through the technical bits of shows like Hypercritical so that I could get to the more general discussions of Mac OS X or iOS. Eventually, I started to pick up some of the low-level lingo, or I would Google some phrases, and eventually these parts didn’t seem so scary. I found the book Code, by Charles Petzold, which gave a good fundamental explanation about what was going on inside these machines. I started to see technology as a puzzle that I could figure out, given time. 

Now I have a project that I want to work on (more on that another time), and wanted to document it. This is mostly for my benefit, as I’m pretty much teaching myself as I go along. I have no formal training, though I’ve bought some books and completed some tutorials online. I figured if I had a place to think through these problems out loud as I come to them, they would be easier to work out. 

I also thought I could offer a bit of a different perspective from many of the tech and Apple centric blogs. Sure, I’m as much of a white dude in his thirties as most of the other writers in this sphere, but I’m coming to this as someone that has very little idea about how this technology works. There are many wonderful writers that are very knowledgable about Apple’s past and present, and therefor able to give insightful context the changes this industry is seeing. I wanted to approach this as someone who has never been to a WWDC, hasn’t witnessed the evolution of Apple’s APIs over the last several decades, and in fact just learned what an API was recently (in layman’s terms, my understanding is that it is short a series of code snippets that an operating system creator or platform vendor gives that allows other developers access to more complicated technologies e.g. GPS APIs on a smart phone that let apps get your location without writing everything from scratch). 

So that’s the new focus. There will still be more general purpose writing. In fact, I hope that by getting in the habit of writing more, I’ll be even more likely to turn to blogging to get out whatever I have on my mind. I do think that the food posts are going away. I actually intend to spin those off into a separate blog at some point. 

I’m rather excited about having a new direction. Here’s hoping that this blog will keep me honest. 

Categories: Computer Blue Tags: