Tuesday, April 30, 2013

Cobwebs and drawing with code

Trying to clear out some cobwebs.. so today I cleaned up (minimally, made sure it built and ran, converted to ARC, replaced CTGradient with NSGradient but not much else) an old project and put it up on GitHub. Waaay back when, I spent a lot of time drawing with code, I found it very compelling and eventually the results were reasonably rewarding. I’ve also long held this belief that if you can draw it in code, you might as well. You can avoid all sorts of hassles with sizing, resizing, scaling, etc. While that’s not always the best approach on iOS, for OS X it is still often the route I would take. Perhaps this is just residual legacy pain from trying to deal with media in older version control systems or just the horror from looking in resource folders with 1000s of items or even that most everything I’ve ever worked on had a non-trivial localization task involved.. or perhaps I just liked drawing with code.

When Time Machine was introduced I thought the bezeled ring on the icon looked pretty cool. (and no.. I don’t want to get into any kind of discussion about skeuomorphism.. the fact that I can actually spell that word without looking it up is testament enough to how much time I’ve spent on the subject) I wanted to see what I could do along those lines. I was also doing some tests in representing sound input.

The result was stunningly named Sound Level Test. I’ve just placed it on GitHub for your pleasure, be that usefulness to you or just for reminiscence to see something from almost 7 years go.

Here’s the project.

posted by ganyard at 8:38 am  

Monday, October 22, 2012

Death of email

Just read an article about the impending death of email. (thanks for the link Vinnie)

A little while later it occurred to me that when I use FB, LinkedIn or Twitter that I really don’t suffer under the huge burden of spam that exists as email’s symbiote. Admittedly the email providers I use and the local spam filters I have do very good job of keeping all that cruft out of sight, but the amount is still atrocious. And this thought seemed so pleasant and delightful and even a little bit clever.. enough so as to inspire a post on this dormant blog. The idea that the death of email would bring along with it the death of spam – hooray!

Unfortunately as I started to write this, I thought about follower spam on twitter, well that doesn’t really count because it’s pretty easy to stifle. Oh wait.. there’s all that campaign stuff popping up on Facebook. How did that get there? Well at least in LinkedIn, it hasn’t shown up. (yet?)

Alright so maybe not the death of spam but at least a notable reduction. These communication portals built on “social media” all have an element of trust in them that is intriguing in it’s collateral impact on spam. You either choose who to follow/link/friend or who to accept as followers/links/friends and thereby extend your trust. Once in trusting relationship if you start to see spam you repeal your trust or unsubscribe or hide.. pretty tidy really.

Email, as much time as I have spent with you over these many, many years, I just won’t miss your tumor-ridden, parasitic corpse. RIP

posted by ganyard at 9:46 pm  

Friday, February 10, 2012

Where did the time go?

Alright, you’ve been wondering where I’ve been, why this site has gathered cobwebs and why on earth have I woken it up now..

After over a dozen years working with speech on the Mac, I now find myself looking forward, looking at options and opportunities. Having weathered all the ups and downs in a small company, broken the trail to bring real speech recognition to the Mac and created a very successful (and award winning!) product line, ridden it out through the acquisition by a rather large corporation. And then working to adapt a team into that much larger picture, well.. Nuance and I have parted ways.

What I find most interesting was my initial ‘morning after’ reaction, I woke up thinking about various UX items on upcoming features that need my attention, how to balance the value of sandboxing with the needs and value of interapp communication. And continuing to ponder what new directions Apple is going to go with Siri. Old habits die hard, don’t they?

And now it’s time to set aside some of those more specific habits and consider what’s next..

posted by ganyard at 11:57 am  

Friday, February 3, 2012

Where does the time go?

Looks like I’ve got a bit more time on my hands. So what to do.. I’d tried the blog thing a while back, maybe I could revive it. Oh… while I wasn’t looking it got hacked. Drag.

Ok, nasty unwanted stuff has been removed, maybe this is something I can spend some time on for a while again.

I think so.

posted by ganyard at 6:43 pm  

Wednesday, October 10, 2007

The most stylish are often running a little late…

I finally opened this back up and added some things and fixed some things. Thanks in part to some contributions by Mark Hill over at MachineCodex and it really was long overdue.

I expect that 10.5 might change some things with windows *wink, wink* but this is probably still a useful class. Once 10.5 has shipped I’ll try to find some time to revisit this and make sure it behaves correctly.

Until then here it is – 2 significant changes:
1 – toolbars are maybe really actually finally at last working correctly, possibly
2 – separate gradients for top and bottom borders
3 – thanks to Mark Hill’s example, gradients are drawn directly into the bg image
4 – the files have been cleaned up
(the astute will note that I don’t really feel 2 of the items above are significant, that might as well be left as activity for the reader)

