Shit Boots

description

Shit Boots

Flow Review

description

Flow Review

Latitude Interview

description

Latitude Interview

MacWorld 2008

description

Macword 2008

iPhone Review

description

State of the iPhone

iLife 08 Review

Item Description

iLife 08 Review

Coda Review

Item 3 Description

Coda Review

CSSEdit Review

Item 1 Description

CSSEdit Review

Healthy Mac

Item 1 Description

Healthy Mac

Jun 19

A little overshadowed in the developer community by WWDC and all the inevitable ramblings that take place after, the famous Sparkle framework for automatically updating applications has seen an impressive update.

Still in beta, v1.5 introduces several new features including:

  • Support for .pkg files
  • Support for receiving demographic information from users
  • Can update bundles, not restricted to just .app applications
  • Minimum system version checking for users
  • Garbage Collection
  • Better version comparison algorithm
  • DSA instead of less secure MD5
  • Won’t update if app is running from a disk image

Andy has also taken the time to dramatically simplify the Sparkle site itself, and move the project over to Launchpad for easier development. Be sure to check out this new version to incorporate into your apps to gain the new features.

Sparkle Page

Sparkle on LaunchPad


Jun 17

The lack of HUD controls from Apple in Leopard is a hot topic. The HUD style has picked up quite a following over the last few years, and without an official release of the controls from Apple, developers have been left to their own devices to replicate that style.

The community has been hard at work and before now the most notable project being developed was by the Shiira web browser team, called BlkAppKit.

Tim Davis from Binary Method has been hard at work creating an awesome framework of HUD controls. Unlike the few other kits already out there, BGHUD AppKit does not use images to create the controls. None at all. These controls are beautiful and ready for Resolution Independence. Also worth noting is the shear number of controls already available, the speed with which the developer is creating new ones and the community that is using it, including RealMac Software, developers of RapidWeaver.hud.png

Another unique feature to the BGHUD AppKit is theming. Tim has taken an interesting approach to theming the controls to better match your application, if you need something different than the default HUD style. Place your controls on the windows and set the custom class, as you would with any other custom control in Interface Builder. Building and Running the application at this time will show no difference. However, if you initiate an object controller, of either “BGThemeManager” or “BGGradientTheme” and connect the outlet of every control to this object, your controls are now updated. Using the “BGGradientTheme” gives you the default appearance, while using the theme manager lets you customize the controls.

This seems a little tedious upfront, especially if you want to just use the default appearance. However, if you needed to change the overall appearance of your application, instead of subclassing all of these controls, you can simply subclass and use the update theme manager. Therefore, it does pay off in that respect.

My personal recommendation: If I don’t set the outlet on my control to a theme manager, then use the default HUD behavior. That way I don’t even have to worry with it. But, the work put into this framework is phenomenal and it seems that Tim isn’t sleeping until he implements every last single available control perfectly. If you need HUD controls in your project, I strongly believe this is the best framework available. The work is beautiful, it’s under heavy and active development, the developer is responsive to requests, it’s easily theme-able, and all the controls are already Resolution Independent.

Update: Tim has already read the post and really liked my recommendation for simplifying the ThemeManager behavior. Even better, he’s already implemented the change into the framework, so checking out subsequent version from SVN are now more friendly. Check out his blog for more details and to get your copy.

BGHUD AppKit Home

Shiira BlkAppKit

RealMac Software

My previous post on HUD controls in Leopard


Jun 07

For any of those out there wondering if Versions was vaporware like that YouTube client promised forever back, there is a little hope.

From the Versions website:

Whether you’re a designer, developer, editor or project manager, chances are you already have plenty on your mind. Versions saves you the hassle and makes working with Subversion easy for your entire team. Thanks to Versions’ clear-cut approach to Subversion, novices and power users alike will enjoy using it. And if you haven’t moved to Subversion yet, now is the time.

ui_browse.jpg


Mar 07

I spent most of last evening and some of this morning sifting through the various documentation and classes for the UIKit framework distributed with the iPhone/Cocoa Touch SDK. So, for the very quick, but cool observation.

You can easily create a UITextField to handle text input. The interesting part comes into play because there is a keyboard associated with the UITextField, obviously for providing input. That keyboard can be specified what action to do when the return button is pressed, giving a way to process the text. The cool part is, it’s extremely easy for developers to use the many different types of keyboards present on the iPhone. For example, there is a numeric keyboard, the default keyboard, one for entering URLs, one for entering email addresses, and so on. Below is a quick code block, adapted from the “Hello World” example.

aTextField.borderStyle = UITextFieldBorderStyleRounded;
aTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
aTextField.placeholder = @”Your name”;
aTextField.keyboardType = UIKeyboardTypeSingleEmailAddressing;

