Category Archives: Technology

Why is my Apple TV so slow?

We have an Apple TV. Love it. We dumped cable TV, have no broadcast antenna, the Apple TV is it. We get the shows we like, that we’re curious to see, and watching as we want, when we want, to pause when we need to, no commercials, I’m all for it.

But there’s one problem.

It’s slow.

Sometimes we go to start a show and the load time takes… well, it never loads. It’s mighty frustrating and unsatisfying when you sit down ready to relax with a favorite show, and you can’t get the show. Instead, you spend 10 minutes trying to troubleshoot and fiddle around to get things working. Reboot this, check configurations, etc..

Only some things have this problem. It seems to be high-def movies/shows. Music is rarely a problem, older shows encoded at lower quality no problem. So that tells you something.

But what gets further odd is streaming direct from the Internet (instead of the internal media server) is usually fine.

The signal strength is good. I even ensured to force it onto the 5Gz WiFi. I’ve checked the strength of other wireless devices in the same general area and they all get good, fast, transfer times.

 

This is not an uncommon complaint. A little Google searching turns up many people with similar problems.

At this point, I can only assume the Apple TV’s WiFi antenna sucks or has some other sort of throughput problems. Some network software I looked at seemed to show the Apple TV was only getting like 6 Mb/s data rate, which would explain the problems.

The solution? Ethernet. But there’s just no way I can run a wire through my house like that.

In my latest bout of frustration, I came across Powerline adapters. Basically, it’s a way of using your home electrical wiring as network cable. You buy at least 2 adapters: one plugs into the wall with a cable to your Ethernet hub/switch/router; the other plugs into the wall with a cable to the Ethernet port on the device (Apple TV in this case). If all goes well, you’ve now expanded your network through your electrical wiring! Ta da!

Now there seem to be caveats.

  • There are a lot of standards, and you want hardware that conforms to the latest, fastest. What that is will vary as standards evolve. But again, Google will be your friend here. (e.g. “Powerline AV+ 500″ or “HomePlug AV2″)
  • Your home wiring quality will affect speeds.
  • Be aware of how circuits affect connections. It does seem that if the adapters are all on the same wiring circuit, things should work. If they are on different circuits, it may or may not work — it just all depends how the wiring is all set up.
    • In my case, the model I bought required the adapters to be on the same circuit to reset the encryption keys, but are working in normal function on two different circuits.
    • So in short, ensure there’s a good return policy if things don’t work out for you.
  • It’s never going to be as good as proper wiring, so you have to see if the trade-offs are worth it.

I bought a Actiontec 500 AV Powerline Network Adapter Kit (Retail SKU: PWR511K01). I stumbled upon a CNET review of a bunch of different Powerline adapters, and bought based upon their review of the Actiontec. Why this model? Because it was touted as the cheapest solution that basically worked, good for someone who wants to dabble but doesn’t want to spend a lot of money to do so. Yes, I wanted to go right for their recommended top pick of the Linksys PLEK500 because I like getting good stuff, and brands I know and can somewhat trust (who the heck is Actiontec??!?!). But for a first time? Fine, and if it didn’t work I could return it. The trade-offs for the lower price were things like the lack of a pass-through power socket (not a problem for me), using a regular Ethernet jack (not a problem as 100-Base-T should be sufficient for my need, and I expected line quality would be low anyways).

So how did it go?

Unboxing was nice. I didn’t expect to get 2 Ethernet cables with it, but I did. That was nice (I’ve got a box of cables, so I didn’t bother purchasing). They are small, and crafted to easily work on the wall jacks without taking up too much space and/or blocking the other jack from being used.

But then, the suck.

They make it sound easy, like plugging it in and away you go.

Nope.

No signal, no nothing.

Their website troubleshooting doesn’t tell you much to really troubleshoot, but it does talk about resetting the encryption keys. Could that be the problem? Tried it, but the lights didn’t blink right. Used their online chat tech support. The first guy was not helpful — just wasn’t clear enough in his instructions. Then the session was abruptly ended; I was left with the impression he didn’t want to deal with me any more and killed the session. I tried following the instructions and still no dice. I contacted support again and this time got a much more helpful support person. He pointed out a key thing — both devices have to be on the same circuit for resetting the keys (tho they don’t for normal operation). So I tried that and managed to get everything reset, matched, and then went I plugged it all back in, it worked!

