TweetFollow Us on Twitter

Jul 97 - Getting Started

Volume Number: 13 (1997)
Issue Number: 7
Column Tag: Getting Started

Getting to know NEXTSTEP

by Dave Mark, ©1997, All Rights Reserved

Do you remember the very first time you sat down at a Macintosh? For me, it was almost a religious experience. I instantly connected to the interface, to the elegance of the Mac look-and-feel. Recently, I've had the opportunity to explore some of the other major operating systems out there, including, most recently, NEXTSTEP. I must say I was both surprised and impressed.

Why spend time with NEXTSTEP? As you know, Apple bought NeXT with the intention of basing their next OS, Rhapsody, on the NEXTSTEP technology. By the time you read this, Apple should be putting the finishing touches on a preliminary release of Rhapsody. Till then, NEXTSTEP is the closest thing I have to Rhapsody. Also, I think it is worthwhile exploring the roots of our new OS, to get a sense of the logic behind some of the Rhapsody design decisions.

NEXTSTEP is both nice looking and easy to use. Though I did have trouble installing the developer's release on my PC, once it was up and running I found NEXTSTEP to be solid and a joy to use. This month, we'll take a first look at NEXTSTEP and the process of building a console Objective-C app. We'll also look at Objective-C's category mechanism, a cool way of seamlessly extending an existing class.

This month's column owes a debt of gratitude to CodeWarrior Gene Backlin. Gene wrote the book Developing NEXTSTEP Applications (ISBN# 06723-06581) and helped me come up to speed on the NEXTSTEP interface and the Project Builder and Interface Builder applications. Thanks, Gene!

And thanks also to Michael Rutman for his monthly expert tech review. As always, the mistakes are all mine...

Working with NEXTSTEP

One of the first things you'll notice when you boot up under NEXTSTEP is the "dock" that appears in the upper-right corner of your screen. My dock is shown in Figure 1. Each square in the doc represents an NEXTSTEP application. The NeXT cube at the top of the doc represents the NEXTSTEP equivalent of the Finder, called the FileViewer. Below that is the preferences application (which I've set to show the time and date). The last three squares are a terminal emulator which you can use to run your console apps, and the two programs which make up the NEXTSTEP development environment, Project Builder (the hammer) and Interface Builder (the screwdriver). We'll use the terminal emulator to build this month's apps, and move on to Project Builder and Interface Builder next month.

Figure 1. The NEXTSTEP "dock". By default, it appears in the upper right corner of the NEXTSTEP screen.

To launch an app from the dock, double-click on its square. If the app is already running, a double-click will bring it to the foreground, just like a Mac. You can tell if an app is not running by the elipsis (...) in the lower right corner of its dock square (i.e., no ellipsis means the app is running).

In general, you'll use the File Viewer to wander around your hard drive. As you can see in Figure 2, the File Viewer window is divided into three areas. The top area is for mounted volumes and aliases. The central strip shows where you are currently. In this case, we are looking at the directory /myhost/me. The bottom area shows the files and folders in the current directory. In this case, the directory /myhost/me contains 4 folders and 0 files.

Figure 2. The File Viewer window, showing the files in the default, "me" directory.

Notice the apple icon in the floppy disk in the top line? Yup. I stuck a Mac floppy in the PC floppy drive and NEXTSTEP recognized it. Very cool! That's how I was able to get my source code and screen shots (shot with the Grab application) over to my Mac. There's something nice about being able to work with a Mac floppy on my PC...

Figure 3 shows a pair of menu windows. The left window (labeled Workspace) holds the main File Viewer menu. The right window (labeled View) appeared when I clicked on the View item in the Workspace menu. Menus and submenus. Like a Mac, but different. Menu items can have command-key equivalents, but since this version of NEXTSTEP was running on my PC, they were Alt key equivalents. In general, NEXTSTEP feels like it borrowed heavily from the Mac (and why not?). If you are not sure how to do something, think about how you'd do it on a Mac. For example, Alt-c and Alt-v copy and paste, Alt-q quits, and Alt-w closes the frontmost window. Sound familiar?

Figure 3. The Workspace menu and View submenu.

NEXTSTEP allows you to remap the keyboard. By default, on an Intel box, the left Alt-Key is mapped to be a command key. There are several different configurations built in, and you can create your own.

Figure 4 shows the File Viewer with the Browser View selected. The NeXT browser is a truly nice way to navigate your file system. I hope this part of the NEXTSTEP interface makes it into Rhapsody. Note that as you descend into a directory, the path is reflected in the middle strip, while the details at each level are displayed in the browser portion at the bottom of the File Viewer window. In Figure 4, we are looking at the shapes directory, which holds the files from last month's sample program.

