It reminds me how good life is.

I’ve been working as a full-time telecommuter for at least a decade.

I enjoy it. It’s my preferred mode of working.

The company I work for finally opened an office in Austin. They opened it due to other projects in the company (all the people and projects I work on are in California), but hey… it’s here, I can work in it. I figured if nothing else, I should establish a presence there. Meet the folks in the office, stake out a claim on a desk, stuff like that. So that’s kinda cool. The office is still being brought online 100%, but today I spent my first day there.

I don’t like it.. 🙂

Don’t get me wrong. The office itself is alright. The people are good (especially the lady that’s managing the office). Yes there are some hiccups as the office is coming online. But hey, all in all things aren’t bad. Plus I have a proper office, with a door, a window, a nice view.

What do I not like? I can’t listen to loud music while I work. I don’t have the smell of Wife’s wonderful cooking filling the air. I don’t hear my children playing. I have to wear shoes all day. I can’t just wander out of my office and go poke at my best friend (Wife) or play with my kids or see what they’re up to. No cats to sit in my lap.

I know. Cry me a river.

I know my life is good. I know that I’m blessed and fortunate. I have a life that many people would love to have. I worked hard to get here. I wouldn’t settle for anything less than the life I have, and through hard work, dedication, and sacrifice I’ve gotten where I am. So days like today? They’re just reminders of how fortunate I am and how good life can be. That whole “count your blessings” thing.

Every morning when I wake up I say to myself, “Daub, don’t fuck this up.”

Still, I’ll probably come to the office now and again. It’s not all bad.

Potential lightening of my wallet.

The company I work for, they’re opening a proper office in Austin. I’m still going to work from home. Been doing it over 10 years, I see no reason to stop, especially since my home office is better set up and equiped for the requirements of my job.

However, I did discover the new office isn’t too far from GT Distributors.

“Honey…. I need to uh… go to the office (yeah, that’s it).” 🙂

Bummed, but making the best of it.

Work ran long today. I was determined to finish the compliance with the new open source software usage policy, so I could get back to more creative endeavors. I’m all done save hearing back from the CTO on a couple things.

Consequently I missed my martial arts class tonight. Bummer too, as it’s weapons night.

Tonight is also the sparring class. If all goes well, I’ll have something from the UPS man in a couple days that will make that class finally happen. Details will be posted after Mr. UPS stops by.

In lieu of proper class, off to the garage I go. Going to work out on the DIY mook jong. I think I’ll stick my blue gun in the holster too for a little “cross-training”. And on all that knife blarg I’ve been writing about lately? That is one benefit to the Delica: there’s a trainer version. Hrm.

Telecommuter advice – you must seek

If you choose to take a telecommuting job, especially if it’s full-time telecommuting, you also take upon yourself some communication responsibilities you may not be aware of. If you don’t, you risk isolating yourself which doesn’t bode well for you or the company over the long-term.

Continue reading

Head down

My head will be down for a bit.

I need to convert a library of C++ code into a Mac OS X framework. It’s heavily complicated by the copious inling of functions in the header files (bad thing in a dynamic library situation). Much rewriting and massaging of code must ensue. *sigh*

Head will be down for a while.

But given I’ve been awake since about 3 o’clock this morning and have to stay up and active until late afternoon anyways (Kali class tonight!), I think I’ll take a break from work in a little bit and run to the gun range. Stay tuned….

Writing PackageMaker (Installer) Plugins

I’ve never written an installer with Apple’s PackageMaker. Never had a need to.

However, the day job has recently required me to write a few custom plugins to customize how some installers work.

I was amazed at how easy it was. The InstallerPlugins.framework is very simple and well-constructed. Sure you can’t do everything you need with it, but you can do most and then write scripts and other things to customize it to your heart’s content.

The thing that gets me? There’s almost no documentation on it. Apple provides the InstallerPluginSample code, and really in a lot of ways between that and reading the InstallerPlugins.framework headers, that’s about all you need. It’s that simple and well-written of an SDK.

Still, some things came up while I was working that I couldn’t find an answer to. For instance, I was instructed to create a “display license” panel that replicated the stock panel the installer provided but had a few customizations. The trouble with this? Anything outside of the content panel I couldn’t replicate, such as the “Print” and “Save” buttons. I was pointed to this resource and specifically this FAQ:

[Q] Can I add Print… and Save… buttons similar to the ones used in the default License pane?

  • You can do it through an undocumented and private method:
    1 Open the nib of your plugin project in Interface Builder.
    2 Add a custom view to the nib file.
    3 Add Print… and Save… buttons to this custom view.
    4 Create outlets in your controller class for this custom view and buttons and make the appropriate connections in Interface Builder.
    5 Add 2 methods in your controller class to be called from the 2 buttons and connect the buttons to these methods in Interface Builder.
    6 Add the - (id) bottomContentView; method to your controller class and make it return the reference to your custom view.

