Mac

Jun 24, 2009

Eclipse Galileo for Mac: Cocoa or Carbon?

Galileo-snap Eclipse Galileo (3.5) is released today. Mac users downloading the new release will notice that, unlike previous releases, they have some interesting choices to make. They need to choose between "Mac OS X (Carbon)" and "Mac OS X (Cocoa)". There's also a third choice, which is currently not mainstream, the "Mac OS X (Cocoa) 64 bit". So, which version is right for you?

Answer: Download the 32-bit Cocoa implementation. Here's why.

Here's a brief and (over?) simplified background:

  • The Mac OS X provides a native API called Cocoa. It replaced the earlier implementation called Carbon. Carbon is being phased out and one of its' main limitations is that it is only 32 bit. 
  • Java 6 for Mac OS X, introduced last year, is 64 bit only. This is, BTW, a real annoyance, since you must have a 64 bit capable CPU to run it, i.e. an Intel Core 2 Duo. 
  • SWT is the GUI framework behind Eclipse. It is written in Java, but it is different from other Java GUI frameworks (like Swing or AWT) in the fact that it actually wraps the OS native UI widgets, providing native look and feel in each OS. This means SWT has a different implementation for each OS. 
  • The current SWT implementation for OS X is based on Carbon.  Thus, it cannot use Java 6 on OS X (at least not the Apple JDK).

There has been an effort to release a Cocoa version of SWT for Mac in the Galileo time frame. It was clear that the Carbon SWT is a dead end. This release is finally ready.

Now back to the main question: which one should you use?

Let's first clear the 64 bit issue. You can use the 64 bit Cocoa implementation. It requires Java 6, which is available on Leopard (OS X 10.5.x) only and requires an Intel Core 2 Duo processor (not Core Duo). If you bought a new Mac in the last 2 years, you are likely there. You can check your processor by selecting "About this Mac" from the Apple menu. 

You will need to use it if you have an Eclipse plugin which requires Java 6 to run or if you are developing such a plugin or an RCP application (which means you are limiting your target audience). I am not familiar with any popular Eclipse plugin which specifically requires Java 6. You may also use it if you intend to break the 32-bit memory addressing limit with your Eclipse IDE (which is almost 4 GB). 

In all other cases, there's no reason to use Java 6. From my initial tests it does not feel faster. Plus, it has limitations like the inability to run the SWT_AWT bridge (some plugins may use it). It uses more memory which is obvious since addresses take more space. You can, BTW, develop Java 6 applications with Eclipse running on Java 5. 

My current recommendation is: don't bother. Use the plain 32-bit version. If you still want to test it yourself, the 64-bit version can be downloaded here.

Back to the main question: Cocoa or Carbon?   First of all, they look the exactly same. Although Carbon is more mature and thoroughly tested, the new Cocoa implementation offers advantages and improvements. There are some obvious features like Sheet support, which is implemented in a few places like the "save as" dialog. However, it's the little things that make the big difference.

Here's just a few examples:

  • Improved behavior of the Zoom button (the green button in the title), finally.
  • Much better Spaces support. 
  • Plays nice with the Dock when it is positioned on the left of the screen.

These are all minor issues, but they make your life much better. I'm sure you will appreciate the Cocoa Eclipse. I do. 

Dec 07, 2008

Screenflow Review: a Screencasting Power Tool

The online video I have on my site is a major selling point. To put things in perspective: 83% of the people who visit my site watch the video. My product is a bit difficult to explain in words and very easy to explain visually, thus, a good video is a necessity for me.

The purpose of this article is to save you time: if you need to create a professional screencast on your Mac, you want to go with Screenflow. Yes, it is not free. It is priced at $99. You can get free tools for capturing your screen actions. However the difference in functionality is HUGE. If your needs are a little above basic you will end up going down the same road as I did. Besides, and that's just my personal opinion, Screenflow is one of the most fun applications I've used.

For me, the main challenge when doing a screencast was to keep a good resolution in the tiny video. You want the movie to be small enough, so it will play well over the internet. On the other hand, you people to be able to understand what is going on. To be able to read text. For that, you will have to do zooming and panning. Otherwise, your screen just won't fit. Start from a global picture of the application, then zoom to a specific part. This makes it easy to read and focuses your viewer.

That's exactly where all other programs fail. I tried SnapzPro X first. You can either set a fixed area which is captured or have the area track your mouse. The tracking feature is completely distracting and unusable. Once I drill down to the area, I want my viewer to focus on what I'm doing and not on the movements of the screen. The full area capture was useless for me: I couldn't capture the full screen, that was just too big.

