|
4-4-02
Software Distribution by
Erick Tejkowsi
So you've built the perfect utility, game, or widget using REALbasic and you want to unleash it on some victims.
What do you do next? Today we begin a short multi-week series about the process of releasing software.
We will discuss the different kinds of "wares", open source, how to protect your software, and some other goodies.
The goal behind this tutorial series is to look at the various avenues you can follow to
share your REALbasic creations with the world.
Introduction
After spending hours crafting a REALbasic masterpiece, you might find yourself wanting to share your work with
other people. Entrepreneurs as well as philanthropists will enjoy the many facets of software distribution.
Kinds of Software
How and why you will distribute your REALbasic masterpiece are the first questions you should answer when you decide it's time to release some software.
Most Mac users have a hard drive loaded with software that falls into one of these categories:
- Freeware - Free-to-use application
- Shareware - Free to pass around, but requires a (usually small) payment to "register" the software
- "Gimme something"-ware - Programmers are goofy. Sometimes they accept postcards, bumper stickers, coffee mugs, or even beer for payment to use their software.
- Open source - Some programmers like to share... not just their applications, but even the source code.
- Commercial - Some applications are sold by businesses.
Keep in mind that this list isn't comprehensive. It's simply meant to illustrate that software distribution comes in many formats.
Some questions you might consider before making a decision about software distribution:
- Are you going at this alone or with a small group of friends? If so, you might prefer one of the first four groups in the above list.
- Is your application unique, complex, or perform a useful task? If so, maybe you can make some money from it.
Commerical applications typically cost much more than shareware, but often provide more professional quality. Shareware applications, on the other hand,
can often be of very high quality, cost much less, and outperform commercial applications.
- Hobbyists might prefer the lower cost of establishing a "business" by selling software the shareware way.
- Maybe your project is a nice example of source code and you want to share it with other developers. There are numerous types of source code licenses that you can use
when releasing source code.
The fun part about this proces is that you decide. It's your software, afterall!
Do with it as you see fit.
How to Distribute Software
Once you've decided what kind of software or code you will distribute, you need to figure out how to distibute it. These days, software distribution is centered around
the internet. It allows you to offer easy accessibility, current updates, and low distribution costs. In fact, your distribution costs can range anywhere from FREE to
hundreds or even thousands of dollars. If you're interested in free, you can post software on your iDisk or one of countless other free web servers.
Don't try this, though, if you plan to make money. Many free sites have rules regarding moneymaking ventures. If you want to start selling shareware or commercial
software, a suitable web site can be had for under 100 dollars per year. Again, the choice is your's. Your costs will vary depending on a few factors:
amount of traffic, size of your web server, number of email accounts, programming features. The internet gives you a wide selection to choose from, so
you can be as choosy as you wish.
If you decide to release your software as a commercial or shreware venture, you have another factor to consider. How will you collect your loot?
Like web services, there are many solutions available for selling your product. There are services who will help you establish a web store,
accept payments for you, and even send registration codes to your customers.
Shareware developers on the Mac are fond of Kagi. Many commercial vendors are also available.
These businesses typically collect your payments and send you a monthly check minus a service fee.
Conclusion
That's it for this week. As you can see, releasing software is loaded with possibilities. There are many options from which to choose, but only you
can decide which is right for you. Next time we'll look at some source code examples you can use to "protect" your software. See you then!
4-02-02
REALbasic News
by Erick Tejkowsi
MacAppProcess Plugin
MacAppProcess Plugin v.1.0.1
- App.MacRunningUnderClassic property tells you if your app is running under Classic.
- App.MacRunningUnderMacOSX property tells you if your app is running under Mac OS X.
- Vestigial Windows support.
MacAppProcess Plugin v.1.0.1 is available here.
MovieWires 1.0d1 and MovieWorks 1.0b6
Alfred Van Hoek has some interesting QuickTime-related plugins available on his site.
Check them out!
QuickTime Soundtrack Extractor
Seth Willits has posted a new plugin of great use to RB programmers.
This small plugin has only one function,
and that is to extract soundtracks from movies.
The plugin is PPC and Carbon compatible and supports the following formats:
- AIFF
- Wave
- System 7 Sound
- MuLaw
- AVI
- Sound DesignerII
- Audio CD Track
Carbon Events plugin
In the past week, Will Cosgrove has released two updates to his popular
Carbon Events plugin. It has the following
(numerous) features and fixes:
- Added full application Service support. This includes providing and using Services from the service menu*
- Added GetAvailableScreenSize & GetScreenSize which get the screen dimensions for respecting the Dock.
- Added GetThemeIdentifier to get the current theme identifier.
- Added Standard Alert dialog support.
- Added CountDockMenuItems to return the number of menu items in the Dock menu.
- Added GetDockMenuItemText which returns the caption of a Dock menu item.
- Added constants to the example project for easier reading.
- Added IsSheetOpen property to the control portion of the plugin.
- Fixed various bugs.
- Access to a toolbar button
- Scroll wheel support
- live window resizing
- Access to the application Dock tile menu
- Standard Alert Sheet support
- Ask Save Changes & Discard Save Changes sheet support
- Put file dialog sheet support
- Quit Event notification
- Complete proxy icon support with icon dragging and window's path menu
- The ability to get any folder by type & domain
- The ability to set and get long file names
Database Tip
While working on a recent project, I ran across a little REALbasic database tip that might save you some time.
My project involved building a REALdatabase consisting of various filenames, paths, and other file related information.
When you query a database in REALbasic (and most every other SQL-compatible database), you perform the search like this:
select * from files where path='an absolutepath goes here'
This query searches for all records in the files table with the path that appears within
the single quote marks.
When used in REALbasic, you perform this action by sending the database a SQLSelect message
and REALbasic returns a database cursor. The database cursor (dbc) holds all the records
returned by the query. In pseudo-REALbasic code, it looks like this:
dbc = db.sqlselect("select * from files where path='" + file.absolutepath + "'")
So, what was the problem? I'm glad you asked! Imagine a situation where one of your file names, and consequently its path,
contains a single quote character. This has the side effect of prematurely ending the query statement that is normally enclosed
within single quotation marks. What's a RB'er to do? Look for the suspect character in your file path and if you find one, replace
it with two single quotes. This has the effect of "escaping" the character, which means that it will allow this previously "illegal"
character to be part of the query. If the character is not present, just query the database as usual.
The result looks something like this:
if instr(file.absolutepath,"'")>0 then
s = replaceall(file.absolutepath,"'","''")
s = "select * from files where path='" + s +"'"
dbc = db.sqlselect(s)
else
dbc = db.sqlselect("select * from files where path='" + file.absolutepath + "'")
end if
|