IMHO, using an undocumented and private method is bad and just asking for breakage and trouble down the line. But, some people are willing to live with that so tread accordingly.

StĂ©phane Sudre also provides this HOWTO on using PackageMaker. By the screenshots and some text I can see it’s old, so I don’t know how relevant it is to day’s PackageMaker. But there you go.

Code Practices

I’ve been developing software over 30 years, 15 of those professionally. I’ve learned a thing or two from the real-world trenches, one of which is that all code written must eventually be maintained… probably by you. The more you can do to ensure your code can be understood 6 months (or more) later, the better (your) life will be.

But this is hard.

Not just whining that it’s hard, but it is a difficult thing to do because who can know what exactly you’ll need to know or care about during maintenance. And while you’re in the heat of the moment writing code, you may not consider everything that needs to be documented. This is why the best you can do is strive to write simple code, well-factored, and as understandable as possible from the get-go. Premature optimization is the root of all evil. Simple is good; simple is best.

Via Slashdot I see this article on Coding Practices. He raises good points, but at least in my experience it doesn’t always work out that way.

Continue reading

How do you people do it?

I am a Mac user. In fact, I don’t just use Macs but I write software for Macs as my chosen profession. I’ve been writing Mac software for over 17 years. The first computer I owned (well, parents owned it… first computer in my household that I had regular access to) was an Apple //e. I’ve been working with computers for over 30 years, and for the most part yes it’s been Apple-based. Sure I’ve used other computers and computing systems, but Apple computers and Macs are my mainstay.

Why do I prefer Macs? Because they are elegant, beautiful, “they just work”, there’s a familiarness in their use and design. Like any good tool, the tool should enable and enhance your ability to get work done and should not get in your way. This is the Mac User Experience. Granted, it’s not always perfect. Apple themselves have changed and refined the OS over the years, with some stumbles but some great strides too. Certainly you encounter 3rd party software that can be wonderful to use, and some that can be amazingly painful to use. Usually I’ve found the painful stuff is written by people who think they’re just writing software and don’t fully grok the notion of “user experience” and what that means and why it matters.

That’s why I write today.

I’ve been temporarily reassigned to another project within the company I work for. This particular piece of software exists on both Mac OS X and Microsoft Windows. For the most part, that it exists on Windows matters not to me. However, I was just given a couple bugs (I didn’t write them, but I get to fix them) to investigate that necessitate the use of Windows.

I haven’t had to run or really touch a Windows box in over 10 years. Oh sure from time to time I have, at a friend or relative’s house, but in general I just have no reason or need for it. Thankfully the company has copies of VMware Fusion and some pre-made “virtual disks” with Windows XP already installed. A few hours of file transfers later (the VPN is slow) and I was up and running with Windows on my MacBook Pro.

That’s where the pain started.

How in the world can you people use Windows? 🙂

Apparently the XP installs were fresh installs, so upon first login I get bombarded with questions. Little balloons popping up everywhere trying to be helpful but only serving to overwhelm me with a desire to put my fist through the screen. You close one and another one immediately pops up, again, and again, and again, and a-fucking-gain. Oh hey it noticed some sort of hardware, tho I don’t know what, and it’s trying to help me cope with it but doesn’t tell me what it wants to cope with. And the stream of dialogs and “helpful” things just keep coming like and endless parade.

MY GOD WILL YOU SHUT UP AND STOP TRYING TO BE SO FUCKING HELPFUL!

The thing is, I’m a computer savvy person so I understand a lot of what’s going on and why. But I step back and try to look at this experience from the angle of someone like my mother, and I just cringe. No wonder she has to take her computer into the shop so often. No wonder she spends so much time on the phone with tech support. What a nightmare! And all I’ve done so far is log into the machine!

Yes, I’ve been away from Windows that long. I wish it could have been longer.

The I run some installers and wow, talk about more unfriendly and bizarre designs. I know some of this is merely because it’s the devil I don’t know… because it’s “not Mac”. Ultimately however it’s not that. It’s about poor user interface and user experience considerations and design. Granted it is not easy to do, to make something so complex, so technical, into something that just anyone can use. But I do like to think Apple’s done a pretty fair job with that.

I just cannot see how people can use Windows and enjoy it. Most people have to use it because work requires it of them, and then they use it at home because it’s the devil they know. As well, I know most people just aren’t into computers as much as I am so it’s not something they think much about. Or the old stigma’s remain about Macs that keep them away. It’s all about inertia.

I have to use Windows for a little while to deal with this bug. Thankfully it’s only for a little while. 🙂

If you want to learn more about interface and user experience design, check out stuff from Bruce Tognazzini and Jef Raskin. In fact, here’s a great little article by Jef on Tog’s website, about “intuitive”.

Working on a smaller machine