According to das blinkenlights, I’m getting less than 50 Mbps. Far from ideal, but testing so far is working well. Shows and movies that may not have loaded or took forever are loading fine now. So it may not be blazing, but it seems “good enough”.

For all the move to wireless (it felt weird to have no Ethernet port on my new MacBook Pro), it’s still tough to beat a good wired connection.

About these ads

Gee thanx, Apple

Since I was forced onto Mac OS X 10.9 (Mavericks) a couple weeks ago well… it’s more or less been fine.

I like how more apps are taking advantage of native notifications (sorry, Growl), and how with chat apps I can reply directly in the popup. Oh yes, and how Messages has native emoji support — that’s critical. :-)

I like watching all the stats in Activity Monitor. The new memory compression stuff is interesting to me.

But all in all, life is as it was.

Except….

for…

my phone.

I didn’t realize it until a few days ago. A friend sent me new contact information. I updated things, and after a sync of my phone the updated data wasn’t there. What gives? So I give the iTunes app a deeper look and it seems the “info” panel is gone! How in the world am I supposed to sync my contacts, calendar, and other such things?

Oh I see.

Apple is forcing iCloud upon us.

Great….

Look, I know “cloud” is the hot new sexy. But I’m not willing to trust it (yet). I mean, it’s great for the horsepower and other processing and work stuff. But when it comes to trusting my data to someone else? Gee, that always seems to work out so well, right Adobe? And now they want me to store my credit card information in iCloud? Not just “no”, but “hell fucking no”.

Don’t worry, Apple. My distrust isn’t exclusive to you. And while I can see the convenience in having such information readily available across all my devices, once there’s a leak, talk about my life getting inconvenient. The trade off is not worth it, and you cannot guarantee bulletproof iron-clad security here. Yes, Apple, you have pretty good security, but you also had that big developer portal breach not too many months ago.

So yeah, to sync my contacts, to sync my calendar, I have to use iCloud. Fuck.

So I go ahead and flip that on in the System Preferences.

Then I go into the Calendar app to look at things, and it hangs forever trying to “move calendars to server account”. Watching error messages in the Console got redundant, because apparently it doesn’t know how to break out of this looping. I have to force-quit Calendar.

Then I find the solution? You have to go turn off iCloud Calendar support… which will delete all your local calendar information, so hopefully everything made it up there ok! (you can log into icloud.com to check). Then you launch Calender app, from there Add Account, adding your iCloud support, and from there it will work. It will take a few minutes to sync everything up, but thankfully it seems all my data wound up “in the cloud” OK and so it got it all back.

Gee, thank you Apple for nearly fucking me hard. Looks like you need to add some cases to your test plan.

I will admit, it is nice to just create an event on my phone then it shows up on my desktop. That is nice that I don’t have to explicitly and manually sync to get that. And it isn’t the worst thing in the world if my calendar info gets out. Contacts — well, just ask your friends with Yahoo accounts how great it is to now be subject to all the spam from address books getting slurped up by spammers.

I know Apple wants to push iCloud. I know that for all of iCloud’s suck, it won’t get better unless people start using it. But damnit. I really hate being forced, instead of being able to choose when I feel assured and certain (enough) that my personal data will be secure enough, and I’m willing enough to trust your service.

Retina MacBook Pro impressions

So, what do I think of the new MacBook Pro?

First, my old reference point is my prior MacBook Pro, which was a “MacBookPro8,3“. I believe I had the 2.3 GHz model, 750 MB hard drive, 16 GB RAM. Note that officially this machine only supported 8 GB of RAM, but OWC said it could do 16 so I upgraded to 16 shortly after buying the machine and was quite happy with the added RAM. I also ran Mac OS X 10.8.5 (Mountain Lion) on it; I couldn’t upgrade to Mavericks (Mac OS X 10.9) due to some work requirements.  Also, this was a 17″ screen, and the last 17″ MacBook Pro Apple made.

