home *** CD-ROM | disk | FTP | other *** search
/ db.tidbits.com / db.tidbits.com.tar / db.tidbits.com / getbits.acgi?tbart=05814.orig < prev    next >
Text File  |  2010-09-23  |  54KB  |  830 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 : Life Spiral: Helix Returns</title>
  9.  
  10.     <meta name="title" content="TidBITS : Life Spiral: Helix Returns">
  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='4457'>
  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/522" >#522, 20 Mar 00</A></li>
  307. <li><A HREF="/issue/521" >#521, 13 Mar 00</A></li>
  308. <li><A HREF="/issue/520" >#520, 06 Mar 00</A></li>
  309. <li><A HREF="/issue/519" >#519, 28 Feb 00</A></li>
  310. <li><A HREF="/issue/518" >#518, 21 Feb 00</A></li>
  311. <li><A HREF="/issue/517" >#517, 14 Feb 00</A></li>
  312. <li><A HREF="/issue/516" >#516, 07 Feb 00</A></li>
  313. <li><A HREF="/issue/515" >#515, 31 Jan 00</A></li>
  314. <li><A HREF="/issue/514" >#514, 24 Jan 00</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.usefulfruit.com/tb">Useful Fruit</a></li>
  358.  
  359. <li><a href="http://www.webcrossing.com/">Web Crossing</a></li>
  360.  
  361. <li><a href="http://www.smithmicro.com/tidbits">Smith Micro</a></li>
  362.  
  363. <li><a href="http://www.thedatarescuecenter.com/">The Data Rescue Center</a></li>
  364.  
  365. <li><a href="http://markspace.com/bits?source=tidbits">Mark/Space</a></li>
  366.  
  367. <li><a href="http://macte.ch/conf_tidbits">MacTech Conference</a></li>
  368.  
  369. <li><a href="http://crashplan.com/ref/tidbits.html">CrashPlan</a></li>
  370.  
  371. <li><a href="http://www.econtechnologies.com/tb">Econ Technologies</a></li>
  372.  
  373. <li><a href="http://www.tidbits.com/about/support/contributors.html">Readers Like You!</a></li>
  374.  
  375. <li><a href="http://nuance.com/dragon/mac">Nuance</a></li>
  376.  
  377. <li><a href="http://www.smilesoftware.com/">Smile</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>Use Shift to Compare Edits in iPhoto '08</h6>
  466. <p><p>In iPhoto '08, while you're editing a photo, press the Shift key to see a "before" view; let it up to see the "after" view. It's much faster and easier than using Undo and Redo.</p></p>
  467. <p>Visit <a href="http://www.takecontrolbooks.com/iphoto7-vqs.html?14@@!pt=TBTIPS">iPhoto '08: Visual QuickStart Guide</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/62">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/Adam%20C.%20Engst">Adam C. 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/6641">Seeing the Light with Panorama</a> (19 Nov 01)</li>
  539. <li><a href="/article/6432">Relational Databases and Mac OS X, Part 1</a> (14 May 01)</li>
  540. <li><a href="/article/5576">FileMaker Pro 5 Released to Controversy</a> (27 Sep 99)</li>
  541. <li><a href="/article/1160">Get Your Hands on Prograph</a> (29 Jan 96)</li>
  542.  
  543. </ul>
  544.  
  545. <p class="tearoffbox_wide_bottom_p"> </p>
  546.  
  547. </div><!-- end tearoffbox_wide -->
  548. </div><!-- end tearoffbox_wide_container -->
  549.  
  550. <!-- end tearoff box 2 -->
  551.  
  552.  
  553. <!-- begin tearoff box for series -->
  554.  
  555. <div class="tearoffbox_wide_container">
  556.  
  557. <div class="tearoffbox_wide_p">
  558. <p class="tearoffbox_wide_top_p"> </p>
  559.  
  560. <h5>Other articles in the series <a href="/series/1196">Conquer Your Text</a></h5>
  561. <ul>
  562. <li><a href="/article/11040">EagleFiler Turns a Finder Folder Into a Snippet Keeper</a> (24 Feb 10)</li>
  563. <li><a href="/article/8760">MindManager Comes to the Mac</a> (20 Nov 06)</li>
  564. <li><a href="/article/8720">SlipBox: Scents and Sensibility</a> (23 Oct 06)</li>
  565. <li><a href="/article/8407">Let Yojimbo Guard Your Information Castle</a> (30 Jan 06)</li>
  566. <li><a href="/article/8214">DEVONthink Goes Pro</a> (22 Aug 05)</li>
  567. <li><a href="/article/8079">A Shiny New NoteBook</a> (25 Apr 05)</li>
  568. <li><a href="/article/7994">Curing Clutter with Curio</a> (21 Feb 05)</li>
  569. <li><a href="/article/7847">Bull Market for the TAO</a> (11 Oct 04)</li>
  570. <li><a href="/article/7803">The Well-Worn NoteBook</a> (06 Sep 04)</li>
  571. <li><a href="/article/7575">DEVONthink Thinks, So You Don't Have To</a> (08 Mar 04)</li>
  572. <li><a href="/article/7319">Go Hog Wild with Hog Bay Notebook</a> (25 Aug 03)</li>
  573. <li><a href="/article/7157">Take Note of NoteTaker</a> (21 Apr 03)</li>
  574. <li><a href="/article/7145">The Digital Shoebox: iData Pro X 1.0.5</a> (07 Apr 03)</li>
  575. <li><a href="/article/6959">Light Your Fire with Tinderbox</a> (14 Oct 02)</li>
  576. <li><a href="/article/6529">Three Simple Snippet Keepers</a> (20 Aug 01)</li>
  577. <li><a href="/article/6441">Boswell: A Text Motel</a> (21 May 01)</li>
  578. <li><a href="/article/5931">It's a Keeper (Idea Keeper, That Is)</a> (08 May 00)</li>
  579. <li><a href="/article/1149">WebArranger Handles More than the Web</a> (05 Feb 96)</li>
  580. <li><a href="/article/2443">Get IN CONTROL</a> (30 Aug 93)</li>
  581. <li><a href="/article/2381">MORE, MORE, Dinosaur</a> (18 Oct 93)</li>
  582.  
  583. </ul>
  584.  
  585. <p class="tearoffbox_wide_bottom_p"> </p>
  586.  
  587. </div><!-- end tearoffbox_wide -->
  588. </div><!-- end tearoffbox_wide_container -->
  589.  
  590. <!-- end tearoff box -->
  591.  
  592.  
  593.  
  594.  
  595. <!-- begin tearoff box 1 -->
  596.  
  597. <div class="tearoffbox_wide_container">
  598.  
  599. <div class="tearoffbox_wide">
  600. <p class="tearoffbox_wide_top"> </p>
  601.  
  602. <h5>Published in <a href="/issue/518">TidBITS 518</a>.<br><a href="http://www.tidbits.com/list">Subscribe</a> to our weekly email edition.</h5>
  603. <ul>
  604. <li><A HREF="/article/5806">Eudora 4.3.1 Replaces Version 4.3</A></li>
  605. <li><A HREF="/article/5807">GraphicConverter 3.8 Adds AppleScript, Bug Fixes</A></li>
  606. <li><A HREF="/article/5808">Farallon Announces 11 Mbps SkyLINE Card</A></li>
  607. <li><A HREF="/article/5809">Microsoft Releases Windows 2000</A></li>
  608. <li><A HREF="/article/5810">Poll Results: Ad-ing It Up</A></li>
  609. <li><A HREF="/article/5811">Poll Preview: Color Me Pretty</A></li>
  610. <li><A HREF="/article/5812">Beefier Laptops & Faster G4s at Macworld Tokyo</A></li>
  611. <li><A HREF="/article/5813">Virtual Game Station Shipping Again</A></li>
  612.  
  613. </ul>
  614.  
  615. <p class="tearoffbox_wide_bottom"> </p>
  616.  
  617. </div><!-- end tearoffbox_wide -->
  618. </div><!-- end tearoffbox_wide_container -->
  619.  
  620. <!-- end tearoff box 1 -->
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628. <div id="rightcolumn_bottom">
  629.  
  630. </div>
  631.  
  632.     </div><!-- end rightcolumn -->
  633.  
  634.  
  635. </div><!-- end rightcolumn_container -->
  636.  
  637.  
  638.  
  639. <!-- featured articles -->
  640.  
  641. <div id="center_ajax_sub" class="instapaper_body">
  642.  
  643. <!-- google_ad_section_start -->
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664. <!-- issue, article, or series -->
  665.  
  666.     
  667.     
  668.     
  669.     
  670.     
  671.         
  672.     <!-- show article(s) -->
  673.     <div class="article"><a name="4457"></a>
  674.     
  675. <!-- comment initialization routine as needed -->
  676. <div class="popup_box_with_captcha" id="hc_4457" style="display: none">
  677.     <div class="tip_box_format">
  678.     <div id="hc_innards_alt_4457" style="display: none">
  679.             <div class="tbf_row">
  680.                 <div class="tbf_wide_80" id="hc_small_response_4457"></div><div class="x_close_row" id="hc_upper_right1_4457"><a href="javascript:void(0)" onmousedown="HidePopupContent('hc_4457', 'hc', '4457'); return true;">Close</a></div>
  681.  
  682.             </div>
  683.     </div>
  684.     <div id="hc_innards_4457">
  685.         <div class="tip_box_form">        
  686.             <form action="foobar.cgi" method="get" name="check_human_4457">
  687.             <div class="tbf_row">
  688.                 <div class="tbf_wide_80" id="hc_rc_4457">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_4457"><a href="javascript:void(0)" onmousedown="HidePopupContent('hc_4457', 'hc', '4457'); return true;">Close</a></div>
  689.  
  690.             </div>
  691.             <div class="spacer"></div>
  692.             <div class="tbf_row" id="hc_message_box_4457" style="display:none">
  693.                 <div class="tbf_wide"><div class="tbf_alert" id="hc_top_message_4457"></div></div>
  694.             </div>
  695.             <div class="spacer"></div>
  696.             <div class="tbf_row">
  697.                 <div class="tbf_wide"><div id="hc_recaptcha_4457"></div></div>
  698.             </div>
  699.             <div class="spacer"></div>
  700.             <div class="tbf_row">
  701.                 <div class="tbf_wide"><input type="submit" value="Submit" name="submit_this_tip" onClick="handle_tip_submission('hc', '4457', this.form, this.form.submit_type.value); return false;"><input name="calling_routine" type="hidden"><input type="hidden" name="getbits" value="5814"><input type="hidden" name="author_id"><input type="hidden" name="submit_type" value=""></div>
  702.             </div>
  703.             <div class="spacer"></div>
  704.             </form>
  705.         </div><!-- end tip_box_form -->
  706.     </div><!-- end hum box innards -->
  707.     </div><!-- end tip box format -->
  708. </div><!-- end tip_submit box-->
  709.  
  710.  
  711.  
  712.         
  713.         
  714.         <!-- specific article details here -->
  715.         
  716.         
  717.             
  718.         
  719.     
  720.         <article_link><script type="text/javascript">open_if_linked('')</script></article_link>
  721.         
  722.         <div class="featured_meta"><div class="meta_article">21 Feb 2000 | <a href="/article/5814?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>
  723.  
  724.         <H2>Life Spiral: Helix Returns</H2>
  725.  
  726.         <p class="byline">by <a href="/author/Matt%20Neuburg">Matt Neuburg</a> <a href="javascript:void(0)" onClick="document.check_human_4457.submit_type.value='email'; document.check_human_4457.author_id.value='7'; ShowTipBox('hc_4457', 'hc_recaptcha_4457')"><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>
  727.  
  728.         <!-- article text -->
  729.         
  730.         <div id="article_box_4457"><P>For many years, FileMaker Pro has been one of my standard tools for storing and retrieving structured information: with FileMaker, it's easy to build yourself an address book or a guide to your music collection, and its thorough scriptability makes it splendid for exchanging data with other applications. Version 3.0, dating from 1995, introduced relational database capabilities; but subsequent versions offered so little (and cost so much) that I never upgraded further. Then recently version 5, instead of improving core features, introduced some vastly higher pricing, and I wondered whether I hadn't backed the wrong horse.</P><P><<A HREF="http://db.tidbits.com/article/05576">http://db.tidbits.com/article/05576</A>></P><P>Around this time I learned, with surprise, that Odesta's Helix was still alive. I had used Helix briefly in 1991, but then lost track of it. Helix (soon re-dubbed Double Helix) had been one of the earliest Mac products, dating back to 1984. It was ahead of its time, but was sent down an unproductive development path - basically, much time and effort went into creating a VAX-based server for Helix, whereupon personal computers suddenly got faster and cheaper than a VAX would ever be (can you say Mac IIfx?) - and the company split up in 1992. The product was renamed again, as Helix Express, and more or less languished. Now it has been taken over by The Chip Merchant, which is run by a Helix enthusiast, and is being subjected to the nightmarish process of modernizing ancient legacy code, fixing memory leaks, and squashing bugs. Meanwhile, amazingly, the basic Helix product, now renamed Helix RADE (Rapid Application Development Environment), is free.</P><P><<A HREF="http://www.helixtech.com/">http://www.helixtech.com/</A>><BR><<A HREF="http://www.helixtech.com/history.html">http://www.helixtech.com/history.html</A>></P><P><STRONG>In the Nucleus</STRONG> -- Helix RADE (I'll just call it Helix) is an environment for designing databases and then working with the data (inputting, viewing, querying and sorting, exporting, printing). The design process is unusually visual and object-based, revolving around icons and windows, in ways somewhat reminiscent of Prograph (see "Get Your Hands on Prograph" in <A HREF="http://www.tidbits.com/tb-issues/TidBITS-312.html">TidBITS-312</A>). The terminology is also rather quirky, so bear with me.</P><P><<A HREF="http://db.tidbits.com/article/01160">http://db.tidbits.com/article/01160</A>></P><P>A database file created by Helix, containing the database structure and the data, is called a "collection." Only one collection can be open at a time. It is represented initially as an empty window, into which you drag icons to represent relations; each relation is a table of data, where all the records (the rows) will consist of the same fields (the columns) - what FileMaker would call a database. Thus, a one-relation collection is a flat-file database; a two-or-more-relation collection can be a relational database, as I'll explain later.</P><P>Double-click a relation icon, and another empty window opens, into which you drag more icons. These are of many different types:</P><UL><LI><P>A field is a category of data that each record is to have, such as "last name" or "age".</P><LI><P>An index is an instruction that a sorted order be maintained for one or more fields.</P><LI><P>An abacus is a calculation, such as "first name followed by space followed by last name".</P><LI><P>A template is like a FileMaker layout, where you arrange fields on the page.</P><LI><P>A view is like FileMaker's browse mode; it portrays some particular template, but is where you actually enter and view live data.</P><LI><P>A query is a form, attached to a view, which you can open to change what subset of the data is shown in that view.</P><LI><P>A post is an action to be performed automatically when you do something in a view, such as entering data; chiefly, it's a way of maintaining automatic integrity of data across relations. I'll talk more about this later.</P></UL><P>Each icon, once dragged into a relation window, just sits there until you do something with it. First, you name it, just like naming a file in the Finder. Then you double-click it to open its window and edit it. In a field's window, you specify its data type and validation rules. In an index's window, you specify what field(s) to sort. In an abacus's window, you describe the desired calculation: this too is completely icon-based, as you drag icons representing operations and fields into the window and arrange them in a dataflow diagram. For example, to say "first name followed by space followed by last name", you drag in a "followed by" icon, then drag the "first name" field into its first part and set a space character as its second part; then you drag in a second "followed by" icon, feed the output arrow from the first one into the second's first part, and drag the "last name" field into its second part.</P><P>A template window starts out as a blank sheet of paper with some rectangle drawing tools. What you draw is crucial, because a view, you recall, is the only place where you enter or examine any actual data, and every view is a representation of some one template; so if you ever want to be able to set directly the value of a record's "last name" field, that field <EM>must</EM> appear in a template!</P><P>Templates come in two forms. A template showing fields for one record at a time is an entry template; in a view that uses an entry template, you navigate records via Next/Previous Record menu items. A template showing fields for all records at once is a list template, and is established by drawing a repeat rectangle around the data to be listed. For example, if you draw a repeat rectangle around the "last name" field in a template, then a view that uses this template will list the last name values for all the records at once. (By "all", I mean "all that this view shows"; you can limit or order the set of data shown, with a query or index attached to a view.)</P><P>A list template can appear within another template. For any view that uses the outer template, you specify a field in each template's relation; the inner template will then list only those records of its relation where the data of those two fields match. This is how you make your database relational. The display of the inner template material is extremely flexible, so that Helix's implementation of relationality is extremely powerful: for example, you can specify the sort order of the inner list; you can specify a query further limiting the inner list's records; and you can nest list templates, for additional layers of relationality.</P><P>Helix runs in two modes, developer mode and user mode. Developer mode is what I've been talking about all this time. In user mode, you see only certain views and menu items, and have only certain types of access to those views, as predetermined in developer mode. Surprisingly, this can be useful even if you are your only user; when you are done designing, it's nice to switch to user mode, eliminating extraneous windows, and just enter and retrieve your data.</P><P><STRONG>Acid Test</STRONG> -- To test Helix for this review, I reproduced, as a Helix collection, the structure, data, and functionality of a system of related FileMaker databases that we used when I was editing a Mac programming magazine. This system had proven almost too much for FileMaker to handle, and I wanted to see if Helix could do better. I will now provide some gory details, so skip the next couple of paragraphs if you have a weak stomach.</P><P>The system tracked articles submitted and published, plus payments to authors. An article could comprise more than one "fragment" (for example, in our Readers Tips column, each tip was a fragment); so there were no authors of articles, only authors of fragments. And a fragment could have more than one author. So far, that's three databases: articles, fragments, authors. For every article, we needed a list of author-fragment-payment triplets. But how, in FileMaker, could a portal in the articles database show authors? Authors had no direct relationship to articles, and portals could not contain portals, or be limited through a query.</P><P>Our solution was an extra database, an intermediate "link" pairing fragments with authors (and payments). The articles database could have a portal on this fragment-author database; but how would it know which fragment-author pairs to list? Clearly, the article database's key must match an article key in the fragment-author database. But where would that key's value come from? There were no articles in the fragment-author database; articles were paired with fragments in the fragments database! So we forced each record in the fragment-author database to learn what article it was a part of, through a lookup on the fragments database.</P><P>This was just one of many complex portal/lookup tricks we used to hook up the information. The problem here was not the extra fragment-author database (that's standard procedure with many-to-many relationships), but the dreadful fragility of the data's integrity. Lookups in FileMaker were not live, so we had to keep running a script in the articles database that made the link database refresh its lookups. When creating a new article, tasks had to be performed in the right order, to ensure that the fragment-author database was updated correctly behind the scenes; despite precautions, it could easily acquire invalid records, and had to be double-checked often by hand.</P><P>The Helix version turned out to be far simpler and far more robust, and took me just two days to create after reading the documentation; it would have been much quicker for an expert. To list fragment-author pairs within a view of an article still requires the fragment-author relation, but in a much more straightforward way: an articles template holds a fragments list template, keying on the article, which in turn holds a fragment-author template, keying on the fragment. Integrity is maintained behind the scenes through a post: when you enter an author for a fragment in the fragments relation, Helix automatically creates a new record pairing them in the fragment-author relation - but only if they are not already paired.</P><P>The Helix version is also far more comprehensible to a developer. FileMaker hides crucial information in various modal dialogs: the Define Fields dialog and its Options sub-dialog, the Field Format dialog, the Portal Setup dialog, ScriptMaker and its Script Definition sub-dialog. In Helix, on the other hand, everything is a top-level entity, an icon in a window, and no icon window is modal, so you can open and study many at once - indeed, in an icon window you can double-click another icon's name to open that icon's window! You can view a relation window as a list (like Finder Name view), showing useful information about each icon. Each icon also has a Get Info window, where you can enter a comment and see the names of all icons that use this one. Finally, Helix prevents or warns you if you perform any invalidating action, such as trying to delete an icon used by another.</P><P>Helix derives great fluidity and power from the object-based independence of its entities. Consider calculations. In FileMaker, a calculation is basically a kind of field. In Helix, an abacus is just an abacus, and so you can use it however you like: it can provide data or validation for a field, a sort order for an index, a limiting query for a view or for a field entry pop-up menu. On the other hand, things that don't need to be entities, are not. In FileMaker, relationality between databases is one more setting to be reached through a series of dialogs; but Helix knows that this is just a way of looking at data, so it's merely an aspect of a particular view. The general feeling in FileMaker is that you start with a database and drill into it from various places to access its parts; in Helix, you start with the parts, and tie them together to form a database.</P><P><STRONG>Under the Electron Microscope</STRONG> -- Helix is not for the faint of heart. The manual (fortunately due to be rewritten) is a massive series of PDFs, more a specification than an explanation: it has some typos, and the pictures are mostly indecipherable, a serious flaw for a visual language. It fails utterly to teach you the Helix way of thinking, the peculiar culture and tricks handed down by past masters. The learning curve is hyperbolically steep; either you'll suddenly have an "Aha" moment and pop past it, like bursting through a wall, or you'll fall off the mountain.</P><P>Helix still has some bugs - I crashed several times - and many faults. Revision continues, so some of these may soon vanish; but at present, the new user is likely to find Helix quirky and fossilized. Over the years, Helix has grown like Frankenstein's Monster; new bits were sewn on without touching old bits, many of which date back all the way to 1984 - and they feel like it, especially the interface, which incorporates no modern elements such as balloon help or tabbed panels.</P><P>Navigation is a big problem. There is no Window menu (a dreadful omission), no hierarchical outline view of your collection, and no way to navigate upwards (from an Index window to its containing Relation window, for example). So you spend most of your time lost; even if you can see an icon's name and open its window, you may not know what relation it is part of, so you have to drill down into every relation looking for it.</P><P>Certain crucial windows are incomprehensible unless you're very experienced or looking at the manual, and often present their information in a clumsy piecemeal fashion. The View Setup window, where you create the relationality between an outer and an inner template, is atrocious: the space is too narrow for the names you're trying to read, and if you add another inner template the dialog forgets all its previous settings.</P><P>You cannot edit data in a list view - though you can double-click a listed record (or multiple selected records) to open it in an entry view where you can edit. Inner lists don't scroll, or support multiple selection. On the other hand, list views support user-selectable sort orders, while entry views don't - a curious asymmetry.</P><P>Here's a final miscellany. You can only have eight colors. A multiple-choice field can't be represented as radio buttons. There aren't enough menu shortcuts, because the Command key is the only modifier. There is no way to learn which record of the current found set you're looking at. An abacus has no find-and-replace functionality, so sometimes you have to export your data, munge it, and re-import it.</P><P><STRONG>Replication & Evolution</STRONG> -- Helix is internally scriptable, via menu items or buttons in views; but the only scriptable actions, besides opening views, are those normally available as menu items. That's very weak compared with FileMaker, but posts often make a script unnecessary, and buttons can implement a form of branching and looping, which scripts themselves lack.</P><P>Helix can't run AppleScript scripts, so any inter-application communication must originate externally. It responds, not to AppleScript, but to some rather oddly structured Apple events; you'll need a program like Frontier to send them. The repertoire is very limited - fetch a record, load a record, delete a record - but you could probably manage by arranging your database cleverly beforehand, perhaps with an occasional boost from QuicKeys or OneClick. So if the question is, "Can Helix act as a CGI application behind my Web server?" the answer is: Maybe, but not alone, and not easily.</P><P>I have not seen the commercial Helix products; there are two. Helix Converter ($500) turns your database into a stand-alone application (in permanent user mode). Helix Client/Server lets multiple users access a database via AppleTalk. It might be preferable for serious CGI work, and without it you can't run two copies of Helix on the same local network. It starts at $300 for two clients and goes up from there.</P><P>My exploration of Helix has certainly made me an addict, if not a convert. Once bug-squashing ends, the next big step will be a feature release. It isn't clear what this might include - a truly modern Helix might benefit from an overhauled interface, fuller scriptability, and TCP/IP and ODBC awareness - or what the future pricing model will be. But the present pricing model is unbeatable: a powerfully relational database program at no cost. You have nothing to lose but your dependence on FileMaker.</P><P>Helix requires a PowerPC-based Macintosh running System 7.5.5 or later.</P><P><<A HREF="http://www.helixtech.com/download.html">http://www.helixtech.com/download.html</A>></P><P>[Note: This article owes much to the generous personal attention and informative guidance of Matt Strange of Helix Technical Support.]</P><!-- Life Spiral: Helix Returns Matt Neuburg --></div>
  731.         
  732.  
  733.         <!-- end article text -->
  734.     
  735.         
  736.         <!-- PayBITS -->
  737.         
  738.  
  739.         
  740. <p> </p><div class="sponsorbox">
  741. <div class="sponsortext"><A HREF="http://www.econtechnologies.com/tb"><IMG SRC="http://db.tidbits.com/images/badges/chronosync.png" ALT="" HEIGHT="50" WIDTH="50" BORDER="0" ALIGN="left"></A>With ChronoSync you can sync, back up, or make bootable backups.<br />Sync or back up your Mac to internal or external hard drives, other<br />Macs, PCs, or remote network volumes you can mount on your Mac.<br />Learn more at <<a href="http://www.econtechnologies.com/tb.html">http://www.econtechnologies.com/tb.html</a>>!</div>
  742. </div>
  743. <div class="sponsorbox_bottom"> </div>
  744.  
  745.  
  746.         <!-- comments section -->
  747.         
  748.         <!-- end comment show-->
  749.         
  750.         <!-- end comments section -->
  751.  
  752.  
  753.         <!-- end article loop details -->
  754.         
  755.         
  756.  
  757.         
  758.     </div><!-- end show article -->
  759.     
  760.     
  761.  
  762.  
  763. <!-- article_plus end -->
  764. <!--
  765. </DIV>
  766. --><!-- end main_column DIV -->
  767.  
  768.  
  769. <!-- google_ad_section_end -->
  770.  
  771. </div><!-- end center AJAX insert -->
  772.  
  773. <!-- TipBITS Search Results Lozenge -->
  774. <div id="tipbits_results_loz" style="display:none">
  775. <form method="post" onsubmit="return false" id="tipbits_form_loz" name="tipbits_form_loz" action="noaction.cgi">
  776. <div class="tip_footer">
  777. <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>
  778. </div>
  779. <div class="tip_footer_bottom">
  780.  </div>
  781. </form>
  782. </div><!-- end TipBITS Search Results lozenge -->
  783.  
  784.  
  785.  
  786.  
  787. <!-- begin footer -->
  788. <div id="footer">
  789.  
  790. <div id="qr_tag_right"><div id="qr_tag_image"><img src="http://db.tidbits.com/tags/5814.png"></div><div id="qr_tag_text"><a href="http://db.tidbits.com/article/10616">What's this image?</a></div></div>
  791. <p>Special thanks to <a href="http://www.forest.net/">digital.forest</a>, our
  792. Web and mailing list host.</p>
  793. <p>Unless otherwise noted, this article is copyright © 2000 <a href="/author/Matt%20Neuburg">Matt Neuburg</a></p>
  794. <p>TidBITS is copyright © 2010 TidBITS Publishing Inc.</p>
  795. <p>Reuse governed by <a href="http://www.tidbits.com/terms/">Creative Commons License</a>.</p>
  796.  
  797. <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>
  798.  
  799. </div><!-- end footer -->
  800.  
  801.  
  802. </div> <!-- end centercolumn -->
  803.  
  804. <div class="center_bottom"> </div>
  805.  
  806. </div> <!-- end centercolumn_border -->
  807.  
  808.  
  809. </div> <!-- end content_container -->
  810.  
  811. </div> <!-- end mainbody -->
  812.  
  813.  
  814. <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
  815. </script>
  816. <script type="text/javascript">
  817. _uacct = "UA-276924-3";
  818. urchinTracker();
  819. </script>
  820. <script type="text/javascript"
  821. src="http://tidbitscom.skimlinks.com/api/skimlinks.js"></script>
  822. <script type="text/javascript">
  823. var skimlinks_pub_id = '2559X585851';
  824. var skimlinks_domain = 'go.tidbits.com';
  825. skimlinks();
  826. </script>
  827. </body>
  828. </html>
  829.  
  830.