Some other examples of keyboard types:

  • UIKeyboardTypeDefault
  • UIKeyboardTypeNamePhonePad
  • UIKeyboardTypeNumberPad
  • UIKeyboardTypeNumbersAndPunctuation
  • UIKeyboardTypePhonePad
  • UIKeyboardTypeURL

Mar 04

For those who haven’t heard of the newest Cocoa development blog, you should check out Cocoa is My Girlfriend. I first came across the site a few weeks ago with its first article, but now that the author has published some good articles, it’s definitely worth mentioning. There is an excellent NSOperation and NSOperationQueue example, as well as a couple using Core Animation.

Cocoa is My Girlfriend


Jan 21

For everyone who has been anxiously awaiting the revised 3rd edition of the wonderful book on Cocoa Programming, the wait is over! The 3rd edition is the first release of the book since Panther and will cover all technologies released in Tiger as well as Leopard. Very exciting news indeed, pre-order your copy at Amazon here.

On the Big Nerd Ranch website, the release is marked simply as “Spring 2008″. However, the publishing date on Amazon is marked as June 2, 2008. Pre-ordering through Amazon will guarantee you receive your copy as soon as it’s available.

Found via | Ranchero.com


Dec 29

So I have finally had time to code to my heart’s content over the holiday break. I thought that I would share some of my thoughts and experiences with programming for Leopard.

Fast Enumeration

Cocoa now implements a foreach() type of loop, which cleans up code tremendously. Iterating over an array or dictionary is pretty common stuff and being able to condense code from:

NSEnumerator *e = [myArray objectEnumerator];
id item;
while ( item = [e nextObject] ) {
NSLog(@”%@”, [item printSomething]);
}

to a more elegant:

id item;
for ( item in myArray ) {
NSlog(@”%@”, [item printSomething]);
}

Properties

Properties are a wonderful addition to Cocoa and essentially eliminate writing basic accessor methods for your objects (setters and getters).

@interface Song : NSObject {
NSString* title;
Artist* artist;
NSDate* dateAdded;
}

@property(readwrite, copy)NSString* title;
@property(readwrite, copy)Artist* artist;
@property(readwrite, copy)NSDate* dateAdded;
@implementation Song @synthesize title, artist, dateAdded;

The ObjC 2.0 compiler gives you extreme flexibility with properties, beyond just the basic use of accessors here. You can specify a property to be readonly instead of readwrite, or to retain or assign instead of copy.

@dynamic title; -(NSString* )title { }

The above would require you to implement the method yourself, letting the compiler know you are handling that.

NSTreeNode

Not a feature of the ObjC language, but certainly a nice addition to help using NSTreeController. NSTreeNode is a wrapper object which aids in creating trees. Just create a NSTreeNode and add other NSTreeNode objects to the -mutableChildNodes array and you are on your way to a tree. Binding this tree to a NSTreeController is relatively simple as well. Of note, remember that if you are using NSOutlineView delegate methods, you receive a NSTreeNode object now, so you must use -representedObject on “id item”.

A further note, when using the “selection” controller key on a NSTreeController, the controller returns an array of NSTreeControllerProxyObjects. Either call -self on the NSTreeControllerProxyObject or when using bindings (binding a second NSTreeController to the “selection” of the first one) remember to use “selection” with model key path of “self”. I don’t believe this is documented anywhere, but using “self” clears up a whole world of heartache and gives you the actual NSTreeNode instead of the NSTreeControllerProxyObject.

Interface Builder

It took some getting used to, but recall that you have to drop a NSObject (blue cube) from the IB Library and set the custom class to initiate an object in IB 3. The old method of “Initiate Class” or whatever from the menu isn’t available. Also remember that IB Palettes don’t work with IB 3, you will need to find (or create) IB Plugins.

Core Animation

Recall that the -orderIn and -orderOut options in IB are for adding and removing subviews to the selected view in IB (-setWantsLayer:YES). So NSTabView will not magically transition views in and out unless you are programatically creating new tabs and such.

That was just a quick list of the headache I endured over the last few weeks adjusting to Leopard and mainly spending lots of time with trees in Cocoa.

I’d love to hear your thoughts about ObjC 2.0 additions, whether it’s garbage collection or something more minute!


Nov 29

So I have finally found about 30 minutes of free time to just have fun with XCode 3, Objective-C 2, Interface Builder 3 and the like all bundled in Leopard. I’m extremely impressed with all the improvements made to the development suite, minus one major shortcoming: HUD Controls.

HUD (Heads Up Display) are those gorgeous black windows that have started popping up all over Mac applications. Especially in iPhoto and Aperture, as well as Pages and more, these beautiful windows serve a specific purpose. Apple went so far as to finally include a HUD window in Interface Builder, so that developers don’t have to use a hacked together version (Interface Designers like uniformity, so it is better when everyone is using the same thing vs 15 different versions of the same window, which is the case now). So, I naturally assumed that Apple also provided HUD versions of buttons, lists, and more, to match this window.