The new machine is a retina MacBook Pro, which is technically a “MacBookPro11,3“. It’sthe 2.6 GHz model. 1 TB flash drive, 16 GB RAM, 15″ retina screen. I didn’t relish spending that kind of money, but because you can’t upgrade the thing after the fact well… given I need as much RAM as possible, here we are.

How do things compare?

Overall… meh.

OK, no question it’s faster, and I know I’m going to be happier with it. But my “meh” is because I don’t like upgrading like this. My old machine did NOT feel long in the tooth at all. It was still quite a capable and functional machine, hardly obsolete. I only bought because I was essentially forced to. When these machines came out I didn’t feel there was anything compelling about them that I could gain from an upgrade, and I still don’t think they are a significant enough upgrade from the prior machine.

But that said, there’s some good and some bad.

First the flash drive. Holy crap it’s fast. Long long ago the disks were faster than everything else, so things like CPU were bottleneck. Now the disk i/o is by far the slowest subsystem and everything waits on the disk. I have no idea if the disk is still the slowest subsystem now, but holy gee whiz, Batman! This is unreal fast. Everything is so responsive. It’s awesome. Compiling is very disk intensive, and it seems to be better, but I can tell when I’m still up against CPU now (e.g. when the deep static analyzer is running). Still, if I could have benchmarked before and after, I’m sure I’d see improvement. If nothing else, the fact so many apps now launch almost instantly is awesome. No more waiting and waiting to start rolling on your ideas and work. That’s welcome.

Second, because of the drive… gee, are there any moving parts any more? Ok, the fans, but otherwise wow, she’s quiet.

I haven’t tried putting her on battery alone yet to see how battery life is, but supposedly it will be a lot better.

I am impressed with how light/thin it is. Almost feels too much so tho.

The screen? That’s a mixed bag.

First, retina. I wasn’t explicitly caring about retina, but as I started using the machine and just reading text on screen, it started to sink in how crisp and vibrant everything was. It just slowly crept up on me, but wow, it’s a significant difference. I am mighty impressed. It’s just… wow. My initial feeling was that my aging crappy eyes would really love this towards the end of the day as my eyes get tired of staring at the screen all day.

But, I did not like the loss of resolution. Yeah, the pixel density is huge, but then since retina is just a double-density trick, I lost massive amounts of resolution compared to what I had before. That sucked. I always got the largest screen because I like screen space, I like being able to see as much as possible when I work. Back in the day, I always used 2-monitor setups. When I went laptop-only a couple years ago, I wanted that 17″ precisely because of the screen real estate. So now it’s a step back — a big step back. Retina isn’t worth the trade-off here, for me.

Now, you can scale the display. In fact, I can scale it to the same resolution I used to have on the 8,3 model. However, it crams that same resolution into a smaller screen. So if I want the real estate, it’s now smaller. So far my eyes are ok with it and don’t really seem to notice. And the quality of the screen still seems ok and better — maybe strong LCD backlighting? maybe the glossy screen vs. the matte? Either way, quality of picture does seem better, but I’m annoyed by the loss of resolution (or the trade-off of making everything smaller to regain the resolution). Who knows tho, as I work over the coming weeks I might try the smaller resolutions for a while to see if I can work with the smaller resolution in favor of the retina fun.

One nice thing about the 15″ screen tho?

I can now get one of the ITS Tactical Discrete Messenger Bags to use as my briefcase. :-) Win!

On paper, the 11,3 machine looks to have some slower specs than the 8,3, but I think it makes up for it with the flash drive. I really don’t notice. Again, the 8,3 was really a fine machine. But remember, what I mostly do in a day is do email, do lots of stuff on the web (running Safari, Firefox, and Chrome, depending what I have to do), intensive work in Xcode, TextWrangler, communication work (Adium, Skype, Messages), and then other things here and there like Calendar, Yojimbo, Terminal, Textmate, etc..  So, my needs and workflow are different from yours. But there we are. So that’s how things work out for me.

