Getting Bottom Bar Buttons to Follow an NSSplitView Pane (Code, wonky)

2010-10-26 20:00:00 -0400


In working on Strip for Mac OS X, I came across a scenario in which I wanted to get the bottom bar buttons on an NSWindow to follow the left-margin of panes about them in an NSSplitView with which they are associated. That sounds like a mouth full, so I’ll use a picture to illustrate, it’s an idea I’m looking to borrow from Apple’s Address Book application (click image to embiggen):

Adressbook Splitview 500w

What I’m trying to suggest with the annotations I’ve made on the image is that the [+] button under that middle pane (highlighted in green) will move as the left margin of the pane is moved, either by the user, or by the window being resized—which cascades down to the subview being resized, since the split view is basically the entirety of the window’s contents.

In any event, I wasn’t sure how to hack this out and didn’t see any examples out there, so I put one together. There might be a better, faster way of handling this, perhaps by responding to NSView notifications about a change in frame, but here I just used an NSSplitViewDelegate method that fires every time subviews are resized (thus, every time the margins of the panes might have been adjusted by a resize or a divider moving). Sample project is here on Github, but this is the meat of it, in the NSSplitView’s delegate:

// gets call after the NSSplitView is resized OR after the divider(s) are moved
- (void)splitViewDidResizeSubviews:(NSNotification *)aNotification
{
[self repositionBottomBarButtons];
}

- (void)repositionBottomBarButtons
{
// we don't actually have to do anything for the left-most button and the left pane
// because we've got it pegged in IB to maintain it's position in relation to the
// window's bottom and left bounds

// first tell the superview that it will need to redraw the frame we'll be moving
NSRect oldFrame = [rightButton frame];
[[rightButton superview] setNeedsDisplayInRect:oldFrame];

NSPoint newOrigin = rightView.frame.origin;

NSRect newFrame = NSMakeRect(newOrigin.x, oldFrame.origin.y, oldFrame.size.width, oldFrame.size.height);
[rightButton setFrame:newFrame];
[rightButton setNeedsDisplay:YES];
}

And there we go, button now follows the pane’s margin, moves nice and smooth.


Announcing Zetetic Connect

2010-10-07 20:00:00 -0400


Today I'm very excited to announce Zetetic Connect, a fast, super-flexible way to get information out of (and into) LDAP directories and relational databases databases for the web, iPhone, BlackBerry, and Android.

Desktop Lead 380Connect grew from a need to publish Active Directory data to the web; so many businesses and schools rely on directory systems, but there just aren't a lot of mature applications that help people take full advantage of those directories or to spot and correct missing data. Connect does that and, going two steps farther, hosts an extremely robust, high-performance engine that can unify multiple directories and data stores behind the scenes, and allows users from any of those directories to sign in.

For example, if part of your company uses Microsoft Exchange, another division uses Lotus Domino, and you've just acquired a third group that uses Zimbra for messaging, Zetetic Connect can quickly create an online phonebook merging all three. Just launch Connect, search for "Smith", and you'll get the contact and organizational details for all the Smiths across all systems, live. The same powerful simplicity applies to contacts, groups and distribution lists, sites and locations, and virtually any other data in your directories. (Of course, you can choose what to include or exclude from each.) Users can easily maintain their own data, such as phone and mobile numbers, according to rules you define.

Interested? »

We're currently running a small number of commercial evaluations for interested customers, including system deployment by Zetetic's LDAP-meisters. Contact us now if you'd like a demonstration and evaluation of the system.

Your mobile users will be impressed by Connect's user interface, which is tailored especially for the iPhone, BlackBerry, and Android, and has the look and feel of a native application. (See: screenshots.) Connect is internationalization-friendly too, so your users get Connect in their native languages, top-to-bottom.

Behind the scenes, we've leveraged many years of directory experience to build an extremely robust framework that actively monitors your directory servers' performance and availability, so users won't notice if individual servers go out of service. Connect also does some pretty serious and smart caching and threading, and features a wealth of special optimizations for Active Directory. That said, it works great with any LDAP server, SSL on or off, and any schema.

You can even use the Zetetic Connect core as a pure-LDAP, federation-capable membership and role provider for any ASP.NET application, a topic upon which I'll touch in a future blog post.


Some Updates to Tempo 10/2010

2010-10-06 20:00:00 -0400


Last night we pushed some minor updates to Tempo, and I want to take a quick moment here to tell you what they were.

Excel XLS Exports (and new listing)

Tempo Exports List

We’ve been fielding the UTF-8/Excel complaint about our CSV exports for a loooong time, and now the nightmare is over. We’ve implemented a new conversion filter that dumps the current report into a native .xls Excel spreadsheet. We also re-labeled the exports to make it a bit easier to find the one you want.

The UTF-8 problem was never an issue with our CSV exports, by the way. Microsoft Excel has always had a bug importing CSV files (one they will apparently never, ever fix), and it treats the characters in your file as ASCII data no matter what. So it goes. Now you’ve got the good stuff.

