I’ve been working on a Mac app lately, and while some things are similar to iOS, something are definitely different. One thing that is different are modal windows and run loops.
Apple announced the dates for this year’s WWDC, and once again a lottery is being used to decide who gets to buy a ticket. I have no interesting is attending WWDC other than to attend the labs since I do have questions I would love to ask an Apple engineer. But it’s not worth spending $1599 on a ticket just for that.
I started organizing developer related meetups in 2001 starting with a weekly happy hour for dev friends and co-workers. Over the years I ended up organizing different types of events, from monthly meetings that included speakers to parties and happy hours to annual snowboarding trips. I even started NSHappyHour for Mac and iOS developers, which is still going on each month in Salem, MA.
Brent Simmons talks about for-in loops in a recent post. In it he says:
A good friend of mine, who just bought an iMac, asked what Mac software I use regularly and recommend. Instead of emailing a reply to him, I decided to post my list of recommended software here for all to see.
<ul>
<li>VMware Fusion - Although I spend less time in Windows these days, I still have to use it for various development projects. So when I need to use Windows, I rely on VMware Fusion, which allows me to run an instance of Windows from within OS X.</li>
<li>Mail.app - This is the email program that comes with OS X. I use it to manage all my emails.</li>
<li>iCal - This also comes with OS X and I use it daily.</li>
<li>Spanning Sync - I used this gem to synch my iCal calendars to Google calendars. I currently synch 5 different calendars, a birthday calendar that I share with my wife, my personal calendar, my wife’s calendar, a calendar for trips, and my work calendar.</li>
<li>YAI (You Are Invited) - This is a Mail.app plug-in that translates and transfers calendar invites from Outlook, Google, and others to iCal.</li>
<li>Address Book - Another piece of software that comes with OS X.</li>
<li>TextMate - Damn fine text editor.</li>
<li>Evernote - For tracking various notes.</li>
<li>Open Office - For word processing, spreadsheet, etc. I’m using the beta for version 3.0, which support the Aqua interface and does not require X11.</li>
<li>Adium - My IM client of choice. Adium supports different IM services including Messenger, Yahoo!, AIM, and Google Talk.</li>
<li>iPhoto - From the iLife suite. I store all my photos in iPhoto libraries.</li>
<li>Aperture - While I store all my master images in iPhoto, I do all my editing, rating, etc in Aperture.</li>
<li>iMoive - From the iLife suite. iMovie makes publishing to YouTube a snap.</li>
<li>iDVD - From the iLife suite. Easy way to record movies for family members who can’t view my movies online.</li>
<li>GarageBand - From the iLife suite. I don’t use this much. Typically I only use it to lay down background sound tracks to movies I create.</li>
<li>VLC - For view various media files.</li>
<li>Unison - For reading newsgroups.</li>
<li>NetNewsWire - For reading RSS feeds.</li>
<li>SuperDuper! - For making back ups of my MBP.</li>
<li>Skitch - For capturing screen shots and sharing images with others.</li>
<li>FireFox - Safari is nice, but I prefer FireFox. I use it the majority of the time, and Safari only once in a while.</li>
<li>CoRD - Enables me to remote desktop into my various Windows servers.</li>
</ul>That’s my list of Mac software that I use regularly.
I’ve been a Mac user for a little more than 6 months now, and while I’m still writing software for the Windows platform, I’m toying with the idea of targeting OS X for an upcoming product. The use of version control software is part of the software methodology used at White Peak Software, and the version control software I used is CVS (Concurrent Versioning System).
Why CVS instead of Subversion? Simple. I have been using CVS since early 2000. It works for me and I see no reason for moving to Subversion. If I were starting from scratch I would most likely select Subversion for versioning control, but that’s a different story for a different blog post. This blog post is about my review of the various CVS clients available for Mac OS X.
TortoiseCVS is the CVS client I use on Windows and is by far, in my opinion, the best Windows CVS client out there. This of course is what I used as a baseline for finding a CVS client for the Mac. The CVS client I use needs to be as good as, or close to, TortoiseCVS. My preference for a CVS client for the Mac would be one that provides a Finder like user interface and uses right-click popup menus to interact with the CVS repository. That’s what I went searching for and here is what I found:
Xcode
Xcode from Apple has an SCM repository feature that works with CVS, Subversion, and Perforce. I like the approach used in Xcode but I wasn’t able to get it working with my CVS repositories. The first problem I encountered was the lack of sserver support. The workaround for this is to use CVSNT instead of CVS, which comes installed by default on OS X. Unfortunately Xcode has a problem with sending the password to CVSNT and since CVS doesn’t support sserver Xcode was quickly off my list of CVS clients to consider.
For grins I decided to enable pserver on one of my CVS repositories to test Xcode with CVS. Unfortunately I ran into more problems. For starters, there is no way (that I can find) for specifying a module. Secondly, when I was finally able to get Xcode to checkout a complete repository it would crash Xcode. I was testing with a rather large repository and the crash happened after about 20 minutes of download time. I tried this 3 times and the crash happened all 3 times. So even if Xcode did work with CVSNT and I was able to use sserver, I still could not use Xcode as my CVS client.
MacCvsX
The next CVS client I tried was MacCvsX (version 3.3 beta 2). This client has no problems accessing my CVS repositories but I found the UI to be a bit cumbersome. Also, I didn’t like the fact that when I wanted to add lots of new files to the repository I had to select each and every file individually. There is no “Add Content” feature like that found in TortoiseCVS. While I can do everything I need to using MacCvsX, I found it UI to be inefficient. Thus my search for a CVS client for Mac OS X continued.
MacCVS Pro
I looked at MacCVS Pro next, but I never downloaded it. The revision history shows the last update to be March 27, 2000. That’s nearly 8 years without an update. I doubt it will run on my Intel-based MacBook Pro so I didn’t bother to download it.
After more searching I discovered that the MacCVS Pro website at maccvs.org is out of date and no longer maintained, but the project lives on at SourceForge.net. The up-to-date MacCVS Pro can be found at http://sourceforge.net/projects/maccvspro/. The latest update at the time of this writing is January 14, 2007. Ah, much better. I did download it but I never ran it. According to the release notes in the readme file the latest build of MacCVS Pro “will only run on PPC machines (and Intel machines via Rosetta).” And the readme goes on to say “This is likely the last version that will be built using CodeWarrior, since CodeWarrior is no longer commercially available.” So MacCVS Pro is not the CVS client for me.
MacCVSClient
The next CVS client I looked at was MacCVSClient version 1.10. Now this product is more to my liking especially after looking at the other options. It works well with my CVS repositories and I like the concept of opening a sandbox to get a hierarchical view of the files. I also really liked how the hierarchical view automatically refreshed to reflect the most recent changes to the sandbox area and files within the sandbox. What I didn’t like was the diff viewer. While usable it wasn’t what I have become accustom to. I prefer the split window approach when viewing differences between files. Still, MacCVSClient is an excellent choice for those looking for a free CVS client for the Mac.
SmartCVS
My search to find the ideal CVS client for Mac OS X lead me to SmartCVS from Syntevo. SmartCVS as a very clean, modern looking user interface. It provides different views of the sandbox. It allows me to easily checkout specific modules instead of the complete repository. As a matter of fact, SmartCVS has a project manager that allows me to save the settings for a particular module. I found this feature to be really cool and handy. And even though it does not have the “Add Contents” feature found in TortoiseCVS, SmartCVS does make it easy to add large sets of files to a repository even when the files are contained within subdirectories.
SmartCVS comes in two favors, Foundation and Professional. Foundation is free but it does not include all the features found in the Professional version (click here for the features comparison chart). The Professional version is affordable costing only $79 USD for a single user license and discounts for multi-user licenses.
My only complaint with SmartCVS at the moment is that Syntevo needs to improve its SEO. I didn’t find SmartCVS in my initial searches and had I not spent a few nights in a row looking for CVS clients I probably would have never found it.
Conclusion
In my opinion and based on my needs, SmartCVS is the best CVS client available for the Mac. It lacks some features that I have come to expect with TortoiseCVS such as the ability to use the diff and merge tools of my choosing, but it definitely has unique features that I like such as the Project Manager. So if you are looking for a good CVS client for the Mac, give SmartCVS a test drive.
\[Update\] Turns out SmartCVS does allow users to specify external file diff and merge tools. The options are found under Preferences.
I have been a Mac OS X users for 6 months now and I love it. It is doubtful I will ever return to a Windows only machine so I thought it fitting to list the OS X software I use regularly.<ul>
<li>Mail.app, which comes with OS X, is a powerful email program that allows me to manage the many, many mail messages I receive daily.</li>
<li>iCal is another handy program that comes with OS X. iCal allows me to manage multiple calendars.</li>
<li>Spanning Sync synchronizes my iCal calendars with Google Calendars.</li>
<li>Address Book, also free with OS X, is a nice address book manager.</li>
<li>Fusion by VMware is the one piece of software that convinced me to try OS X. While I love OS X I still must use Windows on a daily basis. Fusions allows me to run Windows hosted as a virtual machine within OS X.</li>
<li>Firefox is my preferred web browser. Safari is nice and I use it from time to time. But Firefox is the browser I use most often.</li>
<li>Adium is a friendly chat program supporting AOL, Yahoo, Messenger, Google Talk, and who knows what else. I like iChat, which comes with OS X, but I don’t use it often due to its lacking support for IM services such as Messenger.</li>
<li>iPhoto is my favorite application in the iLife suite. I enjoy taking pictures and I currently use iPhoto to manage all my digital pictures, a collection that is quickly approaching 7,000 pictures.</li>
<li>iLife ‘08 is another reason I decided to switch to the Mac. Making movies, burning DVDs, and managing my digital photos was never this easy in the Windows world.</li>
<li>CoRD is a remote desktop client. I use it often to RDP into other Windows machines on my network.</li>
<li>VLC is a freeware media player.</li>
<li>Unison is a nice newsgroup reader. I prefer the user interface from Agent but it is not available for OS X.</li>
<li>Vienna is an open source RSS feed reader.</li>
<li>SuperDuper is my preferred backup software. Easy to use, and powerful enough to make the types of backups I want.</li>
</ul>
I love my MacBook Pro. It’s an awesome machine and OS X is a great operating system. However, I have encountered 2 problems when dealing with my Windows-base network. First problem is accessing Windows 2003 file shares and the other problem is resolving machine names on the local network.
I still haven’t solved the second problem but today I came across the solution for the first. This blog posting by Drew McLellan gives the step by step instructions for accessing Windows 2003 file shares from Mac OS X. Thanks Drew!
After resolving the Windows Server 2003 file share access problem I turned my attention to fixing the DNS issue I’m having. I’m able to ping the IP address of machines on my Local Area Network but I’m not able to resolve the machine names. I have a local DNS running on Windows Server 2003 but for some odd reason OS X is not using it to resolve names. So I decided to use a stop-gap approach for the time being.
I modified the /etc/hosts file to include the address of the machines with a static IP address. After all, these are the only machines I need access to from OS X. Here are the steps I followed:<ul>
<li>Sign in as an administrator (or an account belonging to the sudousers group)</li>
<li>Launch a terminal shell (Applications > Utilities > Terminal if you are using Finder or type terminal in Spotlight)</li>
<li>Run the command sudo vi /etc/hosts</li>
<li>Scroll to the end of the file</li>
<li>Type i to enter insert mode</li>
<li>Press the enter key to start a new line (my vi skills are weak as it has been years since I have used it - there is probably a better way to append to the end of a file)</li>
<li>Enter the IP address, press the tab key, then enter the name machine</li>
<li>Press the esc key to get out of insert mode</li>
<li>Press :wq to save the changes and quit vi</li>
</ul>That’s is. The machine name will now resolve to the IP.
Things are really busy for me right now. I’ve just started two separate customer projects, sales of Killink CSV and SMTP Diagnostics are climbing, and I’ve been doing a lot of travel. But one thing has me really excited. I ordered a MacBook Pro and it’s expected to arrive in a couple of days.
CNet news is reporting that Apple has announced Boot Camp, a new software package that makes it possible to run Microsoft Windows on the new Intel-based Macs. How awesome is that! It’s one step closer to making me want to buy a Mac. Now what would be really awesome and close the deal for me is to have “Devco” create a Delphi compiler for the Mac OS and make it easy for me to port my VCL applications to Mac.