That is where Screenflow shines: you don't need to decide. Just click record and start working. The real power is later when it comes to editing your video. All other tools I've tried are focused on capturing the video. Screenflow has an extensive array of editing tools for polishing your work. Moreover, I spent much more time in the editor than in recording my screencast. You could go with a standard movie editing software, like iMovie, but Screenflow tools are just focused on your specific needs. You will never get the same quality results.

The editor looks a bit like iMovie, showing you the movie timeline and provides all kinds of editing tools. Here are the tools I found to most useful:

Screenflow

  • Zooming and panning with smooth transitions: this is by far the most useful tool of all.
  • Highlighting the area around the mouse pointer to draw the user attention or completely hide it when you want it out of the way.
  • Show the keys you type on the screen.
  • The ability to embed other media - I made an intro slide in Keynote, recorded the voice over with Garage Band and integrated everything into one package. It is also very easy to do a few "takes" and smoothly combine them to a single movie.
  • Very smooth transitions between sections including transparencies which looks very professional.

I think there are some features missing: it could use a text annotation tool or the ability to highlight or outline an arbitrary area. You can always do that by preparing your text or outline shape in an external paint program and importing the media to Screenflow, so it's not a deal breaker. It would be an important addition in future versions.

You can see my final result on my site. I already gave you my bottom line: if you're doing screencasting on a Mac, this piece of software is just a must have. It's powerful yet easy and fun to use. Just the reasons we got our Macs in the first place.

Nov 15, 2008

A problem with two very different solutions

For some reason, I came across too many articles lately dealing with Windows boot time and improving it either by hardware or by software.

You know, I'm usually not dragged into the holy war of which OS is better, but the current uptime (time since last boot) of my MacBook Pro is 22 days and that's not unusual. I boot it from two main reasons: OS updates which require a restart and for starting my machine in Windows mode via Bootcamp. I used to do that just to play some games, for other purposes VMWare Fusion is a great solution. I don't do that nowadays, mostly because I don't have time for that and also because I finally upgraded my home Windows machine to an acceptable level.

For me, it's not uncommon to run a month without a restart. I put my laptop to sleep, wake it up in the morning and start working after a few seconds. BTW, boot time is seriously quick on my laptop... but I don't really recall... :-)

So there you have it: two very different solutions to the same problem. Apple makes it unnecessary to boot your machine and Microsoft... well, third parties are providing solutions to problems created by Microsoft in the first place. 

PS. Just for the record, I load tons of extensions at startup. As evidence, I give you my menu-bar.

Menubar

Oct 17, 2008

Don't you get it? The Apple laptops just got a docking station

Like many other Mac fanboys around the world I followed the introduction of the new MacBooks and MacBook Pros this week. I also followed the reactions. Many people are complaining about the lack of firewire in the MacBook, the glossy screens and the list goes on. Yet, it seems that all major blogs are missing one crucial detail: Apple just introduced a docking station for its' new laptops.

The last time we've seen an Apple docking station, AFAIK, is the PowerBook Duo. Its would fold and slide into the Duo Dock. There were speculations that we will see an iMac like docking station. In this weeks' announcement we got a new player: the LED Cinema Display. It's not a docking station. Yet, it comes with one cable which easily connects to the laptop video, power and USB ports. It gives you external speakers, iSight camera and a USB hub. This makes it the only connection you will need. You arrive at your desk, put your laptop on the table, plug the 3 connectors and you're set. It's on one side, it's in one neat cable. It's a beauty.

Laptop-stand You're probably saying - "that's not a docking station". And, you're right. It's not. I used to have a ThinkPad before I had a MacBook Pro. I had a docking station. It was very easy to connect and disconnect the laptop, but it had a major disadvantage: it was too low on the table so I couldn't comfortably use both monitors (you already have a second monitor so why not put it to good use). For that, you will need some elevation and you'll need some space to work under your laptop. Check out the snapshot of my setup. My laptop stand is custom built, BTW.

The new Apple docking philosophy is cool: arrange your own workspace the way you like it and dock your machine with one cable. It's comfortable yet flexible. It's such a small invention which makes a huge difference. It's truly remarkable. 

One final note - I suggest watching the video on the construction of the new MacBook. It's a cool method, but that's not why I recommend it. In the short video you'll see Jony Ive, SVP of Design talking about the MacBook. I don't remember the last time I've seen somebody who talks so passionately about a product. I was moved. I almost cried at the end :-). It's very emotional.

Jun 27, 2008

OmniFocus as a Development Management System

I'm developing software and most of the time I'm working by myself. This does not mean that I don't need to organize my work. As we all know, setting goals and staying focused is crucial. That is a challenge for me - I'm usually bursting with ideas for features and enhancements. I need to prioritize and keep tabs on what I'm doing. Still, I don't want to lose any good ideas for the future.

