home *** CD-ROM | disk | FTP | other *** search
/ db.tidbits.com / db.tidbits.com.tar / db.tidbits.com / getbits.acgi?tbart=06641.orig < prev    next >
Text File  |  2010-09-23  |  54KB  |  796 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 : Seeing the Light with Panorama</title>
  9.  
  10.     <meta name="title" content="TidBITS : Seeing the Light with Panorama">
  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='5257'>
  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/610" >#610, 17 Dec 01</A></li>
  307. <li><A HREF="/issue/609" >#609, 13 Dec 01</A></li>
  308. <li><A HREF="/issue/608" >#608, 10 Dec 01</A></li>
  309. <li><A HREF="/issue/607" >#607, 03 Dec 01</A></li>
  310. <li><A HREF="/issue/606" >#606, 19 Nov 01</A></li>
  311. <li><A HREF="/issue/605" >#605, 12 Nov 01</A></li>
  312. <li><A HREF="/issue/604" >#604, 05 Nov 01</A></li>
  313. <li><A HREF="/issue/603" >#603, 29 Oct 01</A></li>
  314. <li><A HREF="/issue/602" >#602, 22 Oct 01</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://nuance.com/dragon/mac">Nuance</a></li>
  360.  
  361. <li><a href="http://markspace.com/bits?source=tidbits">Mark/Space</a></li>
  362.  
  363. <li><a href="http://www.usefulfruit.com/tb">Useful Fruit</a></li>
  364.  
  365. <li><a href="http://macte.ch/conf_tidbits">MacTech Conference</a></li>
  366.  
  367. <li><a href="http://www.thedatarescuecenter.com/">The Data Rescue Center</a></li>
  368.  
  369. <li><a href="http://crashplan.com/ref/tidbits.html">CrashPlan</a></li>
  370.  
  371. <li><a href="http://www.tidbits.com/about/support/contributors.html">Readers Like You!</a></li>
  372.  
  373. <li><a href="http://www.smithmicro.com/tidbits">Smith Micro</a></li>
  374.  
  375. <li><a href="http://www.econtechnologies.com/tb">Econ Technologies</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/11622">DEVONthink and DEVONnote 2.0.4</a></LI>
  429.  
  430. <LI><a href="/article/11620">Security Update 2010-006</a></LI>
  431.  
  432. <LI><a href="/article/11619">TinkerTool 4.2</a></LI>
  433.  
  434. <LI><a href="/article/11618">Mailplane 2.2</a></LI>
  435.  
  436. <LI><a href="/article/11617">Pro Applications Update 2010-02</a></LI>
  437.  
  438. <LI><a href="/article/11611">Dialectic 1.7</a></LI>
  439.  
  440. <LI><a href="/article/11604">Transmit 4.1.1</a></LI>
  441.  
  442. <LI><a href="/article/11603">MarsEdit 3.1.1</a></LI>
  443.  
  444. <LI><a href="/article/11600">Savescreenie 2.0</a></LI>
  445.  
  446. <LI><a href="/article/11598">1Password 3.4.1</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>Expose Shortcut for Arrange All Windows</h6>
  466. <p><p>In Expose in Snow Leopard, with all windows visible, press F9 (or the Expose key [F3] on recent Mac laptops), then press Command-1 to arrange the windows by name or press Command-2 to arrange them by application.</p></p>
  467.  
  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/192">Link to this tip</a></p></div><div class="tip_display" style="float:right; width:150px">
  472. <p class="credit">Submitted by<br>Doug McLean</p>
  473. </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/11120">TidBITS Watchlist: Notable Software Updates for 29 March 2010</a> (29 Mar 10)</li>
  539. <li><a href="/article/11108">Panorama 6 Preview</a> (24 Mar 10)</li>
  540. <li><a href="/article/9717">Panorama Enterprise Offers Internet Database Synchronization</a> (30 Jul 08)</li>
  541. <li><a href="/article/7910">Panorama V for Victory</a> (06 Dec 04)</li>
  542. <li><a href="/article/7351">Panorama V Goes Native</a> (15 Sep 03)</li>
  543. <li><a href="/article/6441">Boswell: A Text Motel</a> (21 May 01)</li>
  544. <li><a href="/article/5814">Life Spiral: Helix Returns</a> (21 Feb 00)</li>
  545. <li><a href="/article/4075">HyperCard 2.2: The Great Becomes Greater</a> (14 Feb 94)</li>
  546.  
  547. </ul>
  548.  
  549. <p class="tearoffbox_wide_bottom_p"> </p>
  550.  
  551. </div><!-- end tearoffbox_wide -->
  552. </div><!-- end tearoffbox_wide_container -->
  553.  
  554. <!-- end tearoff box 2 -->
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562. <!-- begin tearoff box 1 -->
  563.  
  564. <div class="tearoffbox_wide_container">
  565.  
  566. <div class="tearoffbox_wide">
  567. <p class="tearoffbox_wide_top"> </p>
  568.  
  569. <h5>Published in <a href="/issue/606">TidBITS 606</a>.<br><a href="http://www.tidbits.com/list">Subscribe</a> to our weekly email edition.</h5>
  570. <ul>
  571. <li><A HREF="/article/6634">Next Issue 03-Dec-01!</A></li>
  572. <li><A HREF="/article/6635">Vote for TidBITS!</A></li>
  573. <li><A HREF="/article/6636">Mac OS X 10.1.1 Update Released</A></li>
  574. <li><A HREF="/article/6637">Microsoft Office X Ships</A></li>
  575. <li><A HREF="/article/6638">Now Up-to-Date & Contact 4.1 Goes Mac OS X Native</A></li>
  576. <li><A HREF="/article/6639">Extensis Releases Suitcase 10.1</A></li>
  577. <li><A HREF="/article/6640">Apple Ups the AirPort Ante</A></li>
  578.  
  579. </ul>
  580.  
  581. <p class="tearoffbox_wide_bottom"> </p>
  582.  
  583. </div><!-- end tearoffbox_wide -->
  584. </div><!-- end tearoffbox_wide_container -->
  585.  
  586. <!-- end tearoff box 1 -->
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594. <div id="rightcolumn_bottom">
  595.  
  596. </div>
  597.  
  598.     </div><!-- end rightcolumn -->
  599.  
  600.  
  601. </div><!-- end rightcolumn_container -->
  602.  
  603.  
  604.  
  605. <!-- featured articles -->
  606.  
  607. <div id="center_ajax_sub" class="instapaper_body">
  608.  
  609. <!-- google_ad_section_start -->
  610.  
  611.  
  612.  
  613.  
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630. <!-- issue, article, or series -->
  631.  
  632.     
  633.     
  634.     
  635.     
  636.     
  637.         
  638.     <!-- show article(s) -->
  639.     <div class="article"><a name="5257"></a>
  640.     
  641. <!-- comment initialization routine as needed -->
  642. <div class="popup_box_with_captcha" id="hc_5257" style="display: none">
  643.     <div class="tip_box_format">
  644.     <div id="hc_innards_alt_5257" style="display: none">
  645.             <div class="tbf_row">
  646.                 <div class="tbf_wide_80" id="hc_small_response_5257"></div><div class="x_close_row" id="hc_upper_right1_5257"><a href="javascript:void(0)" onmousedown="HidePopupContent('hc_5257', 'hc', '5257'); return true;">Close</a></div>
  647.  
  648.             </div>
  649.     </div>
  650.     <div id="hc_innards_5257">
  651.         <div class="tip_box_form">        
  652.             <form action="foobar.cgi" method="get" name="check_human_5257">
  653.             <div class="tbf_row">
  654.                 <div class="tbf_wide_80" id="hc_rc_5257">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_5257"><a href="javascript:void(0)" onmousedown="HidePopupContent('hc_5257', 'hc', '5257'); return true;">Close</a></div>
  655.  
  656.             </div>
  657.             <div class="spacer"></div>
  658.             <div class="tbf_row" id="hc_message_box_5257" style="display:none">
  659.                 <div class="tbf_wide"><div class="tbf_alert" id="hc_top_message_5257"></div></div>
  660.             </div>
  661.             <div class="spacer"></div>
  662.             <div class="tbf_row">
  663.                 <div class="tbf_wide"><div id="hc_recaptcha_5257"></div></div>
  664.             </div>
  665.             <div class="spacer"></div>
  666.             <div class="tbf_row">
  667.                 <div class="tbf_wide"><input type="submit" value="Submit" name="submit_this_tip" onClick="handle_tip_submission('hc', '5257', this.form, this.form.submit_type.value); return false;"><input name="calling_routine" type="hidden"><input type="hidden" name="getbits" value="6641"><input type="hidden" name="author_id"><input type="hidden" name="submit_type" value=""></div>
  668.             </div>
  669.             <div class="spacer"></div>
  670.             </form>
  671.         </div><!-- end tip_box_form -->
  672.     </div><!-- end hum box innards -->
  673.     </div><!-- end tip box format -->
  674. </div><!-- end tip_submit box-->
  675.  
  676.  
  677.  
  678.         
  679.         
  680.         <!-- specific article details here -->
  681.         
  682.         
  683.             
  684.         
  685.     
  686.         <article_link><script type="text/javascript">open_if_linked('')</script></article_link>
  687.         
  688.         <div class="featured_meta"><div class="meta_article">19 Nov 2001 | <a href="/article/6641?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>
  689.  
  690.         <H2>Seeing the Light with Panorama</H2>
  691.  
  692.         <p class="byline">by <a href="/author/Matt%20Neuburg">Matt Neuburg</a> <a href="javascript:void(0)" onClick="document.check_human_5257.submit_type.value='email'; document.check_human_5257.author_id.value='7'; ShowTipBox('hc_5257', 'hc_recaptcha_5257')"><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>
  693.  
  694.         <!-- article text -->
  695.         
  696.         <div id="article_box_5257"><P>Let me not beat around the bush. ProVue Panorama is the best general database program I've ever used.</P><P><<A HREF="http://www.provue.com/panorama.html">http://www.provue.com/panorama.html</A>></P><P>Granted, I may not be a typical database user. I'm not running an "enterprise solution" - I just want my information kept safe and accessible. But for such purposes I'm so happy with Panorama that I have moved <EM>all</EM> my data into it, reproducing all the functionality I previously achieved using FileMaker, Helix, and HyperCard. My address book, my inventories of books and LPs, my diary, even my system for archiving email digests as individual messages and reading them by thread - all these are now Panorama files. Plus, Panorama is externally scriptable, so I'm using it to store catalog data and then driving it with Frontier to transform that data into Web pages.</P><P><<A HREF="http://www.ojai.net/threadsofjoy/wool.html">http://www.ojai.net/threadsofjoy/wool.html</A>><BR><<A HREF="http://db.tidbits.com/series/1168">http://db.tidbits.com/series/1168</A>><BR><<A HREF="http://db.tidbits.com/article/05814">http://db.tidbits.com/article/05814</A>><BR><<A HREF="http://db.tidbits.com/article/04075">http://db.tidbits.com/article/04075</A>><BR><<A HREF="http://db.tidbits.com/series/1134">http://db.tidbits.com/series/1134</A>></P><P>Panorama has been available on the Mac since 1988 (or 1984 if you count its predecessor, OverVue); but I don't think I'd have liked earlier versions as much. The new version, Panorama 4, includes many changes that bring it to a state of pleasing maturity. It is now PowerPC-native and cross-platform with Windows. The recent maintenance release, 4.0.1, incorporates some further features and fixes some important bugs.</P><P><STRONG>The Big Picture</STRONG> -- Panorama is RAM-based: it holds open databases entirely in memory. Obviously if you haven't enough memory to hold your data, you can't use Panorama. But RAM is now cheap and plentiful, and Panorama doesn't waste it: a database of half a million names and addresses will work fine if you give Panorama 32 MB. And the RAM-based approach has three great virtues:</P><UL><LI><P>Speed. Access to data is instant; sorting, or running through all your data gathering information or performing some calculated change on a field, is lightning-fast.</P><LI><P>Simplicity. The speed means there's no need for indexes; this in turn contributes to speed, as there's no double-bookkeeping when a value is changed. A database file consists simply of its data, plus some display information in a compact binary form. Panorama's files are therefore small (typically less than half the size of the same information kept in FileMaker). They're also safe - I can see my data with a text editor, and could extract it in an emergency.</P><LI><P>Volatility. Think how many times you've accidentally changed some data in FileMaker, only to discover it has written the change out to disk. Panorama writes nothing to disk until you say so. Combined with Panorama's raw speed, this encourages free experimentation - if something goes wrong, you can always revert to the saved version. So volatility is a virtue. Indeed, volatile manipulation of data is a standard Panorama technique; you might add a field, fill it with data, do something based on the results, and delete the field again, without ever saving.</P></UL><P><STRONG>Ways of Seeing</STRONG> -- Panorama provides three ways of looking at a database: the data sheet, forms, and the design sheet.</P><UL><LI><P>The data sheet is essentially a grid or table showing all your data: each row is a record, each column is a field. The data sheet is a great comfort and convenience; it's the simplest place to edit data, and you can always return to it for an overview of your data to make sure it's safe.</P><LI><P>Forms are custom views that you create. They're like windows in an application. What data appears in a form, and how, is up to you. You design a form in a graphical mode whose features in some ways surpass most drawing programs I've used; for example, there are truly superb ways to select an object and adjust its size precisely even in very cluttered surroundings, and to adjust multiple objects together. You're given a huge repertory of interface widgets - editable and non-editable fields, buttons, pop-up menus, combo boxes, scrolling lists, table-like matrixes, scrollbars, balloon help, charts, images, movies, and even a remarkably full-featured styled-text editor.</P></UL><P>A form displays data either from one record at a time or from all records arranged vertically. Multiple forms can be open at once; whatever record is displayed or selected in one is automatically displayed or selected in all the others as well. This is a splendid feature (especially in contrast to the contortions you have to go through to make the same thing happen in Helix).</P><UL><LI><P>The design sheet presents the schema of the database: each row is a field, each column is a field property. It's a good place to add or delete fields and to study their workings. Certain structural actions work best here; and having the information spread out before you can be very helpful (contrast the difficulty of drilling into your database's structure with dialogs in FileMaker).</P></UL><P>Panorama is big, but there's no need to learn all of it to start using it effectively. Your journey into its workings may be envisioned in terms of three levels of programming; exactly how you work with your data depends largely on what level of programming you're willing to do. I'll discuss these three levels in turn.</P><P><STRONG>No Programming</STRONG> -- The basic manual activity is of course to enter and edit data. Panorama has many shortcuts to help you. As you type, fields can automatically capitalize and format themselves, auto-initialize themselves, check for duplicates, perform some mild validation, and even auto-complete your typing based on existing values.</P><P>Records can be sorted and sub-sorted. They can be manually rearranged - copied, pasted, duplicated, moved one position forward or backward. They can be deleted, individually or en masse.</P><P>You can search records in two ways - successively (called Finding), and by temporarily hiding non-matches (called Selecting). You can construct a complex search to start with, but you don't have to; instead, you can do a search, and then refine the results with another, and so on. There's no regular-expression support, which is a pity; but there are a couple of mild wildcard characters.</P><P>Panorama can generate summaries and sub-summaries using such operations as total, average, count, and running difference. The summaries are themselves records; you can then show or hide the raw data, making it easy to inspect your results. When you're done with your summaries you just delete them - a good example of Panorama's "volatile" mindset. The implementation is very like an Excel spreadsheet. In fact, like an Excel spreadsheet, you can even generate crosstabulations and graphs! And again, Panorama's speed means there's virtually no penalty for analyzing your data using these features.</P><P>Data can be munged in further ways. You can do a find-and-replace within a field, in one record or all of them. You can apply sequential auto-numbering throughout a field. You can copy field values into the empty fields below them (called Propagate), or reverse this and put an empty value in any field where the value above is identical (Unpropagate). You can search for duplicates and easily eliminate them.</P><P>Repeating fields (with multiple values per record) are handled well. Each repetition is a separate field, but the form of the field name (e.g. Price1, Price2, and so on) tells Panorama they go together. If you make a structural change to one, Panorama offers to change them all. The result is that in simple one-to-many situations your database needn't be relational.</P><P>Panorama can also print labels and reports, whose layout and details can be greatly customized.</P><P><STRONG>Functional Programming</STRONG> -- Panorama provides some 200 built-in functions for manipulating data. In various contexts, you can type expressions consisting of one or more of these functions; a hierarchical menu lists them all, to help you type them. There are functions to perform arithmetical, statistical, logical, or date operations, or manipulate text. Other functions get information about the database, access the clipboard, read files and resource forks, and transform graphical structures (these are most likely to be used as part of a procedural program). Finally, "lookup" functions match information between databases, making them relational.</P><P>A typical use of functional programming is to associate a functional expression with a field. Just as in a spreadsheet, when a value on which the function depends changes, the new result becomes the field's value. (Such a field is not, however, a "calculation field." The function's action merely enters a value; you are free to enter a different value manually.) You can also use formulas to generate values throughout a field, to do a find-and-replace, or to construct a complex search expression.</P><P>Formulas can also be used in forms. A text-display widget, for example, can display the result of a formula (e.g., the firstname field, a space, and the lastname field). In contrast to FileMaker, there is no need to overpopulate your data with extra calculation fields; the calculation takes place in the form itself, where it belongs.</P><P><STRONG>Procedural Programming</STRONG> -- Panorama's second programming language is procedural, meaning that scripts (procedures) constructed with it consist of a sequence of commands. The language is unique to Panorama, but you can create automations without actually learning it: a menu listing all procedure commands helps you enter them, and a recording facility lets you translate many actions into procedural commands. Still, it's worth learning, since despite a certain crude simplicity it's extremely powerful and quite ingenious. You type a procedure as text in an ordinary window - a huge relief, in contrast to FileMaker's dialog-based script construction. There are facilities for interactive debugging.</P><P>Procedural commands can modify and manipulate data, database structure, and even interface widgets in forms. They can put up customizable dialogs, open and close databases, manipulate windows, import and export data, and manipulate file data and resources. In short, procedural commands can make Panorama do just about anything you could make it do with the mouse and keyboard, and then some. Procedural commands are also the key to scripting Panorama externally; you construct a procedure as text and send it to Panorama with the "do script" AppleScript command.</P><P>Procedures can define variables. These can have any of five different scopes, ranging from purely local and temporary to a "permanent" variable that is automatically saved with the database. (Contrast FileMaker, whose only variables are fields.) You can set a variable's value through assignment or through a form widget, and you can use it in a formula. Thus variables are an important way to collect information and pass it around. For example, a pop-up menu widget gets its menu items from a variable; change that variable's value and you change what items will appear the next time the user pops up the menu.</P><P>Procedures can be triggered in various ways. They can be chosen from a customizable menu. They can be associated with an interface widget in a form, such as when a button is pressed. There are also procedure triggers that respond to more indirect user actions. For instance, recall our example about the text widget that displays the firstname field, a space, and the lastname field. One might attach a procedure to be triggered when the user finishes editing the text; the procedure would break up the text and assign its pieces to the firstname field and the lastname field. Thus the display and entry of a name is presented to the user naturally, as a whole name, even though storage behind the scenes uses a firstname and a lastname field.</P><P>That example gives only an inkling of what's possible. With the procedural language plus the form widgets you're essentially writing a programmed interface with a database back end (like HyperCard); the range of what you can do is astounding. Panorama comes with various tools and examples that show this. There's a calendar/reminder tool, a calculator, a stopwatch, and a mail-merge tool; there are tools to help import and export data, and to arrange or resize your database's windows; there are tools for testing functions, for listing a form's interface widgets, and for searching your procedure code. Many of these tools don't seem like databases, but that's what they are - even the Panorama <EM>installer</EM> is a Panorama database! Thus the Panorama milieu is a tool-making environment supplemented by tools made in that environment (again, extremely HyperCard-like).</P><P>Procedures can call one another and can contain sub-procedures. A value in a procedure can be an expression constructed from the functional language. But there's a major asymmetry: a functional expression cannot call a procedure. I regard this as a major flaw in Panorama, and quite unnecessary.</P><P><STRONG>Learning Curve</STRONG> -- Getting started with Panorama is easy. It's one of those programs where 80 percent of users probably use only 20 percent of the power, and you can pick up that 20 percent quickly. There's a 200-page PDF tutorial, or you can watch a couple of hours of charmingly amateurish QuickTime movies that will have you up and running in no time. There are also 70 example databases.</P><P>Deeper understanding, though, comes only at the expense of mind-numbing study and wrist-numbing mouse-clicking. Panorama is accompanied by an 1,800-page manual and a 900-page reference, both PDFs. This material, while engagingly written, is tedious, partly for its sheer bulk, and partly because the order is uninstructive (though mostly logical). For example, although the reference explains built-in procedures and functions, many important aspects of the language, such as output patterns and commands sent to interface widgets, are documented only in scattered locations in the manual.</P><P>Most other matters end up scattered too; the whole manual reads like a gigantic forward reference, where we're forever being told that such-and-such a matter will be explained eventually, but it takes forever to get there. For instance, take text editor widgets. The important facts about them appear in four widely separated regions of the manual! The whole manual is like this; it needs reorganization by a teacher.</P><P><STRONG>Conclusions</STRONG> -- Have I communicated just what I find so wonderful about this program? It's the fact that my data feels safe and is easy to check on. It's the ingenious anticipation of my needs. It's how the workings of my databases are easy to track down. It's the generosity of the supplied examples. It's the fact that easy things are easy and hard things are not that hard, in contrast with other database programs where you have to dance all around the moon to get certain things done. Ultimately, it's the total programmability, which makes me feel I could build anything I like, even to the point of rendering redundant several other programs I already have. (For example, I suspect you could build a better Boswell - a text snippet keeper - using Panorama.)</P><P><<A HREF="http://db.tidbits.com/article/06441">http://db.tidbits.com/article/06441</A>></P><P>Still, Panorama is quirky. The main trouble seems to be that Panorama's core dates back to a time when many Macintosh conventions weren't yet fixed, combined with a reluctance on ProVue's part to change things later on. For example, there is no File -> New menu item; Command-W closes a database, not merely a window; to cancel data entry in a field, you type Command-Period, not Escape (but this is fixed in 4.0.1). The form widgets are not Appearance Manager-savvy, dialogs are maddeningly modal, and there are many tiny cosmetic interface glitches. Some features must be accessed by holding a modifier as you choose a menu item, but the menu item doesn't change to tell you what will happen. Many form widgets have been superseded by newer versions, but the older versions are still present and are used by default. In general, Panorama seems to have grown by accretion rather than evolution.</P><P>Another problem is that many potential users may be put off by the lack of compatibility with existing tools. Even folks who don't like their current database program may not wish to switch when a significant investment is involved. A friend to whom I raved about Panorama pointed out that a Panorama that used a FileMaker-compatible scripting object model would be easy for him to switch to, but this Panorama is not. Similarly, all your SQL knowledge won't do you a bit of good in working with Panorama. Finally, there's the issue of Web connectivity; ProVue makes a WebSTAR plug-in and a utility for querying databases and returning HTML, and this technology is used in some very fast dynamic Web pages, but it isn't part of the basic package, and it's very hard to learn that it exists (you get it by purchasing a "Conference CD", but a search at ProVue's own Web site for "CGI" turns up nothing).</P><P><<A HREF="http://www.provue.com/Documents/ProVUE_Conf_CD_Sets/ProVUE_Conf_CD_Sets.html">http://www.provue.com/Documents/ProVUE_Conf_CD_ Sets/ProVUE_Conf_CD_Sets.html</A>></P><P>These things are a pity, but from my perspective they are outweighed by Panorama's virtues. This program rewards and deserves exploration. I'm delighted with it, and am using it more and more heavily. I recommend it to your consideration.</P><P>Panorama requires a PowerPC Macintosh and System 7.6 or later. On Mac OS X, it runs fine under Classic. The base cost of Panorama is $300, though complete pricing is complex. The Image Pack (to display non-PICT images) is $15. The Personal License - allowing Panorama to be used on more than one machine - is $30. Various options for distributing databases to other users without their having to purchase a full version of Panorama are available; for example, for $25 you can make a database run as freeware in conjunction with a free version of Panorama. There is also a multi-user client/server version available, for an extra charge which starts at about $125 per user and gets cheaper (per user) as the number of users rises. You can download and try an unregistered full-featured version that puts up an annoying dialog whenever you save a database larger than 250 records. The basic download is about 4 MB; a full installation (including all documentation and examples) occupies about 80 MB of hard disk.</P><P><<A HREF="http://www.provue.com/download.html">http://www.provue.com/download.html</A>></P><!-- Seeing the Light with Panorama Matt Neuburg --></div>
  697.         
  698.  
  699.         <!-- end article text -->
  700.     
  701.         
  702.         <!-- PayBITS -->
  703.         
  704.  
  705.         
  706. <p> </p><div class="sponsorbox">
  707. <div class="sponsortext"><A HREF="http://www.usefulfruit.com/tb"><IMG SRC="http://db.tidbits.com/images/badges/pear-note-icon50x50.png" ALT="" HEIGHT="50" WIDTH="50" BORDER="0" ALIGN="left"></A>Pear Note 2: More complete, understandable notes on your Mac.<br />Typed notes are blended with recorded audio, video, and slides<br />to create notes that make more sense when you need them most.<br />Learn more at <<a href="http://www.usefulfruit.com/tb">http://www.usefulfruit.com/tb</a>>!</div>
  708. </div>
  709. <div class="sponsorbox_bottom"> </div>
  710.  
  711.  
  712.         <!-- comments section -->
  713.         
  714.         <!-- end comment show-->
  715.         
  716.         <!-- end comments section -->
  717.  
  718.  
  719.         <!-- end article loop details -->
  720.         
  721.         
  722.  
  723.         
  724.     </div><!-- end show article -->
  725.     
  726.     
  727.  
  728.  
  729. <!-- article_plus end -->
  730. <!--
  731. </DIV>
  732. --><!-- end main_column DIV -->
  733.  
  734.  
  735. <!-- google_ad_section_end -->
  736.  
  737. </div><!-- end center AJAX insert -->
  738.  
  739. <!-- TipBITS Search Results Lozenge -->
  740. <div id="tipbits_results_loz" style="display:none">
  741. <form method="post" onsubmit="return false" id="tipbits_form_loz" name="tipbits_form_loz" action="noaction.cgi">
  742. <div class="tip_footer">
  743. <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>
  744. </div>
  745. <div class="tip_footer_bottom">
  746.  </div>
  747. </form>
  748. </div><!-- end TipBITS Search Results lozenge -->
  749.  
  750.  
  751.  
  752.  
  753. <!-- begin footer -->
  754. <div id="footer">
  755.  
  756. <div id="qr_tag_right"><div id="qr_tag_image"><img src="http://db.tidbits.com/tags/6641.png"></div><div id="qr_tag_text"><a href="http://db.tidbits.com/article/10616">What's this image?</a></div></div>
  757. <p>Special thanks to <a href="http://www.forest.net/">digital.forest</a>, our
  758. Web and mailing list host.</p>
  759. <p>Unless otherwise noted, this article is copyright © 2001 <a href="/author/Matt%20Neuburg">Matt Neuburg</a></p>
  760. <p>TidBITS is copyright © 2010 TidBITS Publishing Inc.</p>
  761. <p>Reuse governed by <a href="http://www.tidbits.com/terms/">Creative Commons License</a>.</p>
  762.  
  763. <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>
  764.  
  765. </div><!-- end footer -->
  766.  
  767.  
  768. </div> <!-- end centercolumn -->
  769.  
  770. <div class="center_bottom"> </div>
  771.  
  772. </div> <!-- end centercolumn_border -->
  773.  
  774.  
  775. </div> <!-- end content_container -->
  776.  
  777. </div> <!-- end mainbody -->
  778.  
  779.  
  780. <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
  781. </script>
  782. <script type="text/javascript">
  783. _uacct = "UA-276924-3";
  784. urchinTracker();
  785. </script>
  786. <script type="text/javascript"
  787. src="http://tidbitscom.skimlinks.com/api/skimlinks.js"></script>
  788. <script type="text/javascript">
  789. var skimlinks_pub_id = '2559X585851';
  790. var skimlinks_domain = 'go.tidbits.com';
  791. skimlinks();
  792. </script>
  793. </body>
  794. </html>
  795.  
  796.