Bug fixed: Bad Figures in Exports!

At some point we added pagination to our reports’ data sets. This caused a bug in our Time by People and Time by Projects reports. The Total row in each was correct, but the reported hours for each project or person was incorrect in some cases — limited to the total for the currently paginated set. All fixed now, our apologies.

Improved Print Preview

Temo Update Preview

The print preview on the Reports screen was getting a little bit heinous, this should improve things for the time being.

Invoice Memo

When our billing system bills tempo accounts, it sends a receipt, or invoice, by email to the account owner documenting the charges. One of our German companies recently asked if they could include custom information on this document in order to be “in compliance with German law.” We have no idea what it takes to be in compliance with German law, but we did provide a way for them to do it in this release.

If you are logged in as the account owner, or an account manager, go to the Account screen and you’ll see a new field, Invoice Memo, in which you can put anything you like and it will appear under Memo: on your billing receipt.

That’s it for this round of minor adjustments. More are planned for the near future, based on our customers’ feedback, bug reports, and our desire to make Tempo easier to use and more intuitive. As always, if you have ideas, complaints, or suggestions, get in touch


Tempo / Zetetic Server Maintenance, Oct 6, 11pm EDT

2010-10-04 20:00:00 -0400


We’re planning to do some preventative server maintenance tomorrow night to ensure the reliability of our systems and the security of our customers’ data. At 11pm EDT on Oct 6, our various websites will become inaccessible and remain that way until 11:30pm. This affects our time-tracking system Tempo, as well as zetetic.net, getstrip.com, and getcodebook.com.

To find out exactly when this will happen in your time zone, click here. If you have any concerns about this, please get in touch!

Update: we’re back in action. Thanks for your patience.


Advisory: Safe-guard STRIP Data When Migrating to a New iPhone or Upgrading iOS

2010-09-30 20:00:00 -0400


It has come to our attention that there is a potential for inadvertent loss of data in STRIP for customers who have purchased a new iPhone to replace an existing one. This may also affect other iOS devices such as iPod Touch and iPad.

When setting up a new iPhone in iTunes, iTunes offers to restore the data from your old device on to the new one. It would seem that in some cases the process appears to have been completed successfully, but the user later discovers that while Contacts and data from other default applications is transferred successfully, STRIP and other downloaded applications are missing their data. Some users have found (including us personally) that doing a second “Restore from Backup…” operation completes the migration successfully.

However, some users don’t notice the failed migration right away, and have at times discarded the old device (thus losing access to its copy of Strip’s data), or have synced their iPhone with iTunes since the initial Restore, which has the effect, in some cases, of wiping out the old backups maintained by iTunes. In that unlikely situation, it becomes nearly impossible to recover the user’s data.

Avoiding the Problem Before You Make the Switch

If you are planning to migrate to a new device or upgrade your iOS operating system, you’ll want to do the following before you make the switch. We’ll go through the various steps below.

  • Disable automatic syncing in iTunes
  • Turn off encrypted back up (temporarily)
  • Take a fresh backup in iTunes, explicitly
  • Use Strip Sync to take an independent backup of your data

As always, we are here if you run into trouble, please get in touch.

Disable automatic syncing in iTunes

Make sure your iPhone is disconnected from your computer. Open up iTunes, go to Preferences → Devices, and make sure the checkbox “Prevent iPods, iPhones, and iPads from syncing automatically” is checked.

Turn off encrypted backup (temporarily)

Connect your iPhone (or iPad or iPod Touch) to your computer with the USB cable that came with your device. If iTunes is not running, start it. Once the device appears in the left-hand side of the iTunes window, click on it to bring up the Summary screen. Scroll down to Options, and make sure that “Encrypt iPhone backup” is not checked.

Take a fresh backup in iTunes, explicitly

Every time you sync, iTunes will take a fresh backup, but it doesn’t necessarily keep that backup around for later. Doing it explicitly will keep the backup around for later in case we need to do a Restore.

In iTunes, with your phone still connected, right click on your phone’s icon and name in the left-side view of iTunes. In the menu that comes up, select “Back Up” to initiate a fresh, unencrypted back up.

The process may take a few minutes to complete.

If you had turned off encrypted backup in the previous step, you can now turn it back on.

Use Strip Sync to take an independent backup of your data

To ensure that you can have an independent backup outside of iTunes, we’ve published a free companion utility for Mac OS X and Windows called Strip Sync. It is important that you download and configure Strip Sync on your desktop. Once installed you’ll be able to sync your data off your iPhone and into Strip Sync over WiFi.

You can download Strip Sync for free over here: http://getstrip.com/strip-sync

Be sure to follow the setup instructions for your operating system:

Strip Sync works over WiFi on your home or office. If you have problems syncing the most likely cause is a firewall or network issue, and a good first step is to ensure your workstation firewall is disabled or at least allowing incoming connections. Do get in touch with us if you need help.