home *** CD-ROM | disk | FTP | other *** search
/ db.tidbits.com / db.tidbits.com.tar / db.tidbits.com / getbits.acgi?tbart=05043.orig < prev    next >
Text File  |  2010-09-23  |  49KB  |  812 lines

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2.         "http://www.w3.org/TR/html4/loose.dtd">
  3.  
  4. <html lang="en">
  5. <head>
  6.     <meta http-equiv="content-type" content="text/html;charset=utf-8">
  7.     <meta http-equiv="Content-Language" content="en">
  8.     <title>TidBITS : Yes, Virginia, There Is a REALbasic</title>
  9.  
  10.     <meta name="title" content="TidBITS : Yes, Virginia, There Is a REALbasic">
  11.     <meta name="description" content="TidBITS is a free email and Web publication covering the Macintosh Internet community.">
  12.     <link rel="image_src" href="/images/tblogo9.gif" />
  13.     <meta name="keywords" content="Apple, Mac, Macintosh, Mac OS, Mac OS X, newsletter, Internet, analysis, reviews, technology, news, TidBITS, TidBITS Talk, Engst">
  14.     <link rel="Help" href="http://www.tidbits.com/about/about-tidbits.html" title="About TidBITS">
  15.     <link rel="Search" href="http://www.tidbits.com/search/" title="Search All TidBITS Content">
  16.     <link rel="Author" href="http://www.tidbits.com/about/contact-info.html" title="Contact Information">
  17.     <link rel="Contents" href="tb-issues/" title="TidBITS Issue Archive">
  18.     <link rel="alternate" type="application/rss+xml" href="http://db.tidbits.com/feeds/tidbits.rss" title="TidBITS Full Text Feed">
  19.     <link rel="alternate" type="application/rss+xml" href="http://db.tidbits.com/commentfeeds/firehose.xml" title="TidBITS Full Comments Feed">
  20.  
  21.     <link rel="stylesheet" href="/tidbits_2010_001.css" type="text/css">
  22.     <LINK rel="stylesheet" type="text/css" media="print" href="/tb-new-print.css">
  23.     <script src="/javascript/tb.js" type="text/javascript"></script>
  24.     <meta name="viewport" content="width:940">
  25.     <script type='text/javascript' src='http://db.tidbits.com/ads/delivery/spcjs.php?id=2'></script>
  26.     <script src="/javascript/prototype.js" type="text/javascript"></script>
  27. <script src="/javascript/scriptaculous.js" type="text/javascript"></script>
  28. <script src="/js-global/FancyZoom.js" type="text/javascript"></script>
  29. <script src="/js-global/FancyZoomHTML.js" type="text/javascript"></script>
  30. <script type="text/javascript"  src="http://api.recaptcha.net/js/recaptcha_ajax.js"></script>
  31.  
  32. </head>
  33. <body onLoad="setupZoom()">
  34. <!-- popup query -->
  35. <div id="big_ole_background" style="display:none"> </div>
  36. <div id="tipbits_enclosure_preview" style="display:none">
  37. <div class="tearoffbox_wide_container">
  38. <div class="tearoffbox_wide_tips">
  39.  
  40. <div class="tip_display">
  41. <div class="preview">
  42. <h6><span id="p_tips_title"></span></h6>
  43. <p id="p_tips_text"></p>
  44. <p>Visit <a href="javascript:void(0)" id="p_url"><span id="p_label"></span></a></p>
  45. <p class="credit">Submitted by <span id="p_reader"></span></p>
  46. <p><input type="submit" value="Back" name="preview_tip" onClick="preview_box('ts','tipbits_enclosure_preview'); return false;"></p>
  47. </div>
  48. </div>
  49. <div class="tearoffbox_wide_bottom_tips">
  50. </div>
  51.  
  52. </div><!-- end tearoffbox_wide_tips -->
  53. </div><!-- end tearoffbox_wide_container for tips-->
  54. <!-- end tearoff box wide -->
  55. </div><!-- end enclosure -->
  56.  
  57. <div class="popup_box_with_captcha" id="ts" style="display:none">
  58.     <div id="popup_box_thanks" style="display:none" onClick="close_popup_thanks('popup_box_thanks', 'ts')"><br>Thanks for submitting your tip! All submissions are moderated by an editor before appearing online. We've reset the form so you can enter another tip. Or you can close the tip submission box.    <div class="x_close" id="thanks_upper_right"><a href="javascript:void(0)" onmousedown="close_popup_thanks('popup_box_thanks', 'ts'); return true;">Close</a></div></div>
  59.     <div class="tip_box_format">
  60.     <div id="ts_innards" onClick="close_popup_thanks('popup_box_thanks', 'ts')">
  61.         <div class="tip_box_head">TipBITS Submission</div>
  62.         <div class="tip_box_form">        
  63.                 
  64.             <div class="tbf_row" id="ts_message_box" style="display:none">
  65.                 <div class="tbf_wide"><div class="tbf_alert" id="ts_top_message"></div></div>
  66.             </div>
  67.             <div class="spacer"></div>
  68.  
  69.             <form action="foobar.cgi" method="get" name="submit_tip">
  70.  
  71.             <div class="tbf_row"><div class="tbf_wide_extra_top not_bold">Please submit only technical tips that will help other TidBITS readers better use their Macs, iPhones, and related software and hardware. All product announcements should be sent to <a href="mailto:releases@tidbits.com">releases@tidbits.com</a>.</div></div>
  72.             <div class="spacer"></div>
  73.             <div class="tbf_row">
  74.                 <div class="tbf_left">Tip title<span class="required_field">*</span></div><div class="tbf_right"><input type="text" value="" id="tip_title_id" name="tip_title" tabindex="1"></div>
  75.             </div>
  76.             <div class="spacer"></div>
  77.             <div class="tbf_row">
  78.                 <div class="tbf_left">Your tip<span class="required_field">*</span></div><div class="tbf_right"><textarea name="tip_text" rows="3" cols="40" tabindex="2"></textarea></div>
  79.             </div>
  80.             <div class="spacer"></div>
  81.             <div class="tbf_row">
  82.                 <div class="tbf_left">URL</div><div class="tbf_right"><input type="text" value="" name="tip_link_url" tabindex="3"><span class="tip_description"><br>Enter the URL to a Web page that supports your tip.</span></div>
  83.             </div>
  84.             <div class="spacer"></div>
  85.             <div class="tbf_row">
  86.                 <div class="tbf_left">Linked text</div><div class="tbf_right"><input type="text" value="" name="tip_link_label" tabindex="4"><span class="tip_description"><br>Enter the name of the page linked above.</span></div>
  87.             </div>
  88.             <div class="spacer"></div>
  89.             <div class="tbf_row">
  90.                 <div class="tbf_left">Your name<span class="required_field">*</span></div><div class="tbf_right"><input type="text" value="" name="tip_reader_name" tabindex="5"></div>
  91.             </div>
  92.             <div class="spacer"></div>
  93.             <div class="tbf_row">
  94.                 <div class="tbf_left">Your email<span class="required_field">*</span></div><div class="tbf_right"><input type="text" value="" name="tip_reader_email" tabindex="6"></div>
  95.             </div>
  96.             <div class="spacer"></div>
  97.             <div class="spacer"></div>
  98.                 <div class="tbf_wide"><span class="fine_print"><span class="required_field">* indicates required fields</span></span></div>
  99.             <div class="spacer"></div>
  100.             <div class="tbf_row">
  101.                 <div class="tbf_wide_extra_top"><span class="fine_print">To help us avoid automated posts and spam, please enter the words below.</span></div>
  102.             </div>
  103.             <div class="spacer"></div>
  104.             <div class="tbf_row">
  105.                 <div class="tbf_wide"><div id="ts_recaptcha"></div></div>
  106.             </div>
  107.             <div class="spacer"></div>
  108.             <div class="tbf_row">
  109.                 <div class="tbf_wide"><input type="submit" value="Preview Your Tip" name="preview_tip" onClick="fill_preview('tipbits_enclosure_preview', 'ts', this.form); return false;" tabindex="7"> <input type="submit" value="Send Us Your Tip!" name="submit_this_tip" onClick="handle_tip_submission('ts', '', this.form, 'tip'); return false;" tabindex="8"></div>
  110.             </div>
  111.             <div class="spacer"></div>
  112.             <div class="tbf_row">
  113.                 <div class="tbf_wide"><span class="fine_print">When you submit a tip, you give us permission to use it. Read <a href="javascript:void(0)" onClick="generic_show_hide('tip_terms')">our terms</a> for more details. All submissions are reviewed before publication.</span></div>
  114.             </div>
  115.             
  116.             <div class="tbf_row" id="tip_terms" style="display: none">
  117.                 <div class="tbf_wide"><span class="fine_print">Our terms: By submitting a tip, you agree to assign TidBITS Publishing Inc., a non-exclusive, worldwide, perpetual license to reproduce, publish, and distribute your tip in connection with the TidBITS Web site and associated products in any media. You agree that you created the content you submitted, and that you have the right to assign us this license. You give us permission to use your name, but your email address won't be publicly displayed or shared. We review all submissions before publication, and reserve the right to select which submissions we feel are appropriate for our readers and to edit those we publish.</span></div>
  118.             </div>
  119.             <div class="spacer"></div>
  120.             </form>
  121.         </div><!-- end tip_box_form -->
  122.     </div><!-- end tip box innards -->
  123.     </div><!-- end tip box format -->
  124.     
  125.     <div class="x_close" id="ts_upper_right"><a href="javascript:void(0)" onmousedown="HidePopupContent('ts', 'ts', ''); return true;">Close</a></div>
  126.     
  127. </div><!-- end tip_submit box-->
  128.  
  129. <div class="popup_box_with_captcha" id="article_reference" style="display:none"><div class="article_ref_format"><textarea style="width:350px; height:100px;" name="article_ref" id="article_ref_box"></textarea></div>    <div class="x_close" id="article_reference_upper_right"><a href="javascript:void(0)" onmousedown="HidePopupContent('article_reference', 'article_reference', ''); return true;">Close</a></div>
  130. </div>
  131.  
  132. <div class="popup_box_with_captcha" id="comm" style="display:none">
  133.     <div class="tip_box_format">
  134.     <div id="comment_thanks" style="display:none" onClick="close_popup_thanks('comment_thanks', 'comm')"><br>Thanks for submitting a comment! Please check your email for a link that, when clicked, will verify that you're a real person and cause your comment to appear immediately. <div class="x_close" id="comment_upper_right"><a href="javascript:void(0)" onmousedown="close_popup_thanks('comment_thanks', 'comm'); return true;">Close</a></div></div>
  135.     <div id="comm_innards" onClick="close_popup_thanks('comment_thanks', 'comm')">
  136.         <div class="tip_box_head" id="comm_headline">Post a Comment</div>
  137.         <div class="tip_box_form">        
  138.                 
  139.             <div class="tbf_row" id="comm_message_box" style="display:none">
  140.                 <div class="tbf_wide"><div class="tbf_alert" id="comm_top_message"></div></div>
  141.             </div>
  142.             <div class="spacer"></div>
  143.  
  144.             <form action="foobar.cgi" method="get" name="post_comment" id="post_comment">
  145.             <input type="hidden" name="comment_nest" value=''>
  146.             <input type="hidden" name="comment_id" value=''>
  147.             <input type="hidden" name="article_id" value='3722'>
  148.             <input type="hidden" name="edit" value=''>
  149.             <div class="tbf_row">
  150.                 <div class="tbf_left">In reply to</div>
  151.                 <div class="tbf_right">
  152.                     <div id="cb_quoted_row">
  153.                         <div class='cb_open_quote'>“</div>
  154.                         <div id="cb_quoted"></div>
  155.                         <div class='cb_close_quote'>”</div>
  156.                     </div>
  157.                     <div class="spacer"></div>
  158.                 </div>
  159.             </div>
  160.             <div class="spacer"></div>
  161.  
  162.             <div class="tbf_row">
  163.                 <div class="tbf_left" style="padding-top:0">Your comment</div>
  164.                 <div class="tbf_right"><textarea tabindex="1" name="cb_item_add" id="cb_item_add" rows="4" cols="50" onKeyDown="count_insert('cb_item_add','cb_char_count')"></textarea><br><div class="cb_char_count" id="cb_add_count">Remaining characters: <span id="cb_char_count">0</span></div></div>
  165.             </div>
  166.             <div class="spacer"></div>            
  167.  
  168.             <div class="tbf_row">
  169.                 <div class="tbf_left">Your name</div><div class="tbf_right" style="margin-top:8px"><input tabindex="2" type="text" value="" name="cb_add_name" id="cb_add_name" style="margin-top: -4px"></div>
  170.             </div>
  171.             <div class="spacer"></div>
  172.             
  173.             <div class="tbf_row">
  174.                 <div class="tbf_left">Your email</div><div class="tbf_right"><input tabindex="3" type="text" name="cb_add_email" id="cb_add_email"></div>
  175.             </div>
  176.             <div class="spacer"></div>
  177.             
  178.             <div class="tbf_row">
  179.                 <div class="tbf_left"> </div><div class="tbf_right"><input id="comm_post_comment" tabindex="4" type="submit" value="Post Comment" name="submit_this_comment" style="width:100px; float:right" onClick="cb_post_submit(); return false;"></div>
  180.             </div>
  181.             <div class="spacer"></div>
  182.             
  183.             <div class="tbf_row" id="comment_terms">
  184.                 <div class="tbf_wide"><span class="fine_print">Our terms: We reserve the right to edit or delete any comment, so please post thoughtfully. We use your email address <i>only</i> to send you a one-time verification message confirming that you posted this comment. We also store your address to allow you to verify using other Web browsers in the future. For more info, see our <a href="http://db.tidbits.com/privacy.html">privacy policy</a>.</span></div>
  185.             </div>
  186.             <div class="spacer"></div>
  187.  
  188.             </form>
  189.         </div><!-- end comm_form -->
  190.     </div><!-- end comm box innards -->
  191.     </div><!-- end comm box format -->
  192.     
  193.     <div class="x_close" id="comm_upper_right"><a href="javascript:void(0)" onmousedown="HidePopupContent('comm', 'comm', ''); return true;">Close</a></div>
  194.     
  195. </div><!-- end comm_submit box-->
  196.  
  197.  
  198. <!-- start mainbody -->
  199. <div id="mainbody">
  200.  
  201. <!-- start header -->
  202. <div id="header">
  203.  
  204.  
  205.  
  206.     <div id="tblogo">
  207.     <a href="/"><img src="/images/tblogo20_01.gif" alt="TidBITS: Apple News for the Rest of Us" width="177" height="84" border="0"></a>
  208.  
  209.     </div><!-- end tblogo -->
  210.  
  211.  
  212. <!-- leaderboard ad -->
  213. <div id="top_banner">
  214. <script type='text/javascript'><!--// <![CDATA[
  215.     OA_show(3);
  216. // ]]> --></script><noscript><a target='_blank' href='http://db.tidbits.com/ads/delivery/ck.php?n=TBe5f7021'><img border='0' alt='' src='http://db.tidbits.com/ads/delivery/avw.php?zoneid=3&n=TBe5f7021'></a></noscript>
  217. </div><!-- end top_banner style -->
  218. <!-- end leaderboard ad -->
  219.  
  220.  
  221. </div><!-- end header  -->
  222.  
  223.  
  224. <!-- start content_container -->
  225. <div id="content_container">
  226.  
  227.  
  228. <!-- begin leftcolumn -->
  229. <div id="leftcolumn">
  230.  
  231. <!-- begin leftnav /left navigation -->
  232. <div>
  233.     <ul class="leftnav">
  234.         <!-- start search -->
  235.         <li class="topcorner">
  236.             <form action="http://db.tidbits.com" method="POST" name="search_form"><input type="hidden" name="advanced_search" value=''><input type="text" name="search_text" size="8" maxlength="70" value="Search" onFocus="this.value=''" onBlur="if (this.value == '') { this.value = 'Search'; }"> <span style="margin: 0 5px 0 5px; vertical-align: -2px"><span style="vertical-align: -2px"><input type="image" name="submit_search" src="/images/go_search_button.gif"></span>  <img src="/images/adv_search_button.gif" title="Click for Advanced Search" onClick="var f = document.search_form; f.search_text.value =''; f.advanced_search.value = '1'; f.submit();"></span></form>
  237.         </li>
  238.     </ul>
  239. </div>
  240. <!-- end search -->
  241.  
  242. <!-- Get TidBITS box (temp) -->
  243. <div>
  244.     <ul class="leftnav">
  245.         <li class="gettb"><strong>Get TidBITS via...</strong></li>
  246.     
  247.         <li><a href="http://www.tidbits.com/list" title="Subscribe via email" class="gettb">Email <img src="/images/gettb_button_email.gif" width="12" height="12" border="0" class="nav_img" alt="Email subscription options"></a></li>
  248.         <li><a href="/feeds/tidbits.rss" title="Subscribe via RSS" class="gettb">RSS <img src="/images/feed-icon-12x12.gif" width="12" height="12" border="0" class="nav_img" alt="Subscribe via RSS"></a></li>
  249.         <li><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=276986548" title="Subscribe to the podcast" class="gettb">Podcast <img src="/images/feed-icon-12x12_podcast.gif" width="12" height="12" border="0" class="nav_img" alt="Subscribe to the postcast"></a></li>
  250.         <li><a href="http://www.twitter.com/TidBITS" title="Get Article Updates via Twitter" class="gettb">Twitter <img src="/images/feed_icon_12x12_twitter.png" width="12" height="12" border="0" class="nav_img" alt="Get Article Updates via Twitter"></a></li>
  251.         <li><a href="http://www.facebook.com/pages/TidBITS/195314925519" title="Go to the TidBITS Page at Facebook" class="gettb">Facebook <img src="/images/feed_icon_12x12_facebook.gif" width="12" height="12" border="0" class="nav_img" alt="Go to the TidBITS Page at Facebook"></a></li>
  252.     </ul>
  253. </div>
  254. <!-- end Get TidBITS box -->
  255.     
  256.     <ul class="leftnav">
  257.         <li><a href="/" class="tabhead">TidBITS Home</a></li>
  258.  
  259.         <li><a href="javascript:void(0)" title="Sections" class="tabhead" onClick="return showhide('articleslist')">Sections <span id="articleslist_triangle"><img src="/images/nav_triangle_open.gif" width="9" height="9" border="0" class="navtriangle" id="articleslist_tri_image" alt="Click to show or hide the contents of this section."></span></a></li>
  260.     
  261.     
  262.     </ul>
  263.  
  264. <div id="articleslist" style="display: none"><ul class="leftnav"><li><a href="/section/business" >Business Apps</a></li>
  265. <li><a href="/section/entertainment" >Entertainment</a></li>
  266. <li><a href="/section/links" >External Links</a></li>
  267. <li><a href="/section/home" >Home Macs</a></li>
  268. <li><a href="/section/inside" >Inside TidBITS</a></li>
  269. <li><a href="/section/iphone-ipad-ipod" >iPhone iPad iPod</a></li>
  270. <li><a href="/section/fun" >Just for Fun</a></li>
  271. <li><a href="/section/macs" >Macs & Mac OS X</a></li>
  272. <li><a href="/section/creative" >Media Creation</a></li>
  273. <li><a href="/section/net" >Networking</a></li>
  274. <li><a href="/section/opinion" >Opinion</a></li>
  275. <li><a href="/section/support" >Problem Solving</a></li>
  276. <li><a href="/section/security" >Safe Computing</a></li>
  277. <li><a href="/section/tech" >Tech News</a></li>
  278. <li><a href="/section/watchlist" >Watchlist</a></li>
  279. </ul></div>
  280.  
  281. <div>
  282. <ul class="leftnav">
  283.     <li><a href="javascript:void(0)" onClick="return showhide('stafflist')" title="Staff" class="tabhead">Staff <span id="stafflist_triangle"><img src="/images/nav_triangle_closed.gif" width="9" height="9" border="0" class="navtriangle" id="stafflist_tri_image" alt="Click to show or hide the contents of this section."></span></a></li>
  284. </ul>
  285. </div>
  286.  
  287. <div id="stafflist" style="display:block"><ul class="leftnav"><li><a href="/author/Adam+C+Engst" title="Adam Engst, Publisher">Adam Engst</a></li>
  288.     <li><a href="/author/Tonya+Engst" title="Tonya Engst, Editor in Chief">Tonya Engst</a></li>
  289.     <li><a href="/author/Jeff+Carlson" title="Jeff Carlson, Managing Editor">Jeff Carlson</a></li>
  290.     <li><a href="/author/Joe+Kissell" title="Joe Kissell, Senior Editor">Joe Kissell</a></li>
  291.     <li><a href="/author/Glenn+Fleishman" title="Glenn Fleishman, Contributing Editor">Glenn Fleishman</a></li>
  292.     <li><a href="/author/Mark+Anbinder" title="Mark Anbinder, Contributing Editor">Mark H. Anbinder</a></li>
  293.     <li><a href="/author/Matt+Neuburg" title="Matt Neuburg, Contributing Editor">Matt Neuburg</a></li>
  294.     <li><a href="/author/Rich+Mogull" title="Rich Mogull, Contributing Editor">Rich Mogull</a></li>
  295.     <li><a href="/author/Lex+Friedman" title="Lex Friedman, Staff Writer">Lex Friedman</a></li>
  296.     </ul>
  297.     </div>
  298.  
  299. <div>
  300. <ul class="leftnav">
  301.  
  302.     <li><a href="javascript:void(0)" title="Issues" class="tabhead" onClick="return showhide('issuelist')">Weekly Issues <span id="issuelist_triangle"><img src="/images/nav_triangle_closed.gif" width="9" height="9" border="0" class="navtriangle" id="issuelist_tri_image" alt="Click to show or hide the contents of this section."></span></a></li>
  303. </ul>
  304. </div>
  305.  
  306. <div id="issuelist" style="display:none"><ul class="leftnav"><li><div class="special"><form method="post" action="noaction.cgi" onsubmit="return false" id="issue_search_form" name="issue_search_form">Issue # <input type="text" onkeydown="if (event.keyCode == 13) { redirect_issue(this.form); }" id="issue_searchvalue" name="issue_number" style="width:35px; height: 10px"> <input onclick="redirect_issue(this.form)" type="image" name="submit_search" src="/images/go_search_button_blk.gif"></form></div></li><li><A HREF="/issue/447" >#447, 21 Sep 98</A></li>
  307. <li><A HREF="/issue/446" >#446, 14 Sep 98</A></li>
  308. <li><A HREF="/issue/445" >#445, 31 Aug 98</A></li>
  309. <li><A HREF="/issue/444" >#444, 24 Aug 98</A></li>
  310. <li><A HREF="/issue/443" >#443, 17 Aug 98</A></li>
  311. <li><A HREF="/issue/442" >#442, 10 Aug 98</A></li>
  312. <li><A HREF="/issue/441" >#441, 03 Aug 98</A></li>
  313. <li><A HREF="/issue/440" >#440, 27 Jul 98</A></li>
  314. <li><A HREF="/issue/439" >#439, 20 Jul 98</A></li>
  315.  
  316.  
  317. <li><a href="/backissues">Back Issues</a></li></ul></div>
  318.  
  319.  
  320. <div>
  321. <ul class="leftnav">
  322.  
  323.     <li><a href="/tidbitstalk" title="TidBITS Talk" class="tabhead">TidBITS Talk</a></li>
  324. </ul>
  325. </div>
  326.  
  327.  
  328.  
  329. <div>    
  330. <ul class="leftnav">
  331.     <li><a href="javascript:void(0)" onClick="return showhide('abouttidbits')" title="About TidBITS" class="tabhead">About TidBITS <span id="abouttidbits_triangle"><img src="/images/nav_triangle_closed.gif" width="9" height="9" border="0" class="navtriangle" id="abouttidbits_tri_image" alt="Click to show or hide the contents of this section."></span></a></li>
  332. </ul>
  333. </div>
  334.  
  335. <div id="abouttidbits" style="display:none">
  336. <ul class="leftnav"><li><a href="/about.html" title="About TidBITS">About Us</a></li><li><a href="/account.html" title="Account Help">Account Help</a></li><li><a href="/advertising.html" title="Advertise with TidBITS!">Advertise</a></li><li><a href="/contact.html" title="Contact Info">Contact</a></li><li><a href="/copyright.html" title="Copyright Terms">Copyright</a></li>
  337. </ul>
  338. </div>
  339.  
  340. <div>
  341. <ul class="leftnav">
  342. <li class="bottom"> </li>
  343. </ul>
  344. </div>
  345. <!-- end leftnav/left navigation -->
  346.  
  347. <!-- making sure nav elements hide/show before page loads --><script type="text/javascript"><!--
  348.     showhide('articleslist','show'); 
  349. // --></script>
  350.  
  351. <!-- begin sponsor_sidebox -->
  352.  
  353. <div class="sponsor_sidebox">
  354.  
  355. <ul>
  356.  
  357. <li><a href="http://www.webcrossing.com/">Web Crossing</a></li>
  358.  
  359. <li><a href="http://macte.ch/conf_tidbits">MacTech Conference</a></li>
  360.  
  361. <li><a href="http://www.tidbits.com/about/support/contributors.html">Readers Like You!</a></li>
  362.  
  363. <li><a href="http://nuance.com/dragon/mac">Nuance</a></li>
  364.  
  365. <li><a href="http://markspace.com/bits?source=tidbits">Mark/Space</a></li>
  366.  
  367. <li><a href="http://www.smithmicro.com/tidbits">Smith Micro</a></li>
  368.  
  369. <li><a href="http://www.thedatarescuecenter.com/">The Data Rescue Center</a></li>
  370.  
  371. <li><a href="http://www.usefulfruit.com/tb">Useful Fruit</a></li>
  372.  
  373. <li><a href="http://www.smilesoftware.com/">Smile</a></li>
  374.  
  375. <li><a href="http://crashplan.com/ref/tidbits.html">CrashPlan</a></li>
  376.  
  377. <li><a href="http://www.econtechnologies.com/tb">Econ Technologies</a></li>
  378.  
  379. </ul><div class='sponsor_sidebox_bottom'> </div>
  380. </div>
  381.  
  382.  
  383. <!-- end sponsor_sidebox -->
  384.  
  385.  
  386. </div> <!-- end leftcolumn div -->
  387.  
  388. <!-- end left column -->
  389.  
  390.  
  391. <!-- begin centercolumn_border -->
  392.  
  393. <div id="centercolumn_border">
  394.  
  395. <div class="center_top">Thoughtful, detailed coverage of the Mac, iPhone, and iPad, plus the best-selling <a href="http://www.takecontrolbooks.com/?pt=TB-TAGLINE" style="color:yellow">Take Control</a> ebooks.</div>
  396.  
  397. <!-- begin centercolumn -->
  398. <div id="centercolumn">
  399.  
  400.  
  401.  
  402. <!-- begin rightcolumn_container -->
  403. <div id="rightcolumn_container">
  404.  
  405. <!-- begin rightcolumn -->
  406.     <!-- rightcolumn is embedded within centercolumn so featured text wraps around it -->
  407.     <div id="rightcolumn">
  408.  
  409. <p class="top"> </p>
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420. <!-- Watchlist items -->
  421. <div class="tearoffbox_wide_container">
  422. <div class="tearoffbox_wide_watchlist">
  423. <p class="tearoffbox_wide_top_watchlist"> </p>
  424.  
  425. <h6><a href="/section/watchlist">TidBITS Watchlist</a></h6>
  426. <ul>
  427.  
  428. <LI><a href="/article/11625">Adobe Flash Player 10.1.85.3</a></LI>
  429.  
  430. <LI><a href="/article/11622">DEVONthink and DEVONnote 2.0.4</a></LI>
  431.  
  432. <LI><a href="/article/11620">Security Update 2010-006</a></LI>
  433.  
  434. <LI><a href="/article/11619">TinkerTool 4.2</a></LI>
  435.  
  436. <LI><a href="/article/11618">Mailplane 2.2</a></LI>
  437.  
  438. <LI><a href="/article/11617">Pro Applications Update 2010-02</a></LI>
  439.  
  440. <LI><a href="/article/11611">Dialectic 1.7</a></LI>
  441.  
  442. <LI><a href="/article/11604">Transmit 4.1.1</a></LI>
  443.  
  444. <LI><a href="/article/11603">MarsEdit 3.1.1</a></LI>
  445.  
  446. <LI><a href="/article/11600">Savescreenie 2.0</a></LI>
  447.  
  448. </ul>
  449.  
  450. <div class="tearoffbox_wide_bottom_watchlist"> </div>
  451.  
  452. </div><!-- end tearoffbox_wide -->
  453.  
  454. </div><!-- end tearoffbox_wide_container for watchlist items -->
  455.  
  456. <!-- begin tearoff box wide -->
  457.  
  458. <div class="tearoffbox_wide_container">
  459. <div class="tearoffbox_wide_tips">
  460.  
  461. <div class="tip_display">
  462. <div class="tips_sponsor_logo">
  463.  
  464. </div>
  465. <h6>How to Know Your iPod Model</h6>
  466. <p><p>If you have an old iPod but aren't sure exactly which model it is, check the info at the Web page linked below. You'll find lots of photos and information that will help you determine exactly which model you have.</p></p>
  467. <p>Visit <a href="http://support.apple.com/kb/HT1353">Identifying iPod Models</a></p>
  468. </div>
  469.  
  470. <div class="tearoffbox_wide_bottom_tips">
  471. <div style="padding-bottom:35px"><div class="tip_display" style="float:left"><p><br><a href="/tipbits/174">Link to this tip</a></p></div><div class="tip_display" style="float:right; width:150px">
  472.  
  473. <p class="credit">Written by<br><a href="/author/Tonya%20Engst">Tonya Engst</a></p></div></div>
  474.  
  475. </div>
  476.  
  477. <div class="tearoffbox_wide_tips_submit">
  478. <form method="post" onsubmit="return false" id="tipbits_form" name="tipbits_form" action="noaction.cgi"><p><a href="javascript:void(0)" onmousedown="ShowTipBox('ts','ts_recaptcha', 50, 'tip_title_id'); return true;">Share your own tip!</a> | <a href="javascript:void(0)" onClick="generic_show_hide('search_tipbits'); document.tipbits_form.tipbits_searchvalue.focus()">Search TipBITS</a></p>
  479. <p style="display:none" id="search_tipbits"><input type="text" onkeydown="if (event.keyCode == 13) { search_tipbits('tipbits_searchvalue'); }" id="tipbits_searchvalue" name="tipbits_searchvalue"> <a href="javascript:void(0)" onClick="search_tipbits('tipbits_searchvalue')">Search</a></p></form>
  480. </div>
  481. <div class="tearoffbox_wide_bottom_tips_submit">
  482.  
  483. </div>
  484.  
  485. </div><!-- end tearoffbox_wide_tips -->
  486. </div><!-- end tearoffbox_wide_container for tips-->
  487. <!-- end tearoff box wide -->
  488.  
  489.  
  490.  
  491. <!-- begin 300 x 250 ad -->
  492.  
  493. <div id="content_ad_square">
  494. <script type='text/javascript'><!--// <![CDATA[
  495.     OA_show(5);
  496. // ]]> --></script><noscript><a target='_blank' href='http://db.tidbits.com/ads/delivery/ck.php?n=TB7671f69'><img border='0' alt='' src='http://db.tidbits.com/ads/delivery/avw.php?zoneid=5&n=TB7671f69'></a></noscript>
  497. </div><!-- end 300 x 250 ad -->
  498.  
  499. <!-- TBTalk items -->
  500. <div class="tearoffbox_wide_container">
  501.  
  502. <div class="tearoffbox_wide_p">
  503. <p class="tearoffbox_wide_top_p"> </p>
  504.  
  505. <h5>Recent TidBITS Talk Discussions</h5>
  506. <ul>
  507.  
  508. <LI><a href="http://emperor.tidbits.com/webx?50@@.3cf95241">Alternatives to MobileMe for syncing calendars between iPad/Mac</a> (1 message)</LI>
  509.  
  510. <LI><a href="http://emperor.tidbits.com/webx?50@@.3cf94dbb">Free anti-virus for the Mac</a> (20 messages)</LI>
  511.  
  512. <LI><a href="http://emperor.tidbits.com/webx?50@@.3cf934e6">iTunes 10 syncing iPod Touch 4.1</a> (2 messages)</LI>
  513.  
  514. <LI><a href="http://emperor.tidbits.com/webx?50@@.3cf92a22">Thoughts about Ping</a> (16 messages)</LI>
  515.  
  516. </ul>
  517.  
  518. <div class="tearoffbox_wide_bottom_p"> </div>
  519.  
  520. </div><!-- end tearoffbox_wide -->
  521.  
  522. </div><!-- end tearoffbox_wide_container for TBtalk items -->
  523.  
  524. <!-- start takecontrol_ad -->
  525. <script type='text/javascript'><!--// <![CDATA[
  526.     OA_show(7);
  527. // ]]> --></script><noscript><a target='_blank' href='http://db.tidbits.com/ads/delivery/ck.php?n=TBe46d56f'><img border='0' alt='' src='http://db.tidbits.com/ads/delivery/avw.php?zoneid=7&n=TBe46d56f'></a></noscript><!-- end takecontrol_ad -->
  528.  
  529. <!-- begin tearoff box 2 -->
  530.  
  531. <div class="tearoffbox_wide_container">
  532.  
  533. <div class="tearoffbox_wide_p">
  534. <p class="tearoffbox_wide_top_p"> </p>
  535.  
  536. <h5>Related Articles</h5>
  537. <ul>
  538. <li><a href="/article/11151">The iPad: A Developer's Anti-Contrarian View</a> (05 Apr 10)</li>
  539. <li><a href="/article/6534">REALbasic 3.5 Released</a> (27 Aug 01)</li>
  540. <li><a href="/article/5508">REALbasic 2.0 Gets Real</a> (16 Aug 99)</li>
  541. <li><a href="/article/5361">REALbasic 2.0 Shipping</a> (19 Apr 99)</li>
  542. <li><a href="/article/5155">Alas, HyperCard!</a> (02 Nov 98)</li>
  543. <li><a href="/article/4075">HyperCard 2.2: The Great Becomes Greater</a> (14 Feb 94)</li>
  544. <li><a href="/article/1160">Get Your Hands on Prograph</a> (29 Jan 96)</li>
  545.  
  546. </ul>
  547.  
  548. <p class="tearoffbox_wide_bottom_p"> </p>
  549.  
  550. </div><!-- end tearoffbox_wide -->
  551. </div><!-- end tearoffbox_wide_container -->
  552.  
  553. <!-- end tearoff box 2 -->
  554.  
  555.  
  556. <!-- begin tearoff box for series -->
  557.  
  558. <div class="tearoffbox_wide_container">
  559.  
  560. <div class="tearoffbox_wide_p">
  561. <p class="tearoffbox_wide_top_p"> </p>
  562.  
  563. <h5>Other articles in the series <a href="/series/1051">REALbasic Gets Real</a></h5>
  564. <ul>
  565.  
  566. </ul>
  567.  
  568. <p class="tearoffbox_wide_bottom_p"> </p>
  569.  
  570. </div><!-- end tearoffbox_wide -->
  571. </div><!-- end tearoffbox_wide_container -->
  572.  
  573. <!-- end tearoff box -->
  574.  
  575.  
  576.  
  577.  
  578. <!-- begin tearoff box 1 -->
  579.  
  580. <div class="tearoffbox_wide_container">
  581.  
  582. <div class="tearoffbox_wide">
  583. <p class="tearoffbox_wide_top"> </p>
  584.  
  585. <h5>Published in <a href="/issue/443">TidBITS 443</a>.<br><a href="http://www.tidbits.com/list">Subscribe</a> to our weekly email edition.</h5>
  586. <ul>
  587. <li><A HREF="/article/5037">LetterRip Pro 3.0.2 Released</A></li>
  588. <li><A HREF="/article/5038">Farallon is Back!</A></li>
  589. <li><A HREF="/article/5039">Another Registry for Stolen Computers</A></li>
  590. <li><A HREF="/article/5040">New SyQuest Utilities and Layoffs</A></li>
  591. <li><A HREF="/article/5041">iMac Hoopla</A></li>
  592. <li><A HREF="/article/5042">Just StuffIt, Windows</A></li>
  593.  
  594. </ul>
  595.  
  596. <p class="tearoffbox_wide_bottom"> </p>
  597.  
  598. </div><!-- end tearoffbox_wide -->
  599. </div><!-- end tearoffbox_wide_container -->
  600.  
  601. <!-- end tearoff box 1 -->
  602.  
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609. <div id="rightcolumn_bottom">
  610.  
  611. </div>
  612.  
  613.     </div><!-- end rightcolumn -->
  614.  
  615.  
  616. </div><!-- end rightcolumn_container -->
  617.  
  618.  
  619.  
  620. <!-- featured articles -->
  621.  
  622. <div id="center_ajax_sub" class="instapaper_body">
  623.  
  624. <!-- google_ad_section_start -->
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645. <!-- issue, article, or series -->
  646.  
  647.     
  648.     
  649.     
  650.     
  651.     
  652.         
  653.     <!-- show article(s) -->
  654.     <div class="article"><a name="3722"></a>
  655.     
  656. <!-- comment initialization routine as needed -->
  657. <div class="popup_box_with_captcha" id="hc_3722" style="display: none">
  658.     <div class="tip_box_format">
  659.     <div id="hc_innards_alt_3722" style="display: none">
  660.             <div class="tbf_row">
  661.                 <div class="tbf_wide_80" id="hc_small_response_3722"></div><div class="x_close_row" id="hc_upper_right1_3722"><a href="javascript:void(0)" onmousedown="HidePopupContent('hc_3722', 'hc', '3722'); return true;">Close</a></div>
  662.  
  663.             </div>
  664.     </div>
  665.     <div id="hc_innards_3722">
  666.         <div class="tip_box_form">        
  667.             <form action="foobar.cgi" method="get" name="check_human_3722">
  668.             <div class="tbf_row">
  669.                 <div class="tbf_wide_80" id="hc_rc_3722">To help us avoid automated posts and misuse of our site, please enter the words below.</div><div class="x_close_row" id="hc_upper_right2_3722"><a href="javascript:void(0)" onmousedown="HidePopupContent('hc_3722', 'hc', '3722'); return true;">Close</a></div>
  670.  
  671.             </div>
  672.             <div class="spacer"></div>
  673.             <div class="tbf_row" id="hc_message_box_3722" style="display:none">
  674.                 <div class="tbf_wide"><div class="tbf_alert" id="hc_top_message_3722"></div></div>
  675.             </div>
  676.             <div class="spacer"></div>
  677.             <div class="tbf_row">
  678.                 <div class="tbf_wide"><div id="hc_recaptcha_3722"></div></div>
  679.             </div>
  680.             <div class="spacer"></div>
  681.             <div class="tbf_row">
  682.                 <div class="tbf_wide"><input type="submit" value="Submit" name="submit_this_tip" onClick="handle_tip_submission('hc', '3722', this.form, this.form.submit_type.value); return false;"><input name="calling_routine" type="hidden"><input type="hidden" name="getbits" value="5043"><input type="hidden" name="author_id"><input type="hidden" name="submit_type" value=""></div>
  683.             </div>
  684.             <div class="spacer"></div>
  685.             </form>
  686.         </div><!-- end tip_box_form -->
  687.     </div><!-- end hum box innards -->
  688.     </div><!-- end tip box format -->
  689. </div><!-- end tip_submit box-->
  690.  
  691.  
  692.  
  693.         
  694.         
  695.         <!-- specific article details here -->
  696.         
  697.         
  698.             
  699.         
  700.     
  701.         <article_link><script type="text/javascript">open_if_linked('')</script></article_link>
  702.         
  703.         <div class="featured_meta"><div class="meta_article">17 Aug 1998 | <a href="/article/5043?print_version=1">Print <span class="shift_up"><img src="/images/printer_icon.gif" alt="Printer-Friendly Version of This Article" border="0" width="9" height="10"></span></a></div></div>
  704.  
  705.         <H2>Yes, Virginia, There Is a REALbasic</H2>
  706.  
  707.         <p class="byline">by <a href="/author/Matt%20Neuburg">Matt Neuburg</a> <a href="javascript:void(0)" onClick="document.check_human_3722.submit_type.value='email'; document.check_human_3722.author_id.value='7'; ShowTipBox('hc_3722', 'hc_recaptcha_3722')"><span class="shift_down"><img src="/images/gettb_button_email.gif" height="12" width="12" border="0" alt="Send Email to Author"></span></a></P>
  708.  
  709.         <!-- article text -->
  710.         
  711.         <div id="article_box_3722"><P>A computer is to program. Otherwise, it just sits there, like a big empty box. Of course, we mostly use programs written by others. But sometimes you want to have that box do precisely what <EM>you</EM> tell it - because there's no program that does just what you want, to save money, or because it's just plain fun. That's why I wouldn't buy my first Mac until its characteristic interface bells and whistles came easily under my control through a software construction kit - HyperCard (see "HyperCard 2.2: The Great Becomes Greater" in <A HREF="http://www.tidbits.com/tb-issues/TidBITS-213.html">TidBITS-213</A>).</P><P><<A HREF="http://db.tidbits.com/article/04075">http://db.tidbits.com/article/04075</A>></P><P>HyperCard is unparalleled for constructing a bare bones interface rapidly. But it's showing its age and limitations. It's superb for textual storage and hyper-linkage, but less good at search and retrieval. Further, certain graphical or interface functionalities - such as color, drag & drop, or real scrollbars - are clumsy to implement, require third-party extensions, or are downright impossible. Large projects can be a pain to create and maintain. Most important, a stack runs inside HyperCard itself, so disk and RAM footprints are big, and speeds are sometimes poor: you're not writing a true compiled standalone application.</P><P>Even while editing a Mac programming magazine and dabbling with cool tools (such as Prograph - see "Get Your Hands on Prograph" in <A HREF="http://www.tidbits.com/tb-issues/TidBITS-312.html">TidBITS-312</A>), I found no magic bullet, no environment where an amateur - reasonably intelligent but with no will to manage the Toolbox or pore over Inside Macintosh - could implement a true Macintosh application with HyperCard-like convenience. Like Virginia doubting Santa Claus, I wondered if such a thing would ever exist.</P><P><<A HREF="http://db.tidbits.com/article/01160">http://db.tidbits.com/article/01160</A>></P><P><STRONG>The REAL World</STRONG> -- In 1997, a shareware product called CrossBasic began quietly making waves. It had a single author, Andrew Barry, who had been developing it in his spare time for some years (while writing such programs as the Prince of Destruction game and the debugging tool Spotlight). In October 1997, CrossBasic was picked up by FYI Software, Inc.; when the name proved to be already trademarked, two rechristenings took place - REALbasic and REAL Software.</P><P><<A HREF="http://www.realbasic.com/">http://www.realbasic.com/</A>><BR><<A HREF="http://www.wr.com.au/mars/mars/pod_home_page.html">http://www.wr.com.au/mars/mars/pod_home_ page.html</A>><BR><<A HREF="http://www.onyx-tech.com/spotlight.html">http://www.onyx-tech.com/spotlight.html</A>></P><P>Installing REALbasic is a pleasant shock: it occupies a mere 3.1 MB of your hard disk. Starting it up, you see a typical interface construction kit: a blank window and a palette of control types (text field, push button, radio button, checkbox, and so on) you can drag into it. You can also make other windows. When a control in a window is selected, a windoid lets you change its inherent properties (such as position or color). You add menus and menu items in an equally intuitive graphical way.</P><P>Already at this point you can "build" your application as a stand-alone; more likely, though, you'd test it from within the REALbasic development environment. (This environment is partially dynamic: you're generally, either running the application or editing it, but you can edit a running application somewhat.) You'll see your window, which you can drag, resize, and close in the normal way; your menus will appear at the top of the screen. If there's a text-field in the window, you can edit text there, and there are Copy, Cut, and Paste menu items that work - so does Quit. But generally your menu items and window controls have no powers because you haven't yet written any code for them.</P><P>That's done in the Code Browser, which appears when you double-click on your window. Down its left side the Code Browser lists your menu items, and your window's controls along with the system-level events they will automatically receive. Selecting a listing lets you edit its code in the Browser's main pane. You write the code in a BASIC-type language that's easy to learn.</P><P><STRONG>The REAL Object</STRONG> -- For demonstration purposes, I've posted three simple applications I wrote while learning REALbasic:</P><UL><LI>TinyText, a minimal text editor based on the REALbasic Tutorial<LI>Whack, a game where you must click each rising "mole" before it vanishes<LI>Odummo, an Othello game without "intelligence" - the computer plays correctly, but randomly (hence the name)</UL><P><<A HREF="http://www.jetlink.net/~mattn/downloads/TinyText.hqx">http://www.jetlink.net/~mattn/downloads/ TinyText.hqx</A>><BR><<A HREF="http://www.jetlink.net/~mattn/downloads/whack.hqx">http://www.jetlink.net/~mattn/downloads/ whack.hqx</A>><BR><<A HREF="http://www.jetlink.net/~mattn/downloads/Odummo.hqx">http://www.jetlink.net/~mattn/downloads/ Odummo.hqx</A>></P><P>These applications are remarkably small (except Odummo because it's a fat binary), remarkably speedy, and remarkably persuasive: TinyText edits styled text files larger than 32K; Whack animates smoothly; Odummo plays a non-trivial game and is surprisingly addictive.</P><P>But the real point is that these programs were astonishingly easy to write. TinyText took a week or so because I was reading the documentation. Whack took several days while I learned how graphics work, but ultimately required only 80 lines of code. Odummo took less than 24 hours, including eating, sleeping, and other normal activities.</P><P>That's because of REALbasic's class-based object model. Everything - a window, a button, a graphic - is an object representing some class. Any object can send a message to any other. In a class or an object, you define responses to messages, as well as internal variables maintained by each object. You can also subclass a class to specialize its behavior. Thus, object-oriented principles of messaging and encapsulation help you organize your code - and your thinking.</P><P>Whack requires little code because nearly all the code is in classes. The window contains eight moles constantly rising and vanishing; but they all instantiate just <EM>one</EM> mole class, and are activated by instantiations of just <EM>one</EM> thread class. Similarly, hits, misses, and elapsed time are maintained by three counting fields; since they behave identically, I had to create only <EM>one</EM> counting field class.</P><P>Odummo was even easier, though I feared it would be much harder. The board has 64 squares; must I maintain a complicated two-dimensional array describing it? No! Each square is an object of just <EM>one</EM> class, and the window itself <EM>is</EM> my array, so it is sufficient to teach <EM>one</EM> square what to do. A square knows whether it contains a piece, what color it is, and how to draw it, and the whole game is just a matter of a square responding when the user clicks it and sending appropriate messages to other squares.</P><P>I kept a diary of the Odummo development process, in case you're curious about the arduous life of the programmer:</P><UL><LI>6:00 PM. Draw the window.<LI>7:00 PM. Make dinner.<LI>8:00 PM. Teach a square to draw a piece inside itself.<LI>9:00 PM. Teach a square to find its neighbor in any given direction.<LI>10:00 PM. Go to bed.<LI>6:30 AM. Teach a square to ascertain whether a given direction leads, through pieces of the opposite color, to a piece of the same color. It turns out that the square can do this just by asking its neighbor two questions.<LI>7:30 AM. Teach a square to know whether it is legal for a given color to play there.<LI>8:30 AM. Go for a run.<LI>9:30 AM. Shower, dress.<LI>10:00 AM. Drive to laundromat, do wash. Go home, hang clothes on line.<LI>11:00 AM. Teach a square to reverse its color and to tell its neighbors to do the same.<LI>11:30 AM. Teach a square, when clicked, to play white there if legal (and beep otherwise).<LI>12:00 PM. Teach a square to know what color moved previously, so that it can play the other color when clicked. I can now play a game against myself.<LI>12:30 PM. Lunch.<LI>1:00 PM. Teach a square to play white when clicked, then to ask all other squares whether black can play there, and then to tell one randomly chosen square which said Yes to play black. The computer is now playing against me! Run around house screaming and waving arms wildly!!!<LI>2:00 PM. Add logic knowing when game is over, totalling score, and what to do when a player can't move.<LI>3:00 PM. Done! Nap.</UL><P><STRONG>REAL Ability</STRONG> -- Listing REALbasic's various capacities would be a Herculean task. Windows can be of all the normal types, including floating windows and windows that stay above any application. A window can contain push buttons, checkboxes, and radio buttons; editable fields with styled text (as in TinyText); canvases, which are clickable graphic regions (the Whack moles are canvases); sliders and scrollbars; list boxes; pop-up menus; and tabbed panels.</P><P>With REALbasic, you can read and write file data and resources, access the clipboard, and accept drag & drop. You can run QuickTime movies, play MIDI notes, display contextual menus, show help balloons, grow a progress bar, animate "sprites," and spawn threads. You can operate over the serial port, communicate via TCP/IP, and send and receive Apple events.</P><P>REALbasic's functionality is further extensible through pre-compiled code in various formats: compiled AppleScripts; XCMDs and XFCNs; shared libraries; and C++ plug-ins, for which a developer kit is supplied (these can also define new window control types).</P><P>The range of REALbasic-generated applications by various users - at REAL Software's FTP site, at their Hotline site (cafe.realbasic.com), on the program CD, and at users' own sites - bears astonishing witness to the program's powers. There's a batch file-typer, a Tetris-like game, a magnetic core calculator, a sunrise calculator, a spelling quiz, an address book, a random "art" generator, a chat server - even an email client.</P><P>My favorite REALbasic success story is from the July Macworld Expo. The REALbasic team had rented a badge "swiper" so their computer could store names and addresses of visitors to their booth, but the supplied software didn't work. However, the swiper was a serial device, so they quickly wrote their own software using REALbasic - and then modified it so they could read credit cards as well!</P><P><STRONG>Getting REAL</STRONG> -- It is hard to praise REALbasic sufficiently. It is reasonably priced. It is small, quick, easy to learn, and easy to use. The language and the development environment clearly result from deep, thoughtful insight into the needs and mental processes of users, encouraging rapid, improvisational development of well-behaved applications with pleasing interfaces.</P><P>The documentation consists of Acrobat PDF files: a tutorial, a 14-chapter Developer's Guide, and a language reference duplicated as online help. The documentation is good but not great; at this writing, there are major errors in the tutorial, documented features don't exist and existing features aren't documented, and nearly every sentence contains some careless fault of grammar, omission, or spelling.</P><P>Many aspects of the program have an undeniably inchoate quality: windows aren't listed in the Windows menu, and their positions and states aren't remembered; the debugger is primitive; the code browser handles long lines badly. There are problems in built applications as well: printing support is crude; certain system-level events aren't triggered properly; applications sometimes work differently when built than when run inside REALbasic. The REALbasic mailing list, needless to say, keeps busy.</P><P>Still, that mailing list has also forged a community of avid users, and has contributed to REALbasic's maturity. Andrew Barry and the team have a constant presence and have shown themselves to be well-organized, principled but open-minded, responsive, gracious, conscious of the program's shortcomings, and attentive to users' needs and suggestions. Furthermore, they're quick to fix bugs, implement new features, and issue new updates and developer releases. The program is basically sound, and full of wonderfully thoughtful and ingenious touches; on balance, this seems an appropriate moment for commercial release. If REAL Software can maintain their present pace and attitude, without becoming overly entangled in new paths before resolving outstanding problems, early adopters will find themselves well served.</P><P>A 30-day free demo is available as a 2.2 MB download. REALbasic sells for $100 ($60 academic). An update that will compile Java applets is expected around January 1999, and eventually an "enhanced" version that can compile Windows programs will be available for around $300, and will include database and SQL capabilities.</P><!-- Yes, Virginia, There Is a REALbasic Matt Neuburg --></div>
  712.         
  713.  
  714.         <!-- end article text -->
  715.     
  716.         
  717.         <!-- PayBITS -->
  718.         
  719.  
  720.         
  721. <p> </p><div class="sponsorbox">
  722. <div class="sponsortext"><A HREF="http://www.tidbits.com/about/support/contributors.html"><IMG SRC="http://db.tidbits.com/images/badges/tb-house-ad.gif" ALT="" HEIGHT="50" WIDTH="50" BORDER="0" ALIGN="left"></A>READERS LIKE YOU! Support TidBITS with a contribution today!<BR /><<a href="http://www.tidbits.com/about/support/contributors.html">http://www.tidbits.com/about/support/contributors.html</a>><BR />Special thanks this week to John & Nichola Collins, Chris Williams,<BR />John K. Lilley, and Honeymoons By Sunset for their generous support!
  723. </div>
  724. </div>
  725. <div class="sponsorbox_bottom"> </div>
  726.  
  727.  
  728.         <!-- comments section -->
  729.         
  730.         <!-- end comment show-->
  731.         
  732.         <!-- end comments section -->
  733.  
  734.  
  735.         <!-- end article loop details -->
  736.         
  737.         
  738.  
  739.         
  740.     </div><!-- end show article -->
  741.     
  742.     
  743.  
  744.  
  745. <!-- article_plus end -->
  746. <!--
  747. </DIV>
  748. --><!-- end main_column DIV -->
  749.  
  750.  
  751. <!-- google_ad_section_end -->
  752.  
  753. </div><!-- end center AJAX insert -->
  754.  
  755. <!-- TipBITS Search Results Lozenge -->
  756. <div id="tipbits_results_loz" style="display:none">
  757. <form method="post" onsubmit="return false" id="tipbits_form_loz" name="tipbits_form_loz" action="noaction.cgi">
  758. <div class="tip_footer">
  759. <p id="search_tipbits_loz"><input type="text" onkeydown="if (event.keyCode == 13) { search_tipbits('tipbits_searchvalue_loz', 'tipbits_results_loz'); }" id="tipbits_searchvalue_loz" name="tipbits_searchvalue_loz"> <a href="javascript:void(0)" onClick="search_tipbits('tipbits_searchvalue_loz', 'tipbits_results_loz')">Search</a></p>
  760. </div>
  761. <div class="tip_footer_bottom">
  762.  </div>
  763. </form>
  764. </div><!-- end TipBITS Search Results lozenge -->
  765.  
  766.  
  767.  
  768.  
  769. <!-- begin footer -->
  770. <div id="footer">
  771.  
  772. <div id="qr_tag_right"><div id="qr_tag_image"><img src="http://db.tidbits.com/tags/5043.png"></div><div id="qr_tag_text"><a href="http://db.tidbits.com/article/10616">What's this image?</a></div></div>
  773. <p>Special thanks to <a href="http://www.forest.net/">digital.forest</a>, our
  774. Web and mailing list host.</p>
  775. <p>Unless otherwise noted, this article is copyright © 1998 <a href="/author/Matt%20Neuburg">Matt Neuburg</a></p>
  776. <p>TidBITS is copyright © 2010 TidBITS Publishing Inc.</p>
  777. <p>Reuse governed by <a href="http://www.tidbits.com/terms/">Creative Commons License</a>.</p>
  778.  
  779. <p><a href="/about.html" title="About TidBITS">About TidBITS</a> | <a href="/account.html" title="Account Help">Account Help</a> | <a href="/advertising.html" title="Advertise with TidBITS!">Advertise with TidBITS!</a> | <a href="/contact.html" title="Contact Info">Contact Info</a> | <a href="/copyright.html" title="Copyright Terms">Copyright Terms</a></p>
  780.  
  781. </div><!-- end footer -->
  782.  
  783.  
  784. </div> <!-- end centercolumn -->
  785.  
  786. <div class="center_bottom"> </div>
  787.  
  788. </div> <!-- end centercolumn_border -->
  789.  
  790.  
  791. </div> <!-- end content_container -->
  792.  
  793. </div> <!-- end mainbody -->
  794.  
  795.  
  796. <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
  797. </script>
  798. <script type="text/javascript">
  799. _uacct = "UA-276924-3";
  800. urchinTracker();
  801. </script>
  802. <script type="text/javascript"
  803. src="http://tidbitscom.skimlinks.com/api/skimlinks.js"></script>
  804. <script type="text/javascript">
  805. var skimlinks_pub_id = '2559X585851';
  806. var skimlinks_domain = 'go.tidbits.com';
  807. skimlinks();
  808. </script>
  809. </body>
  810. </html>
  811.  
  812.