Figure 4. The File Viewer, with the Browser view.

Running Last Month's Example

As I brought my source code over from my Mac (where I was running CodeBuilder), I learned a few important lessons. First, try to avoid spaces in your file names. If you include a space in a file or directory name, you'll create a lot of extra work (and potential hair pulling) for yourself as you add escaped quotes to your makefiles, etc. to make sure the spaces are kept in the names. Save yourself the trouble and leave the spaces out.

I'm not sure of the details, but I've found that some odd (invisible) characters creep into my code when porting from Mac to NEXTSTEP. This could be a result of carriage return/line feeds being treated differently on the two platforms, or an artifact caused by my method of porting the files across. Regardless, if you find a line of code that looks perfect, yet behaves oddly, make sure that your files are true Unix files. If you create them in CodeWarrior or BBEdit, or on the NeXT box, this shouldn't be a problem. If you created your file on another platform (like your Mac), the mechanism you used to move the file to your NeXT box should handle the translation for you.

If all else fails, you might try translating your source file using the command:

tr '\015' '\012' < sourceFile > newFile

Another lesson learned is that different versions of OPENSTEP and NEXTSTEP look and behave quite differently from each other and from Tenon's CodeBuilder environment. For example, CodeBuilder doesn't support #import (at least not in the same way as NEXTSTEP). Under CodeBuilder, I had to use a #ifndef to avoid recursve inclusion of my header files. Moving to a genuine NEXTSTEP environment was really nice.

There are other differences as well. CodeBuilder calls gcc gcc, while under NEXTSTEP, gcc is called cc. This requires a small change in the makefiles. Also, NEXTSTEP automatically includes the Objective-C library in its standard libraries, so there is one less library to include. Here's the makefile I used when I moved Shape over to NEXTSTEP:

Shape:  Main.m Shape.m Circle.m Cylinder.m
  cc -o Shape Main.m Shape.m Circle.m Cylinder.m

Note the use of cc instead of gcc as well as the absence of the link library. Figure 5 shows the result, running in a terminal emulator window. Once we move into Project Builder and Interface Builder (next month's column) you can say goodbye to all this console business.

Figure 5. Running last month's Shape application inside the terminal emulator.

Adding Categories to Your Code

Objective-C features a mechanism known as a category that allows you to extend an existing class without modifying the .m and .h file of the original class. Why would you want to do that? The most obvious reason would be to extend a class when you don't have access to the source that defines the class. But there are other reasons to use a category to extend a class. You might want to organize your class into related subgroups. This is especially useful if you are building an extremely large class (you can take advantage of incremental compilation) or if your class is being worked on by more than one person. You might also use categories to extend a class in different ways for different applications.

To implement a category, you'll define a set of methods placing the interface in a header file and the implementation in a .m file. You can use a category to add methods to a class, but you are not allowed to use a category to add any variables to the class. A category method can override an inherited method and can get at the inherited method by sending a message to super. But a category method has no way to call a method in the original class having the same name as the category method (i.e., don't create a category method with the same name as a method in the class being extended).

An example should help make this clear. If you remember, last month's example implemented 3 classes: Shape, Circle, and Cylinder. Shape is derived from Object, Circle from Shape, and Cylinder from Circle. Without modifying the Shape, Circle, or Cylinder classes, we'll extend the Circle class and access the new methods from a Cylinder object. We'll call the category CircleMath. It will add an area and circumference method to the Circle class.

Here's the source code for CircleMath.h:

#import "Circle.h"

@interface Circle (CircleMath)
- (float)area;
- (float)circumference;
@end

Here's the source code for CircleMath.m:

#import "CircleMath.h"


@implementation Circle (CircleMath)

- (float)area

{

  return ((float)radius * (float)radius * 3.14159);
}

- (float)circumference
{
  return ((float)radius * 2.0 * 3.14159);
}

@end

Here's the new version of Main.m. We've added a #include of CircleMath.h as well as a pair of printf()s. The first printf() sends an area message to cylinder and the second printf() sends a circumference message to cylinder.

#include "Cylinder.h"
#include "CircleMath.h"

void main()
{
  id shape = [[Shape alloc] init];
  id circle = [[Circle alloc] initRadius:33];
  id cylinder = [[Cylinder alloc] initRadius:27 
height:10];

  printf( "\n[cylinder area] = %f...\n",
          [cylinder area] );
  printf( "[cylinder circumference] = %f...\n",
          [cylinder circumference] );

  [shape free];
  [circle free];
  [cylinder free];
}

Finally, here's the make file I used:

Shape:	Main.m Shape.m Circle.m CircleMath.m Cylinder.m
cc -o Shape Main.m Shape.m Circle.m CircleMath.m Cylinder.m