One side effect of the new machine was being forced to adopt Mac OS X 10.9 “Mavericks”. So far I haven’t noticed any problems or issues. It’s been fine. The main reason I couldn’t upgrade was the possible day-job need to still run Xcode 4.x.x. However, the need for that is rapidly fading and essentially a non-issue now that Apple’s forcing Xcode 5 and iOS7 compatibility for any App Store submissions. So, I think it’s fine to take the upgrade at this point. However, it did break my ruby install, so I have to spend a bunch of time in ruby gem hell now. One fun thing about the Mavericks upgrade? I use the Messages app, of course on my iPhone, but I’ve used it on my machine while I work because it’s easier to use for Messages interaction (texting Wife and Kiddos and other Apple-based folks, much nicer when I have a real keyboard). Well, finally in Mavericks there’s support for real emjoi! Yeah I know, totally silly reason, but that was probably the main reason I wanted to upgrade to Mavericks. ;-)

Anyways, I’m not happy about why I had to go here, nor having to unexpectedly drop that much money. But so far the machine is alright and I’m sure as I use it more I’ll come to appreciate it more.

The hard drive saga gets worse….

So that hard drive swap? The story got worse.

After the long weekend of swapping and getting back up to speed, I finally go back to work. Close the lid on the MacBookPro, lift it to put it into my bag… and there’s this buzzing noise coming from the hard drive. It sounded like a lightsaber (best way to describe it).

That can’t be good.

I contacted Other World Computing about it. It only makes the sound when on… doesn’t have to be going to sleep, could be lid open and in the middle of doing whatever, pick up the machine and tilt it (not even a quick tilt, just gently) and noise. So it’s not say a loose bracket or something. They opt to send me a replacement. I got the replacement just before this past weekend, and just time.

See, all the week while I had the new drive in, I had strange crashes. Some background daemon would crash, or Xcode would crash in a non-normal way (yeah, Xcode 5.0.2 crashes on me, but the crashes seem to be fairly deterministic and reliable — these new crashes were out of character).

Made worse? All day Friday while at home (the great Austin Ice Storm of 2014!) I kernel panicked 3 times. Well, more than that, but after the 3rd one I figured it was time to stop work for the day and investigate. All my crashing and panicking was coming out of processes like mds and backupd, which starts to point to disk i/o. Hrm.

So I swap in the new drive (so we have “original drive”, “replacement drive 1″ and now “replacement drive 2″. I put replacement 2 in, and start the process again of restoring things. Hrm. Long story short, first restore attempts fails for some unknown reason. Try again, and it appears to have succeeded but didn’t, because reboot and while booting it panics again (couldn’t find ‘init’. That’s bad). So again I go around and around. Yeah, it starts to panic again.

And I tried tilting the machine. Sure enough, replacement 2 makes the same vibration lightsaber noise.

Well crap.

It’s unlikely to have 2 faulty drives in a row, possible, but unlikely. What gives?

I did a bunch more experimentation. After talking it over with my buddy W, it came down to a simple thing: time vs. money. To try to further diagnose this problem would require a lot of time, perhaps a week or two without the machine. I cannot afford that. If it was just for email and Facebook, whatever. But as a developer, the machine is vital to my daily existence. Time is more critical here.

So….

I am now the proud owner of a MacBookPro11,3 — the 15″ retina model. :-) And the big model too, because these machines can’t really be modified or upgraded after the fact, and 16 GB of RAM and 1 TB drive space matters given what I do in a day.

No, I’m not happy to have suddenly dropped 3-grand (and yes, I got AppleCare — always do), but I’m thankful that I could.

So I’ve used Migration Assistant and things seem to be getting back to normal.

As for the other machine….

While doing some of this restore work, I had put their “replacement 1″ into an external case (see their DIY upgrade kit). On a whim I tried it… I just tilted the naked drive. Sure enough, it vibrated. I’ve been in communication with OWC’s tech support, and just sent them a follow-up with a little video of the vibration noise. We’ll see what they say.

I was convinced the old MacBookPro was dying a hardware death somewhere, but now I’m not so convinced. Nothing I can do about it now… I guess it just means the kids get a nice MacBookPro for school. But we’ll see how everything shakes out in the end.