Note: In order to avoid extra work from adding a second gradient, I chose to break the old API (just a little bit). So this is not a drop in replacement but you will know that right away.

StyledWindow is now on GitHub <30 Apr 2013>

posted by ganyard at 5:36 pm  

Tuesday, July 17, 2007

When confused, run away!

This is just too much fun to keep to myself.

Xcode Bails!

Might be an interesting approach to life. When overwhelmed by something, just bail.

posted by ganyard at 10:14 am  

Thursday, January 18, 2007

Those stinkin’ NewApplication menu items.

I feel pretty bad.. it’s been a long time since I’ve posted. I had such good intentions about doing this regularly, didn’t quite keep that up. To allay my guilt, here’s something (I think is) useful.

Why can’t I just have some kind of substitution token for my App name in my menus? It would be so nice if this was just handled for you. Or even just use preprocessor macros. Or something so I don’t have to build things programmatically.

I’m working on a project which produces various targets, why would I want a separate MainMenu.nib for each target, when except for the App name they are the same (or at least nearly so).

So here’s what I did in my AppController’s AwakeFromNib:

NSEnumerator *menuEnumerator = [[[NSApp mainMenu] itemArray] objectEnumerator];
id menuItem;
  while (menuItem = [menuEnumerator nextObject]) {
    if ([menuItem hasSubmenu]) {
      NSEnumerator *subMenuEnumerator = [[[menuItem submenu] itemArray] objectEnumerator];
      id subMenuItem;
      while (subMenuItem = [subMenuEnumerator nextObject]) {
        NSString *menuTitle = [subMenuItem title];
        [subMenuItem setTitle:[[menuTitle
            componentsJoinedByString:[[NSProcessInfo processInfo] processName]]];

Maybe you’ll find a use for it somewhere.

posted by ganyard at 10:30 pm  

Wednesday, November 15, 2006

Now even more Stylish!

(Alright, I found something that was broken that I had overlooked in my implementation. Thanks to Matt Gemmell for helping me resolve the error of my ways.)

StyledWindow now plays properly with Toolbars.

Download now available on GitHub

posted by ganyard at 2:06 pm  

Sunday, November 12, 2006

A smattering of Pixie dust.

Pixie is a great tool. If you’re interested in using StyledWindow to recreate existing Polished Metal implementations here are some values for you.


[styledWindow setBorderStartColor:[NSColor colorWithDeviceWhite:0.7686 alpha:1.0]];
[styledWindow setBorderEndColor:[NSColor colorWithDeviceWhite:0.5922 alpha:1.0]];
[styledWindow setBorderEdgeColor: [NSColor colorWithDeviceWhite:0.2510 alpha:1.0]];

iMovie HD & iDVD:

[styledWindow setBorderStartColor:[NSColor colorWithDeviceWhite:0.7686 alpha:1.0]];
[styledWindow setBorderEndColor:[NSColor colorWithDeviceWhite:0.5922 alpha:1.0]];
[styledWindow setBorderEdgeColor:[NSColor colorWithDeviceWhite:0.2549 alpha:1.0]];


[styledWindow setBorderStartColor:[NSColor colorWithDeviceWhite:0.7686 alpha:1.0]];
[styledWindow setBorderEndColor:[NSColor colorWithDeviceWhite:0.5922 alpha:1.0]];
[styledWindow setBorderEdgeColor:[NSColor colorWithDeviceWhite:0.4039 alpha:1.0]];

iTunes 7:

[styledWindow setBorderStartColor:[NSColor colorWithDeviceWhite:0.7725 alpha:1.0]];
[styledWindow setBorderEndColor:[NSColor colorWithDeviceWhite:0.5882 alpha:1.0]];
[styledWindow setBorderEdgeColor:[NSColor colorWithDeviceWhite:0.2510 alpha:1.0]];

You can use the Demo App to figure out the heights of the borders.

posted by ganyard at 12:14 pm  

Friday, November 10, 2006

Establish some momentum

Being new to this whole blogging thing… I’m going to try make frequent posts. Attempt to establish the habit of putting stuff up or at least writing about putting stuff up.

Those that know me know that talking about stuff isn’t usually a problem, so I’ll just need to work on the discipline of writing about stuff.

But this will really just be a post about posting… not quite. I forgot I had something to share.

And a little workflow you might find useful. I got annoyed about the number of steps required to get an Xcode project posted, so I built an Automater workflow: “Archive Xcode Project”.

Just put it in ~/Library/Workflows/Applications/Finder/ (create the path if needed) and you can control-click on an Xcode Project folder and get a nice clean archive ready for distribution. It strips .svn dirs, Build dirs and [username].* foo from your projects and then zips. Nice clean archives for sharing with friends and family.


posted by ganyard at 6:25 pm  
Next Page »

Copyright © Bithaus