Note that I added the file CircleMath.m to both lines. That's it. Figure 6 shows the output when I ran this new version of Shape.

Figure 6. Running Shape with the CircleMath category added in.

Till Next Month...

I am very jazzed about NEXTSTEP and the promise it holds for Rhapsody. I can't wait to get to WWDC (a few weeks from now) and find out about what portions of the NEXTSTEP framework will make their way into Rhapsody. Till then, we'll continue to expore NEXTSTEP and, perhaps, make a return to Java as well. Got an opinion? Drop me a line...

 
AAPL
$467.36
Apple Inc.
+0.00
MSFT
$32.87
Microsoft Corpora
+0.00
GOOG
$885.51
Google Inc.
+0.00

MacTech Search:
Community Search:

Software Updates via MacUpdate

Acorn 4.1 - Bitmap image editor. (Demo)
Acorn is a new image editor built with one goal in mind - simplicity. Fast, easy, and fluid, Acorn provides the options you'll need without any overhead. Acorn feels right, and won't drain your bank... Read more
Mellel 3.2.3 - Powerful word processor w...
Mellel is the leading word processor for OS X, and has been widely considered the industry standard since its inception. Mellel focuses on writers and scholars for technical writing and multilingual... Read more
Iridient Developer 2.2 - Powerful image...
Iridient Developer (was RAW Developer) is a powerful image conversion application designed specifically for OS X. Iridient Developer gives advanced photographers total control over every aspect of... Read more
Delicious Library 3.1.2 - Import, browse...
Delicious Library allows you to import, browse, and share all your books, movies, music, and video games with Delicious Library. Run your very own library from your home or office using our... Read more
Epson Printer Drivers for OS X 2.15 - Fo...
Epson Printer Drivers includes the latest printing and scanning software for OS X 10.6, 10.7, and 10.8. Click here for a list of supported Epson printers and scanners.OS X 10.6 or laterDownload Now Read more
Freeway Pro 6.1.0 - Drag-and-drop Web de...
Freeway Pro lets you build websites with speed and precision... without writing a line of code! With it's user-oriented drag-and-drop interface, Freeway Pro helps you piece together the website of... Read more
Transmission 2.82 - Popular BitTorrent c...
Transmission is a fast, easy and free multi-platform BitTorrent client. Transmission sets initial preferences so things "Just Work", while advanced features like watch directories, bad peer blocking... Read more
Google Earth Web Plug-in 7.1.1.1888 - Em...
Google Earth Plug-in and its JavaScript API let you embed Google Earth, a true 3D digital globe, into your Web pages. Using the API you can draw markers and lines, drape images over the terrain, add... Read more
Google Earth 7.1.1.1888 - View and contr...
Google Earth gives you a wealth of imagery and geographic information. Explore destinations like Maui and Paris, or browse content from Wikipedia, National Geographic, and more. Google Earth... Read more
SMARTReporter 3.1.1 - Hard drive pre-fai...
SMARTReporter is an application that can warn you of some hard disk drive failures before they actually happen! It does so by periodically polling the S.M.A.R.T. status of your hard disk drive. S.M.... Read more