The story continues…. but I just hope that I’m nearing the end of it, at least the major headache portions.

PanemQuotidianum 1.0 is now available

December 13, 2013 (Austin, Texas) – Hsoi Enterprises LLC announces the release of PanemQuotidianum 1.0 – an iOS (iPhone/iPad) app bringing you Daily Bread for your Daily Life.

PanemQuotidianum is “daily bread” for your Catholic life.

Every day you can wake up (or go to sleep) with a bite of spiritual bread to nourish your soul. It’s light and simple, but filling and satisfying.

Simply set when you’d like to receive your panem, and you’re done. Each day at your set time, a notification will post. Respond to that notification to view that day’s posting.

PanemQuotidianum represents a labor of love, and the first collaborative effort to grow Hsoi Enterprises LLC as family business. Thank you for supporting our efforts.

PanemQuotidianum is available now in the Apple App Store for $1.99. A portion of the proceeds will be donated to Catholic charities.

PanemQuotidianum – Your Daily Bread for your Daily Life.™

More stuff for learning to program

A few days ago I wrote about Scratch, a nifty way to help my kids learn how to program.

I forgot a couple other things I found.

Stencyl. This looks neat. It I haven’t used it, but from what I read it looks like it follows the same sort of drag and drop “block” programming structure and logic that Scratch does. But it can be used to actually make iOS and Android products that you can actually ship and sell. So maybe after Scratch, this would be something to try. It would take the knowledge they had before, but now they have to actually make something polished and ship. A good “bridge” between the two worlds, so to speak.

There’s also GameSalad, which is made right here in Austin.

I still would want them to learn “real” languages (e.g. Objective-C, C++, Python, Ruby, Java, JavaScript, and maybe even new funky languages like Scala). Who knows. I think tho it needs to start with a desire to do it, and to really gain a love for it. If things like Scratch or Stencyl take off for them, then we’ll go there.

Who knows. :-)

 

Learning to program

Youngest walks up to me about a month ago and asks how you program (write software for computers).

Oh joy! :-)

Now I’ve talked about learning to program before and even a second time. I always come back to Karel the Robot as a great way to learn how to program. Why? Because you get to learn the constructs of programming without being burden by the constructs of programming. You can learn about loops and conditionals and variables and logic and flow, but you don’t have to spend 3 hours debugging a problem to find out it was because you misplaced a comma. And it doesn’t matter if you really do anything useful or not at this stage, in terms of gaining some employable skill (no job listings for Karel knowledge); once you learn how to program, then languages are just languages and toolsets are just toolsets.

Back when I looked at the LEGO Heavy Weapons book, No Starch Press offered other books to me to review. I asked about the Python for Kids book because it looked like it might be a great way to start the kids into programming. They sent me a copy, but I have yet to go through it. Mostly inertia on my part. Daughter asked me about it, but just a passing interest. And I must admit, while I think the book is well done for what it is, I still think it’s not a perfect start because there’s issues of language that get in the way. You have to get bogged down by syntax of Python. It’s not horrible of course, but I know things can be simpler. I think this book would make a good “phase 2″.

When Youngest asked me again, I went looking around. I found Scratch from MIT.

I think I’ve found what I’ve been looking for.

Youngest and I played around with this for a bit, doing the tutorial. I saw how Scratch gave you all the language, all the logic, even some advanced things like variables, lists, and inter-object messaging. It’s actually pretty cool. I liked the way you just drag and drop to make logic go. It also is able to give you direct feedback, which I think is good for capturing a child’s interest in the topic. I encouraged Youngest to “just try it”. What would happen if? Just try it and see! The environment is very forgiving, but even still, you can make mistakes and have to learn to debug.

I also really dig that all Scratch projects are “open source”. You can look at what others have done, and then you can look at the “source code” to see how they did it. I was able to find a simple game on the site, then show everyone how they made it happen and how neat that was.