As a software developer I appreciate having good hardware. In fact, I appreciate having lots of good hardware as that best facilitates getting work done in a day.

Over my career I have evolved what I prefer to have for optimal work. I like to have a laptop on which I do “communication” work. So the laptop does email, web browsing, instant messaging, and whatever other administrata or time wasting I wish to do. Having it on a laptop is good because often such tasks require portability. I do set up the machine to also do development work, but it is not meant to be a primary dev machine.

I then like to have a very beefy machine for dev work. For instance, these days something like an 8-core Mac Pro with 10 GB of RAM and multiple internal hard drives works very nice. I also like to have multiple monitors attached to the machine because lots of screen real estate is good. Furthermore, it works better to have multiple monitors instead of one big monitor because there is often different logic that can be done based upon “screen 1” or “screen 2”, especially when doing things like debugging and needing to cope with the menubar and screen redraws.

Finally, I like having extra machines for whatever needs. These are often sandbox machines of various configurations that I can nuke and pave and do what I need to to help test, reproduce bugs, and so on.

So as you can see, I’ve found surrounding myself with a lot of machines is a daily necessity for getting my job done.

What happens when I’m forced to use a little machine for everything?

I’ve been temporarily reassigned to another group in the company that needs some help with their projects. Due to the nature of the products and the fact I like to keep very clean machines (sorry Unsanity; no Input Manager hacks here), plus given the nature of the work may require working in other locations, I requested they provide me with a laptop for dedicated use for this work.

I received one. A recent MacBook Pro.

15″.

Man, that’s small. Well, to me at least. 🙂

Compounding that is Apple changed some things in Snow Leopard to make stuff bigger. For instance, the default font in Xcode is Menlo Regular 11, instead of old Monaco 9 or 10.  I played with it some trying to pick other fonts or make things smaller, but I have to say, after I got over the initial shock my eyes do like the Menlo 11 better. But with bigger font means less content on the already smaller scren.

Then when I need to run Xcode for dev work, TextWrangler for notes and other things, Firefox to get into the bug database, and a few other apps… gah. Too many windows on that little screen. Sure I love ExposĂ© and use it all the time, but it’s still a lot for that little screen.

So I started to use Spaces.

I toyed with Spaces before, but I just haven’t had a compelling need for it. I think it’s neat. I’m glad Mac OS X has it. But I haven’t been able to successfully put it into my workflow…. until today.

Turned it on, 4 spaces. Xcode on the main, TextWrangler “below”, Firefox “to the right” and since I prefer to use the keyboard I know the shortcuts to navigate around. Man… everything worked pretty slick. A few things were annoying, such as being on the non-Xcode space and then Xcode’s build window popping open on that space; it makes sense in a way, but it’s not what I want… I want to keep that app’s windows on that space. I wonder if there’s a way to force that.

I don’t know if I’d need to use Spaces on my big dev machine with the 2 monitors and lots of screen space. But on the little machine yeah, what a help it was.

OmniObjectMeter, I love you

Last night and this morning I’ve been dealing with some odd behaviors in the code I’ve been writing. I know it’s my mistake, the trouble is finding just where the mistake is. I spent time in the debugger observing behaviors that lead me to believe some object instances were not being released thus causing the side-effects I was seeing. As well, the lack of deallocation is a pure memory leak. So, find and fix the leak and many things should improve.

The current tool from Apple for finding memory leaks is the “leaks” tool of Instruments. I do think Instruments is cool and very powerful, but it’s also extremely obtuse and complex. It’s a tool that I don’t need to use all the time (in fact, rarely). Consequently what I learned the last time I needed it has left my head so I have to ramp up all over again. That’s just too much precious time spent, and too many brain cycles distancing myself from the problem at hand. Tools should not get in the way of solving your problem. Before Instruments, Apple had tools like MallocDebug and ObjectAlloc, which were useful and simpler tools but still weren’t the best in terms of interface and usability.

Some years ago I discovered OmniObjectMeter from The Omni Group. It was a godsend. It allowed me to pinpoint and track down memory leaks quickly and easily. It was so simple, so logical, so well thought out. It was easy to get going with it, it was easy to use it, and most importantly you could find your problems very quickly. Unfortunately OmniObjectMeter was left to languish and didn’t work for some time (there was a “secret beta” that helped it limp along). But I’m happy to report it’s back up and kicking with version 2.6 that was released February 2009. You see, I tried using Instruments this morning and while I could see the leak I couldn’t exactly pin down the location that caused the leak. I lamented for OmniObjectMeter, checked the Omni website on a whim, discovered v2.6, downloaded it, and within 5 minutes my leak was found, fixed, and verified.

That’s testimony. 🙂

I’m glad she’s still working. Plus, now OmniObjectMeter is free! I’m proud to say I paid for my copy (well, I got the company to pay for it) all those years ago. So FTC, yet again this is just a satisfied customer telling the tale of his happy experience.