This is where OmniFocus comes to the rescue. OmniFocus, is, IMHO, the best task management software I've used. It is Mac only and it is based on the well known Getting Things Done method, aka GTD. I'm not a strict GTD follower, yet, I still get everything I need from OmniFocus. In this post, I'll show you how to turn OmniFocus into a development management system for tracking development tasks and bugs. For teams of developers, it cannot replace a full blown system like Bugzilla. However, if you're like me, working in a one man team (no sharing option in OmniFocus) this could be a great solution. Before we start, I recommend reading a bit about GTD if you're not familiar with its' basic concepts.

Overview
Here's an example of my "Planning View"
Planning View
My system is based on the following:

  • Product versions are shown as Folders (for grouping projects)
  • Each version will have the following projects:
    • Active Projects - Bugs and Enhancements
    • On Hold Projects - Waiting tasks - organized into 3 projects according to priority
    • On Hold Task List - Ideas for the future
    • Complete Task List - I drop finished tasks here to clear the clutter
  • I have contexts according to the product modules:
    • Main Context is called 'Dev' - to distinguish from my personal tasks
    • Under 'Dev' I have a hierarchy of modules like Front End and Back End, under Front End I'll have all the flows, etc.
  • Tasks usually have tags: when entering a task, I'll usually start with a tag, like [bug], [check], [idea], etc. This helps categorizing tasks later, but not a necessity.

Entering Tasks
I usually use the Quick Entry window to enter new tasks. The great thing about it is that I can invoke at any given time, jot down an idea, bug or just something that I need to check later, and immediately get it out of my head. I usually add a task note which contains as many details as I think I'll need to understand my original idea. I also enter a context (see hereunder), but not a project - so it will remain in my inbox for review.

Entry Window

If you want to include screen shots, you can just add it as a note to the task. I find that Skitch is the perfect companion for that, since it provides simple tools for easy annotations. You don't need to save the file, either, you can just drag it from Skitch to your OmniFocus item.

Working
I use either the Planning view or the Context View for that. I find the Planning View more natural for that. At the early days of the version you can decide to focus on Enhancements and proceed to bug fixes. That's why I find the separation to projects helpful. If I have a of lower priority, which I'm not interested in working on, I just push it to one of the Waiting projects according to its' priority.

When fixing bugs, the separation to Enhancements and Bugs becomes even more helpful as I usually have the tendency to get carried away and work on enhancements instead of fixing bugs. I have one super-task inside the Bugs project which I call "Can't Reproduce". Here I drop bug that I can't reproduce for some reason. You can also have a separate task list for that.

Contexts
The organization for contexts is critical here. When entering the context for a task I try to find the one that best fits. However, if I have a task for fixing something across the system, it will have a more general context, maybe even the top 'Dev' context.

One of the major benefits of this system is the ability to work by context. Clearly, if you have a large system, you cannot keep it all "in your head". This means that, when you're starting to work on some module, weather it is on an enhancement or a bug fix, you're going to spend some time to reacquaint yourself with the code.

When working by context, you can group tasks dealing with the same module and perform them together. Conceptually, it's the basic reason for having contexts like "@home" or "@supermarket" in GTD. You want to gather all the tasks which are relevant to your current context. That's exactly why module is the same: since I'm here, let's be productive and do everything which is in the vicinity, which is in the same context.

Context View

Review
From this point forward, it's basic GTD stuff. I have a daily review of my current tasks and I set up goals in terms of due dates. I have weekly reviews for reviewing all (hopefully) my tasks, promoting, demoting and eliminating the tasks no longer relevant.

Conclusion
I presented a way for turning OmniFocus into an effective development management system. What I like the most about this system:

  • The ability to quickly get things off my mind, knowing they won't be lost.
  • Gathering work by modules, i.e. contexts.
  • The outlining ability - breaking tasks into smaller and smaller sub-tasks. I think this is the main selling point of OmniFocus specially.

Hope this works for you, too. Good luck.

About nWire

  • nWire Logo
    Browse & visualize all code association in one extremely powerful view, quick search for methods, fields and more. Boost your coding productivity in Eclipse™.
    Watch a 4 minute demo that will change the way you look at your code.
    Visit nwiresoftware.com

Twitter Updates

    follow me on Twitter
    My Photo

    My Other Accounts

    Delicious Digg Facebook FriendFeed Google Talk LinkedIn Reddit Twitter

    AddThis Social Bookmark Button
    Blog powered by TypePad
    Member since 05/2007