So I’m working on this with Youngest. I told him a simple project he could start with would be reinventing comics. We all love Pearls Before Swine and I told him he could start by taking a simple Pearls comic (maybe just Pig and Rat talking to each other) and recreating it in Scratch. It’s a simple project, simple goals, but challenging enough to get your feet wet with.

And we joke… with Youngest programming… Daughter creating artwork and music… Oldest creating artwork, music, and overall design work… they all like to make movies, do voice work. Oh geez… I’ve got an in-house dev shop now!

Man, I wonder how far this ball will roll. :-)

My evolution of style

I don’t write about programming as much as I do other topics, but if you look at number of hours spent on something in a day, programming comes out at the top of my list. My day job has me writing iPhone apps, and my night job does too.

One topic that is a source of endless discussion amongst programmers is that of programming style. Just like you can have MLA style, the AP Stylebook, and the like, so too do programmers have a style to their writing. What we have to realize is once the code is written, it will forever be maintained — which requires reading it. Thus, style is important to aid readability, and no one questions that.

But everyone wants to question what the style should be.

And of course, my way is the right way.

Background

I’ve been doing this long enough (I’m not a graybeard just because my beard is turning gray) to know there is no One True Way®. As long as you have some sort of consistent style and you produce readable code that’s appropriate for the context (because yes, certain programming languages and toolsets will bring about different styles), that’s essentially what matters. Yet, we still have people persisting their style is the one way that all code that a project involves must be written that way. Why? To what meaningful end does this address?

Style guides that merely propose cosmetic changes are useless and ego-driven, IMHO. But when the style has purpose and actually works to improve the code itself, has solid reasons behind the choices? That’s different.

When I started out, I didn’t have style. No one does. You eventually pick it up as you write more code. My first formal endeavor was working as a developer of a then-popular C++ Mac framework called PowerPlant. When I asked about coding style, the Grew Dow (creator) said “mine”. :-)  Basically, PowerPlant was Greg’s baby and if I was going to write code for it to be included in the official distribution of it, I had to make my code look like his. This was a lot more than just where the curly braces went, but a lot of other form and function choices too. IIRC, Greg taught me this:

bool x = false;
if (SomeTest()) {
    x = true;
}
return x;

Compare to this:

bool x;
if (SomeTest()) {
    x = true;
}
else {
    x = false;
}
return x;

The first is more readable, more compact code, and generates better code too. The end result is the same. Go with the first.

This was a matter of style, but it produced better code.

Braces

Over the years my style has changed. In fact, one change happened within the past year, and I’m pretty happy with it. It concerns everyone’s favorite debate: curly braces!

I started out with:

if (foo)
{
  DoSomething();
}
else
{
  DoSomethingElse();
}

Because whitespace is good. Thus why I didn’t like:

if (foo) {
  DoSomething();
} else {
  DoSomethingElse();
}

Because while compact and nice on screen space, it wasn’t as good on the eye because the “else” wasn’t in a column with the “if” (for visual scanning, since we sometimes will process the code in “blurry” visual chunks, not necessarily processing the actual code), and depending upon the complexity of the code, readability wasn’t always best.

I flipped flopped around for a while on this, especially since Cocoa coding brings a lot of its own conventions to the mix, which for the most part are well-worth adopting especially since some are imposed on you in order to make things work. My current style?

if (foo) {
  DoSomething();
}
else {
  DoSomethingElse();
}

I find this works better because there’s better visual chunking of the data, better organization. It helps to keep the code compact, doesn’t waste too much space, but yet still keeps some whitespace around. It’s hard to get a feel for this style in small code snippets, but when you use it all day in various bits of code, it gets vetted and I’ve found this works quite well.

Of course, do-while is still potentially weird. :-)

Pointers

I still debate this one.

I think it’s clearer to say:

NSString* string;

than

NSString *string;

Because to me, it’s making the type clear. That is, this is an NSString pointer. It makes sense too when you look at function/method arguments, be it C, C++, or Objective-C, because you declare return types as such and arguments do not always need a variable name, just the type. Thus:

- (NSString*)foo:(NSString*)s;

is legit and correct.

The only place I find this breaks down is if you wish to declare variables with a comma:

NSString* string1, *string2;

So you have to do that. But I also think it’s generally bad-form to declare with a comma, especially since it gets really messy looking with initialization, and in general you should initialize your variables (at declaration time).

Spaces

Another style change I made was spaces. Or rather, spaces vs. tabs.

I always used tabs. I preferred tabs. It made editing a lot easier. I did set my tabs to 4 spaces, but I still used tabs. I hated people that used spaces instead of tabs because it made editing hard.

When I came to my current day job, the server side was being done with Ruby (and Ruby on Rails). Those guys like spaces, and using 2 spaces per tab. And so, the clash began. The then-lead on things asked us to just switch to using spaces instead of tabs (tho we could stay at 4 per), and I just gave in because it was easier. Because that really was the problem: mixed setups.

I recall back at Metrowerks, most people used tabs with 4 spaces per tabs. I think one guy liked 8 spaces per tab, and then there was another guy that liked 3. Yes… 3. That made his code really weird to look at when you opened it up in your editor, because things lined up really wonky. And so problems arose when you couldn’t really read someone’s code (back to that readability thing), and it was made worse when people with different tab settings edited the same file.

Basically, it became a huge mess once you left the ability to have a homogeneous environment and complete control over it.

Using spaces instead of tabs fixes most of that. You can’t fix if people use different substitution values (e.g. 2 per vs. 4 per), but you will still end up with consistent-looking code when you open it up in a different editor, because a space is a space.

But this made me realize why I resisted for so long.

Editors

Your choice of editor tool matters, and affects your style.

For example, with the spaces vs. tabs situation, I hated using spaces because if I hit tab too many times, now I have to backspace a LOT in order to delete all those spaces, instead of just a couple backspaces to undo what I did. Typing out code isn’t like typing out a letter or a blog post, because a lot of keystrokes can be for formatting and navigation around the code. So now to have to do all this extra work, it adds up in a day.

But now, I have an editor that is smart(er) about this situation. So if I have tabs actually be 4 spaces, I hit tab, the cursor “tabs in” but really 4 spaces were entered. And if I mess up and press delete, it will “untab” and delete the 4 spaces. Having an editor that is smart about such things really goes a long way, not just towards helping you write code, but helping you manage these sorts of style choices.

I would also add that the growth of screen size and resolution has helped a great deal. We aren’t using VT100 terminals limited to 24 rows and 80 columns, yet some people still cling to that standard. Why? Even our tiny mobile devices aren’t so limited. Granted, if you are in a particular environment that requires such constraints that’s one thing. But I primarily work on a 17″ MacBook Pro with a 1920×1200 screen; I used to work with 2-3 total monitors. We have the space, we should use it. Our eyes like to see a wide horizontal plane (thus why TV’s are widescreen and movies are wider not taller). Use that.

Thankfully Xcode is really getting better about these things. It’s taken a while, and it was really important for Xcode to be an awesome editor because the 3rd party editor road and integration/support was just not happening.

One thing that I’ve also given into is code completion. I didn’t like it because hey… what’s so hard about typing things out? Well, with some iOS/Cocoa API’s, it’s quite hard because the names can be VERY long and difficult to remember. So code completion has worked out to be a quite useful thing. But with that comes some imposition of style because someone had to decide how to insert that text. Xcode also allows some level of syntax-aware editing, where it can do things like auto-indent and the like. You have some control to pick and choose, and really once you tweak things to your liking the automation is nice. But again, there’s some level of imposition of style here that you cannot get around, especially if your choice isn’t represented in Xcode’s options.

Point is, your choice of editor can be a bane and a boon. In general, they should be there to help you write better code, more efficiently. But while doing so, it may require you to make some choices in your coding style. Don’t fight it, go with it. You might find some benefit to that stylistic approach. It’s worth the time to experiment with it, especially if it winds up improving your point of view, improving your code, or just giving you solid reasons and experience behind your rejection of that approach.

Editor Customization

And so, if the editor app matters, hopefully you can customize it to suit your needs.