Strategy & Tactics: World War II Upd...
Strategy & Tactics: World War II Update Adds Two New Scenarios Posted by Andrew Stevens on August 12th, 2013 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Expenses Planner Review
Expenses Planner Review By Angela LaFollette on August 12th, 2013 Our Rating: :: PLAIN AND SIMPLEUniversal App - Designed for iPhone and iPad Expenses Planner keeps track of future bills through due date reminders, and it also... | Read more »
Kinesis: Strategy in Motion Brings An Ad...
Kinesis: Strategy in Motion Brings An Adaptation Of The Classic Strategic Board Game To iOS Posted by Andrew Stevens on August 12th, 2013 [ | Read more »
Z-Man Games Creates New Studio, Will Bri...
Z-Man Games Creates New Studio, Will Bring A Digital Version of Pandemic! | Read more »
Minutely Review
Minutely Review By Jennifer Allen on August 12th, 2013 Our Rating: :: CROWDSOURCING WEATHERiPhone App - Designed for the iPhone, compatible with the iPad Work together to track proper weather conditions no matter what area of the... | Read more »
10tons Discuss Publishing Fantasy Hack n...
Recently announced, Trouserheart looks like quite the quirky, DeathSpank-style fantasy action game. Notably, it’s a game that is being published by established Finnish games studio, 10tons and developed by similarly established and Finnish firm,... | Read more »
Boat Watch Lets You Track Ships From Por...
Boat Watch Lets You Track Ships From Port To Port Posted by Andrew Stevens on August 12th, 2013 [ permalink ] Universal App - Designed for iPhone and iPad | Read more »
Expenses Review
Expenses Review By Ruairi O'Gallchoir on August 12th, 2013 Our Rating: :: STUNNINGiPhone App - Designed for the iPhone, compatible with the iPad Although focussing primarily on expenses, Expenses still manages to make tracking... | Read more »
teggle is Gameplay Made Simple, has Play...
teggle is Gameplay Made Simple, has Players Swiping for High Scores Posted by Andrew Stevens on August 12th, 2013 [ permalink ] | Read more »
How To: Manage iCloud Settings
iCloud, much like life, is a scary and often unknowable thing that doesn’t always work the way it should. But much like life, if you know the little things and tweaks, you can make it work much better for you. I think that’s how life works, anyway.... | Read more »

Price Scanner via MacPrices.net

13″ 2.5GHz MacBook Pro on sale for $150 off M...
B&H Photo has the 13″ 2.5GHz MacBook Pro on sale for $1049.95 including free shipping. Their price is $150 off MSRP plus NY sales tax only. B&H will include free copies of Parallels Desktop... Read more
iPod touch (refurbished) available for up to...
The Apple Store is now offering a full line of Apple Certified Refurbished 2012 iPod touches for up to $70 off MSRP. Apple’s one-year warranty is included with each model, and shipping is free: -... Read more
27″ Apple Display (refurbished) available for...
The Apple Store has Apple Certified Refurbished 27″ Thunderbolt Displays available for $799 including free shipping. That’s $200 off the cost of new models. Read more
Apple TV (refurbished) now available for only...
The Apple Store has Apple Certified Refurbished 2012 Apple TVs now available for $75 including free shipping. That’s $24 off the cost of new models. Apple’s one-year warranty is standard. Read more
AnandTech Reviews 2013 MacBook Air (11-inch)...
AnandTech is never the first out with Apple new product reviews, but I’m always interested in reading their detailed, in-depth analyses of Macs and iDevices. AnandTech’s Vivek Gowri bought and tried... Read more
iPad, Tab, Nexus, Surface, And Kindle Fire: W...
VentureBeat’s John Koetsier says: The iPad may have lost the tablet wars to an army of Android tabs, but its still first in peoples hearts. Second place, however, belongs to a somewhat unlikely... Read more
Should You Buy An iPad mini Or An iPad 4?
Macworld UK’s David Price addresses the conundrum of which iPAd to buy? Apple iPad 4, iPad 2, iPad mini? Or hold out for the iPad mini 2 or the iPad 5? Price notes that potential Apple iPad... Read more
iDraw 2.3 A More Economical Alternative To Ad...
If you’re a working graphics pro, you can probably justify paying the stiff monthly rental fee to use Adobe’s Creative Cloud, including the paradigm-setting vector drawing app. Adobe Illustrator. If... Read more
New Documentary By Director Werner Herzog Sho...
Injuring or even killing someone because you were texting while driving is a life-changing experience. There are countless stories of people who took their eyes off the road for a second and ended up... Read more
AppleCare Protection Plans on sale for up to...
B&H Photo has 3-Year AppleCare Warranties on sale for up to $105 off MSRP including free shipping plus NY sales tax only: - Mac Laptops 15″ and Above: $244 $105 off MSRP - Mac Laptops 13″ and... Read more

Jobs Board

Sales Representative - *Apple* Honda - Appl...
APPLE HONDA AUTOMOTIVE CAREER FAIR! NOW HIRING AUTO SALES REPS, AUTO SERVICE BDC REPS & AUTOMOTIVE BILLER! NO EXPERIENCE NEEDED! Apple Honda is offering YOU a Read more
*Apple* Developer Support Advisor - Portugue...
Changing the world is all in a day's work at Apple . If you love innovation, here's your chance to make a career of it. You'll work hard. But the job comes with more than Read more
RBB - *Apple* OS X Platform Engineer - Barc...
RBB - Apple OS X Platform Engineer Ref 63198 Country USA…protected by law. Main Function | The engineering of Apple OS X based solutions, in line with customer and Read more
RBB - Core Software Engineer - Mac Platform (...
RBB - Core Software Engineer - Mac Platform ( Apple OS X) Ref 63199 Country USA City Dallas Business Area Global Technology Contract Type Permanent Estimated publish end Read more
*Apple* Desktop Analyst - Infinity Consultin...
Job Title: Apple Desktop Analyst Location: Yonkers, NY Job Type: Contract to hire Ref No: 13-02843 Date: 2013-07-30 Find other jobs in Yonkers Desktop Analyst The Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.