I was wrong.

picture-2.pngpicture-3.png

I can create this nice window with no effort now, but as soon as I place something on it, it looks stupid. The simple screenshots above illustrates the effect. (Also notice the differences in the window itself. See how big of a difference there is just on the lines at the bottom right of the window where you resize? Now imagine that every time I had to write an application, I had to make this from scratch. With all the Mac developers out there, you can imagine that there are lots of variations). I sure hope that Apple fixes this soon and doesn’t wait until 10.6 and a new window style to add this for developers.


Jul 30

I ran across another Mac shareware team I’d never heard of, Bruji, makers of the “Pedia” software, such as Bookpedia, CDPedia, and DVDPedia. Looks a lot like Delicious Library, except split up into different applications.

What is interesting here is the little gem I found on the website in some sample code and open-source frameworks. The Bruji team released a framework allowing Cocoa developers to grab barcodes from an internal or external iSight or other firewire camera.

Download the source here.


Jun 13

Jobs faced a very tough audience this past Monday as he delivered his keynote speech to over 5000 attendees at Apple’s annual World Wide Developers Conference. With the previous announcement of the iPhone and the delay for Leopard, everyone was wondering what Jobs would pull out of his box of tricks this time.

Sadly enough, this WWDC wasn’t quite as exciting as we’d been led to believe. At last year’s conference, I was thrilled with several of these features and spent a week in hands-on sessions learning about the technologies. Therefore, most of this was a repeat for me. I had still held out hope for the “secret” features to be announced. There were a few new features announced, but nothing that blew me away like I was expecting. However, Leopard is a huge release and should thrive for several years. It will really shine once we start seeing applications that are Leopard-only. The possibilities are simply amazing. Let’s discuss some of the finer points of Leopard.

 

Multicore Support

This is a major improvement for all Intel Mac users. Even first generation Macbook users and all the early Intel adopters should see performance gains in Leopard. Tiger was designed to run on one-core processors, which was fine at the time. However, all Intel Macs have at least 2 cores, with the high-end “Ocho” Mac Pro having 8 all together. Can you see the reasoning here? With Leopard optimized to make the best use of all those cores, and new ways for developers to further improve their programs (read more about NSOperation and NSOperationQueue ), Leopard should see a significant performance improvement.

Safari 3 for Windows

I’m not sure if Safari 3 for Windows is a “secret” feature of Leopard or not. I’m actually using the beta on Windows right now to write this article and so far it has behaved itself rather nicely. The attention to detail in making Safari for Windows just like Safari on Mac is incredible. Even the contextual menu (right-click) gives you the same options, such as “Save Image to Desktop”. I mean, that’s just crazy.

Boot Camp

Most were hoping for Jobs to announce some amazing virtualization technology built right in to Leopard. I’m rather glad that this approach wasn’t taken for a few reasons. First, there are already two options on the market today: Parallels and VMWare. Parallels has proven they are dedicated to providing new features and constantly improving the software. I love Apple, but if they incorporated virtualization into Leopard, the updates would be few and far between when compared to Parallels. Just check out Parallels new 3.0 release to get what I mean.

What Jobs did tell us is that Boot Camp will allow you to switch between Windows and Leopard faster. Quick example: If you’re in Leopard and need to switch to Windows, be sure to use the “Restart in Windows” option from the Apple Menu. This will place Leopard into a hibernating state and, if you’ve previously used Windows, should start Windows from where you left off. This will make the process much more relatable to “Suspending” a virtual machine in Parallels.

 

New Desktop

The redesigned Desktop is touted as the number one feature for Leopard. However, I don’t see anything revolutionary or amazing about it.

  • The Menu Bar has a new look. It’s very comparable to the trashy-translucent taskbar in Vista. I’m not excited, but I’ll put my concerns aside until I see it in person.
  • The Dock has seen a facelift. Your icons now sit on a silver background that reflects any window behind it, making it look 3D. Might look cool, but is that really a feature?
  • No blue background. I’m very sad. For me, the Mac experience has always included a new, cool Aqua background with every major release. Jobs explicitly stated that no one ever uses these and it’s a waste of time. I like them Steve!
  • Anyone else notice that the hard drive icon wasn’t on the Desktop. Very minimalist look.
  • Stacks. I’m actually fairly excited about this new feature. Basically, it’s a way to organize your files and preview the contents in a cool new way, without opening a Finder window. This was originally rumored to be included in Panther, then in Tiger, and now in Leopard. Nice to see it finally made it in. All the demos show the stacks being used in the Dock. I wonder if we’ll be able to use them other places. I love the concept, but won’t use it that much if I have to use them only in the Dock.

 

Leopard Desktop

 

Continue reading »

Older Posts »