I can touch-type, and I find it much faster to use keystrokes than to stop and utilize the mouse – I don’t have to (re)move (then replace) my hands. I know many people that use laptops as their primary computer, but hook up external keyboards and mice to it. To an extent I understand this, but again it’s about having good tools. If you use the keypad a fair deal, the loss of it on a laptop keyboard is a detriment. If your laptop’s pointing device merely moves the cursor on screen, an external mouse may work better for you (especially that scrollwheel). But I’m happy my MacBook Pro’s trackpad supports gestures, and I use them constantly to allow me to more easily move about not just my source code, but my whole computer. Taking advantage of Spaces (well, Mission Control – having multiple Desktops) is a big boon because I can put my communication (email, web, IM/chat) on one Desktop, Xcode on another, etc.. Gestures are useful.

Granted, I cannot customize the gestures so much as I can customize keyboard keystrokes. But thankfully I can and use that to help me efficient access the commands I use most.

Another customization has been the use of editor color. I like the solarized project for how it effectively syntax colors, but also is very easy on the eyes. Quite important when you’re staring at the screen all day.

Plugins are useful too, and this comes more directly back to my discussion of style. I found a useful plugin, VVDocumenter-Xcode. This is a simple Xcode plugin that with a simple keystroke inserts basic formatting for appledoc-style documentation (and I’m going to modify this for Xcode 5). Just like the endless debate about comments in code, there’s debate about how much documentation one should have. I am not always good about complete documentation (you get into a groove with coding, documentation becomes a secondary concern, then you don’t have time to go back), but a plugin like this makes it much easier. Furthermore, with some advances in Xcode 5, there’s even more incentive to document in a particular structure. I cannot comment further yet as Xcode 5 is presently under NDA. Nevertheless, documentation and documentation style is an important consideration in your coding practice. Because again, style is about making readable and maintainable code.

The Style of No-Style

Styles tend to not only separate men – because they have their own doctrines and then the doctrine became the gospel truth that you cannot change. But if you do not have a style, if you just say: Well, here I am as a human being, how can I express myself totally and completely? Now, that way you won’t create a style, because style is a crystallization. That way, it’s a process of continuing growth.

- Bruce Lee

My style is my style. It is what allows me to most effectively communicate. It is what allows me to best express my thoughts, in code, in implementing a solution to a problem. For me to use your style would get in the way of my effective communication, so why should I do it?

I look at modern programming teams. Typically they are comprised of many people of different backgrounds, and often these days, ethnicities and origins. I say this because not everyone on the team might speak English the same as you or as well as you. Joe speaks with a southern accent and phrasing, and Young-soo speaks more in Engrish. If we forced “1 true way” of speaking upon Joe and Young-soo, if we made them all speak in British English (colloquialisms and all), how effective would that be for the team? We’d never think of doing such a thing, yet it’s precisely what we do when we impose “1 true style” of coding upon a whole team. Does that really lend to effective coding? to effective communication and expression?

Or can we accept that there’s at least enough of a style, enough of a standard in place that allows us to get the job done with each member expressing themselves as best as they can? Oh sure, if we find ways to help improve our communication, we should improve (e.g. allow your style to evolve). Just keep in mind what a coding style is to be for, and work towards enabling the team to effectively express themselves and write successful code.

If you have no particular style, if you need to find some way to improve the team’s workings, adopting style guides such as the NYTimes Objective-C Style Guide can be useful. Even if you don’t need such a guide, consider what the guide has because there may be a new twist or technique that allows you to improve your code. For example, reading that guide reminded me about Xcode’s expanded support for literals and how BOOL isn’t quite what you think. If we can write better code, if we can more fully express ourselves, style is a benefit. Just keep it in such perspective.

WordPress fail

I downloaded the WordPress iOS app update.

Installed. Oh hey, this “Notifications” thing is new. Let’s go see.

Crash.

*sigh*

Relaunch the app.

Oh cool. They have some mechanism that autodetects the crash and looks like it can send the crash report…. oh the app just crashed again.

HA!

And now it’s caught in an endless crash loop. Launch app, crash detector comes up for a couple seconds, then the app crashes. Lather, rinse, repeat.

Just awesome. :-)