Goodies to Go ™
September 13, 2004–Newsletter #302
This newsletter is part of the internet.com network.
http://www.internet.com
Featured this week:
* Goodies Thoughts – Text Edit vs
WYSIWYG
* Q & A Goodies
* News Goodies
* Goodies Peer Reviews
* Feedback Goodies
* Windows Tech Goodies
* And Remember This…
Goodies Announcement
The new Beyond HTML Goodies book
is now available!
Go beyond the basics
and learn how the pros add and use dynamic HTML features and advanced
JavaScript techniques. Beyond HTML Goodies demonstrates dozens of new and
different features readers can add to their existing Web pages using HTML and
JavaScript. The book starts with simple text and image tips, such as adding a
clock to a Web page or causing text to appear when the mouse moves over an
image. It gradually builds to more complex tricks, including manipulating forms
or working with cookies behind the scenes. Throughout the book, readers enjoy
Joe’s snappy style and “to the point” discussion of each “goody” in the book.
http://books.internet.com/books/0789727803
Goodies Thoughts – Text Edit vs WYSIWYG
"And in the blue corner, weighing in at a colossal 2.5 megs, we
have the WYSIWYG world champion….." and so the battle continues! It is, of
course, the battle between the proponents of using text editors to manually code
web pages, and those who support the use on WYSIWYG (What You See Is What You
Get) editors. The debate continues unabated — as do the questions being sent
in, which is why I thought I’d address the issue once more in this newsletter.
So who’s right? Everybody, I think! If you want to drive a nail, you’re better
off with a hammer than a screwdriver, but for screws, a hammer just doesn’t do a
good job. To get everything done the best way you can, you need both.
An answer like this looks on the surface as though it’s simply designed to
please as many people as possible, so I thought that the best way to explain my
opinion is to describe the merits of each. In this way you will hopefully be
able to see under which circumstances each shines the brightest.
Text editors are the purist’s choice. Using a text editor you write your own
html code from scratch. There are, however, some specialized text editors that
provide various levels of assistance with that endeavor. My personal favorite is
UltraEdit (http://www.idmcomp.com)
although there are several other high quality text editors available. I wrote
more about this in an earlier newsletter, which you can find in the archive,
here:
https://www.htmlgoodies.com/letters/203.html
The main advantages with text editors come from the fact the the author has to
know their html code, and because they do, they don’t have to surrender any
control to the editor. Basically this means that if you wish to implement a
particular design, for example, a complex nest of tables, you don’t have to hope
that the editor can understand which table you wish to have nested inside which
cell, how you want them aligned and so on. You simply write the code the way you
want it and the job gets done.
Of course, the text editor method requires that you know the html codes you need
to use to get that job done (which is where HTML Goodies steps in!)
WYSIWYG editors, such as FrontPage, Dreamweaver and the host of others available
in the marketplace, have their own advantages too. First and foremost, they are
almost always faster (for the average task.) A WYSIWYG editor provides a
graphical representation of you web page as you create it. In fact, you would
usually be creating the page right on the graphical representation.
Using such and editor means that you have to know what you want on the page, as
opposed to the codes that create what you want on the page. There are
limitations, however. There are circumstances where you may wish to add
something to your page which the editor doesn’t easily understand. The nested
tables I mentioned before may be such an example. These editors have come a long
way in improving their ability to understand what you want, but there are still
those occasions where it’s hard to get to to behave.
The better of these editors, including the ones I named here, also provide the
ability for you to switch to a code view of the page, allowing you to use a text
editor mode for that tricky code, and having allowed you to do so, leave the
code you wrote alone, exactly as you wrote it (something which early versions
didn’t do, thereby earning themselves a bad name among purists.)
When I’m working on my house, I find the need for both screwdrivers and hammers.
When I’m working on websites, I similarly find the need for both WYSIWYG and
text editors. The trick is to learn to apply the right tool to the particular
job at hand.
Thanks for Reading!
– Vince Barnes
Q & A Goodies
Questions are taken from submissions to our Community Mentors. You can ask a Mentor a question by going to
https://www.htmlgoodies.com/mentors.
Q. I am trying to make a simple search form with one text field and one
button next to it on the top, and the search result table underneath. The
problem is that some users don’t necessarily click on the "Search" button (to
trigger the search action page), but rather hit the enter key after they type
something in the text box. This causes the form page to reload and they get no
result from the search. I am sure there is a simple solution to this; I’ve tried
everything I could think of, but with no success. Any help would be much
appreciated.
A. That happens when you only have one text box on a form. You could try
adding some hidden elements or disable the enter key for the text box. For
example:
function disable_enter(e)
{ if(document.all) // detect IE only
{var keycodec = event.keyCode}
else
{var keycodec = e.which}
if(keycodec==’13’) // check for ascii code of enter key
{return false;} }
<input type="text size="10" name="txta" onKeyPress="return disable_enter
(event)">
Q. I am starting to design web-pages and wanted to know what would I need
to start a small e-commerce site. I want it to be database driven.
A. First you need to know if your server supports database driven sites
and if so, what type. If your host uses a UNIX server then it should support PHP
and PERL. If your server is a Windows server then it supports ASP. Once you
figure which one, you can then look for a shopping cart that will work on your
particular server. Your host may even offer a cart for you to use. Ask them
first. The next is to start testing cart available on the internet. Do a search
on Google and then test drive them. Make a list of what you might want in a cart
and see which ones offer what you need.
If you do not want host your own shopping cart, you can look into something like
Paypal (http://www.paypal.com).
HTMLGoodies has a tutorail about Paypal here:
https://www.htmlgoodies.com/beyond/paypal.html
They do all of the shopping cart work for you. You add some code to your site to
use their cart. They do get a percentage of the sale but I am not sure how much.
Q. I’ve been having trouble getting 2 image flips to work on the same
page. I took the script straight from htmlgoodies. I got one of the images to
work by itself but when I set up the other one the first one stopped working and
when I rolled over it the second image would rollover instead.
A. Here is a script example that works with multiple image flips:
<html>
<head>
<title>Image Flip</title>
<script language="JavaScript">
function flip(img,imgn)
{
document.images[imgn].src=img
}
</script>
</head>
<body>
<a href="somepage.html" onmouseover="flip(‘1.gif’,’pica’)"onmouseout="flip(‘0.gif’,’pica’)"><img
src="0.gif" name="pica" border="0"></a><br>
<a href="somepage.html" onmouseover="flip(‘3.gif’,’picb’)"onmouseout="flip(‘2.gif’,’picb’)"><img
src="2.gif" name="picb" border="0"></a>
</body></html>
(Ryan, who sent in this question, shared with us his work and so I have included
it in its entirety — entirely untested! Jim’s answer follows. This is quite an
interesting piece of work and I’m sure that many of you will be able to make
great things out of it. — Thanks, Ryan! — Ed.)
Q. I’ve created a drop-down menu on a geocities site using JavaScript.
The code for the menu is within a frame that we would like to keep in place. I
was wondering if there is anyway to allow the drop-down to
transcend frames because as it exsists now the drop-downs cannot be fully
displayed. Thanks in advance for your help and time. The code
for the drop-down is as follows:
<center><script language="JavaScript" type="text/JavaScript"> var
isDHTML = 0; var isID = 0;
var isAll = 0;
var isLayers = 0;
<!–//
function leapto(form) {
var planlist=form.destination.selectedIndex;
parent.main.location.href=(form.destination.options[planlist].value);
planlist = 0;
// reset pulldown menu;
}
//–>
if (document.getElementById) {isID = 1; isDHTML = 1;}
else {
if (document.all) {isAll = 1; isDHTML = 1;}
else {
browserVersion = parseInt(navigator.appVersion);
if ((navigator.appName.indexOf(‘Netscape’) != -1) && (browserVersion
==
4)) {isLayers = 1; isDHTML = 1;}
}}
function findDOM(objectID,withStyle) {
if (withStyle == 1) {
if (isID) { return (document.getElementById(objectID).style) ; }
else {
if (isAll) { return (document.all[objectID].style); }
else {
if (isLayers) { return (document.layers[objectID]); }
};}
}
else {
if (isID) { return (document.getElementById(objectID)) ; }
else {
if (isAll) { return (document.all[objectID]); }
else {
if (isLayers) { return (document.layers[objectID]); }
};}
}
}
var menuTop = 45;
var menuLeft = 400;
var domSMenu = null;
var oldDomSMenu = null;
var t = 0;
var lDelay = 3;
var lCount = 0;
var pause = 400;
function popMenu(menuNum){
if (isDHTML) {
//// Sets the previous menus visibility to hidden
t = 2;
if (oldDomSMenu) {
oldDomSMenu.visibility = ‘hidden’;
oldDomSMenu.zIndex = ‘0’;
t = 2;
lCount = 0;
}
///// Defines the DOMs of the menu objects
var idMenu = ‘menuHead’;
var domMenu = findDOM(idMenu,0);
var idMenuOpt = ‘menuHead’ + menuNum;
var domMenuOpt = findDOM(idMenuOpt,0);
var idSMenu = ‘menu’ + menuNum;
var domSMenu = findDOM(idSMenu,1);
///// Defines the positions of the sub-menus
if (isID || isAll) {
var menuLeft = (domMenu.offsetLeft) + (domMenuOpt.offsetLeft) – 6;
var menuTop = (domMenu.offsetTop) + (domMenu.offsetHeight) – 1;
}
if (isLayers) {
var menuLeft = document.layers[idMenu].layers[idMenuOpt].pageX – 5;
var menuTop = domMenu.pageY + domMenu.clip.height – 5;
}
///// Positions and shows the menu
if (oldDomSMenu != domSMenu) {
domSMenu.left = menuLeft;
domSMenu.top = menuTop;
domSMenu.visibility = ‘visible’;
domSMenu.zIndex = ‘100’;
oldDomSMenu = domSMenu;
}
///// Resets oldDom if it is the same as the current DOM
else { oldDomSMenu = null; }
}
////// Returns a ‘null’ value for non-DHTML Browsers
else { return null; }
}
function delayHide() {
///// Checks to see if there is a menu showing and whether ///// the
global variable ‘t’ has been set to 0
if ((oldDomSMenu) && (t == 0)) {
///// Hides the old menu, resets menu conditions,
///// and stops the function running
oldDomSMenu.visibility = ‘hidden’;
oldDomSMenu.zIndex = ‘0’;
oldDomSMenu = null;
lCount = 0;
return false;
}
///// Interupts the function if another menu is opened
if (t == 2) { lCount = 0; return false; }
///// Repeats the function adding 1 to lCount each time until /////
lCount is equal to lDelay and then sets ‘t’ to 0 so that ///// the
menu will hide when it runs again
if (t == 1) {
lCount = lCount + 1;
if (lDelay <= lCount) { t = 0; }
if (lDelay >= lCount) { setTimeout(‘delayHide(‘ + t +
‘)’,pause); }
}
}
</script>
<br>
<div id="menuHead" class="menuStyleTop" style="position: relative;">
<span class="spacer"> | </span>
<a id="menuHead1" class="menuLink" href="" onMouseOut="t = 1;
delayHide(); return true" onMouseOver="popMenu(1); return
true">News</a> <span class="spacer"> | </span>
<a id="menuHead2" class="menuLink" href="" onMouseOut="t = 1;
delayHide(); return true" onMouseOver="popMenu(2); return true">Who We
Are</a> <span class="spacer"> | </span>
<a id="menuHead3" class="menuLink" href="" onMouseOut="t = 1;
delayHide(); return true" onMouseOver="popMenu(3); return
true">Media</a> <span class="spacer"> | </span>
<a id="menuHead4" class="menuLink" href="" onMouseOut="t = 1;
delayHide(); return true" onMouseOver="popMenu(4); return
true">Events</a> <span class="spacer"> | </span>
<a id="menuHead5" class="menuLink" href="" onMouseOut="t = 1;
delayHide(); return true" onMouseOver="popMenu(5); return
true">Links</a> <span class="spacer"> | </span>
<a id="menuHead6" class="menuLink" href="" onMouseOut="t = 1;
delayHide(); return true" onMouseOver="popMenu(6); return
true">Email</a> <span class="spacer"> | </span>
<a id="menuHead7" class="menuLink" href="" onMouseOut="t = 1;
delayHide(); return true" onMouseOver="popMenu(7); return
true">Guestbook</a> <span class="spacer"> | </span>
</div>
<div id="menu1" class="menuStyle">
<a class="menuLink" onMouseOut="t = 1; delayHide(); return true"
onMouseOver="t = 2; return true" onClick="t = 0; delayHide();"
href="news.html" target="unter">Current</a> <a class="menuLink"
onMouseOut="t = 1; delayHide(); return true" onMouseOver="t = 2;
return true" onClick="t = 0; delayHide();"
href="mayjunearchives.html" target="unter">May-June Archives</a> <a
class="menuLink" onMouseOut="t = 1; delayHide(); return true"
onMouseOver="t = 2; return true" onClick="t = 0; delayHide();"
href="maraprarchives.html" target="unter">March-April Archives</a>
</div> <div id="menu2" class="menuStyle">
<a class="menuLink" onMouseOut="t = 1; delayHide(); return true"
onMouseOver="t = 2; return true" onClick="t = 0; delayHide();"
href="about.html" target="unter">Bio</a>
<a class="menuLink" onMouseOut="t = 1; delayHide(); return true"
onMouseOver="t = 2; return true" onClick="t = 0; delayHide();"
href="about.html" target="unter">Gear</a>
</div>
<div id="menu3" class="menuStyle">
<a class="menuLink" onMouseOut="t = 1; delayHide(); return true"
onMouseOver="t = 2; return true" onClick="t = 0; delayHide();"
href="sightsandsounds.html" target="unter">Pictures</a>
<a class="menuLink" onMouseOut="t = 1; delayHide(); return true"
onMouseOver="t = 2; return true" onClick="t = 0; delayHide();"
href="sightsandsounds.html" target="unter">MP3’s</a>
<a class="menuLink" onMouseOut="t = 1; delayHide(); return true"
onMouseOver="t = 2; return true" onClick="t = 0; delayHide();"
href="sightsandsounds.html" target="unter">Etc.</a>
</div>
<div id="menu4" class="menuStyle">
<a class="menuLink" onMouseOut="t = 1; delayHide(); return true"
onMouseOver="t = 2; return true" onClick="t = 0; delayHide();"
href="events.html" target="unter">Upcoming</a>
<a class="menuLink" onMouseOut="t = 1; delayHide(); return true"
onMouseOver="t = 2; return true" onClick="t = 0; delayHide();"
href="events.html" target="unter">Past</a>
</div>
<div id="menu5" class="menuStyle">
<a class="menuLink" onMouseOut="t = 1; delayHide(); return true"
onMouseOver="t = 2; return true" onClick="t = 0; delayHide();"
href="http://www.geocities.com/kevin_ikari15/index.htm" target=_new>Street
Team</a>
<a class="menuLink" onMouseOut="t = 1; delayHide(); return true"
onMouseOver="t = 2; return true" onClick="t = 0; delayHide();"
href="links.html" target="unter">Other Bands</a>
<a class="menuLink" onMouseOut="t = 1; delayHide(); return true"
onMouseOver="t = 2; return true" onClick="t = 0; delayHide();"
href="links.html" target="unter">Sweet Labels</a>
<a class="menuLink" onMouseOut="t = 1; delayHide(); return true"
onMouseOver="t = 2; return true" onClick="t = 0; delayHide();"
href="links.html" target="unter">Venues</a>
</div>
<div id="menu6" class="menuStyle">
<a class="menuLink" onMouseOut="t = 1; delayHide(); return true"
onMouseOver="t = 2; return true" onClick="t = 0; delayHide();"
href="mailto:drumboy011@yahoo.com">Andrew</a>
<a class="menuLink" onMouseOut="t = 1; delayHide(); return true"
onMouseOver="t = 2; return true" onClick="t = 0; delayHide();"
href="mailto:remmiws42@hotmail.com">Eric</a>
<a class="menuLink" onMouseOut="t = 1; delayHide(); return true"
onMouseOver="t = 2; return true" onClick="t = 0; delayHide();"
href="mailto:leonheart08@hotmail.com">Evan</a>
</div>
<div id="menu7" class="menuStyle">
<a class="menuLink" onMouseOut="t = 1; delayHide(); return true"
onMouseOver="t = 2; return true" onClick="t = 0; delayHide();"
href="http://geocities.yahoo.com/gb/sign?member=nopointsscored"
target=_new>Sign</a>
<a class="menuLink" onMouseOut="t = 1; delayHide(); return true"
onMouseOver="t = 2; return true" onClick="t = 0; delayHide();"
href="http://geocities.yahoo.com/gb/view?member=nopointsscored"
target=_new>View</a>
</div>
<style>
body { margin: 0px; }
#menuHead {
background-color: #000000;
top: 5px;
left: 0px;
z-index: 50;
margin-top: 5px;
margin-bottom: 5px;
font-family: Verdana;
font-size: 8pxpt;
font-weight: normal;
color: #FFFFFF;
width: 100%;
height: 22px;
border-top-style: solid;
border-bottom-style: solid;
border-width: 1px;
border-color: #000000;
padding-left: 5px;
}
#menu1,#menu2,#menu3,#menu4,#menu5,#menu6,#menu7
{
position: absolute;
z-index: 100;
visibility: hidden;
width: 150px;
}
.menuStyle {
font-family: Verdana;
font-size: 8pxpt;
font-weight: bold;
border: 1px solid #000000;
color: #FFFFFF;
background-color: #000000;
width:160px;
text-align: left;
}
.menuStyle a {
font-family: Verdana;
font-size: 8pxpt;
font-weight: normal;
color: #FFFFFF;
background-color: #000000;
display: block;
margin: 0;
padding: 3px;
padding-left: 8px;
}
.menuStyle a:link { color: #FFFFFF; background-color: transparent;
width: 150px; }
.menuStyle a:visited { color: #FFFFFF; background-color: transparent;
width: 150px; }
.menuStyle a:hover { color: #990033; background-color: #FFFFFF; width:
150px;}
#menuHead a:link { color: #FFFFFF; background-color: transparent; }
#menuHead a:visited { color: #FFFFFF; background-color: transparent; }
#menuHead a:hover { color: #990033; background-color: transparent; }
.spacer
{
color: #000000;
background: transparent;
padding-left: 2px;
padding-right: 2px;
}
</style>
A. If I understand you correctly you want to have the dropdown display
across frames. That cannot happen because the code for the dropdown is actually
in a separate window so to speak and will reside in that window within the main
window which holds the separate frames. You will have to make the frame that
holds the menu larger to display the whole menu or go without frames and use a
server side language such as Perl or PHP to include the code in each document.
News Goodies
IBM Donates Voice Code to Apache
[September 13, 2004] UPDATED: Partners such as Avaya are
looking to build speech apps that can run on anyone’s platform.
Click
here to read the article
IBM Debuts Power5 Server Line for Linux
[September 13, 2004] The Linux-only server line is geared to hit
the entry-level sweet spot for customers seeking an alternative
to Unix..
Click here to read the article
CA Overhauls Key Storage Management Line
[September 13, 2004] The newer versions are positioned to better compete
with rivals EMC, Veritas.
Click
here to read the article
Digital Evolution Buys Flamenco Networks
[September 13, 2004] Another company finds itself consumed by
the hotly contested market for Web services management software.
Click here to read the article
Nortel Embraces Virtual Enterprise
[September 13, 2004] A slew of upgrades using SIP-based help
workers collaborate no matter where they are.
Click here to read the article
RFID Makes Its Mark
[September 13, 2004] A standard marking system will identify smart tags at a
glance.
Click here to read the article
Thriving in Redmond’s Shadow
[September 10, 2004] UPDATED: ISVs hope to prosper in the spaces between
Microsoft’s big feet.
Click here to read the article
Court Bounces Pa. Online Child Porn Law
[September 10, 2004] Pennsylvania measure ruled a violation of
constitutionally protected free speech.
Click here to read the article
Population Explosion!
[September 10, 2004] ClickZ Stats has updated its list of the global online
populations, with some new figures for the number of Internet Users, Active
Internet Users, and other data.
Click here to read the article
A Virtual Work-Around The RNC
[August 27, 2004] With a swath of downtown NYC closed to traffic and
gridlock on the horizon, workers plan on taking their business to the
Internet.
Click here to read the article
Every week a site is selected for review. Each week,
reviews of the previous week’s selected site are chosen for
publication on the HTML Goodies website.
The current week’s selected site is published in Goodies To
Go and in the Peer Reviews section of the website.
Current contact email addresses for submitting your site and
for submitting reviews are published in Goodies To Go.
If you would like to have your site reviewed, sign up for
the Goodies To Go newsletter in the Navigation Bar on the
left side of this page.
For full details about this program, see
https://www.htmlgoodies.com/peerreviews
Did you ever wish your newsletter was an easy two way communications medium?
Ploof! It now is!
If you would like to comment on the newsletter or expand/improve on something
you have seen in here, you can now send your input to:
mailto:nlfeedback@htmlgoodies.com
We already receive a lot of email every day. This address will help us sort out
those relating specifically to this newsletter from all the rest. When you send
email to this address it may wind up being included in this section of the
newsletter, to be shared with your fellow readers.
Please don’t send your questions to this address.
They should be sent to our mentors: see
https://www.htmlgoodies.com/mentors/
For those who are missing Peer reviews: we are once again
revising the Peer review program in the hopes of creating a
workable solution. The current plan is to move the new Peer
Review pages into place in the new year. All those who have
been selected for reviews in the past will be featured in
the new pages. The new method will make it much easier for
your peers to provide feedback and much easier for us to
handle the publication side of things. "Watch this space!"
It’s coming soon!!
Those who missed last week’s newsletter will be able to find
it in the archive at
https://www.htmlgoodies.com/letters — sorry for
the hurricane induced confusions! Frances was relatively
gentle on my house, but caused trouble with floods and flood
induced power outages. Many thanks to all of you who sent me
your best wishes as the storm approached – your thoughts are
kind and most appreciated.
Thanks again for all your feedback!
Top
Windows Tech Goodie of the Week:
Custom Object Data Binding with .NET
http://www.15seconds.com/issue/040908.htm
Developers often use brute force coding to marshal data
between the GUI and application objects. In this article,
Luther Stanton explains how to use .NET’s out-of-the-box
data-binding functionality to make this job much easier.
*** AND ***
Validating Email Addresses with ASP
http://www.asp101.com/articles/hojjat/mxlookup/default.asp
Too often email validation stops at simply checking that the
text submitted contains the "@" and "." characters, but for
many applications this really isn’t good enough. This
article starts by breifly explaining the situation and then
walks you through building a page that takes an email
address and checks its validity by performing a MX lookup on
the address’s domain.
Top
And Remember This . . .
On this day in…
1971 Massacre at Attica
On September 9, 1971, rioting prisoners took control of
Attica State Prison near Buffalo, New York. While State
Police were able to retake control of most of the facility,
almost 1,300 inmates held the "D Yard" exercise field, where
they held 39 guards hostage. After four days of fruitless
negotiations, New York State Governor ordered the State
Police to retake control of the yard by force. At about 9:45
in the morning of September 13, 1971, police helicopters
fired tear gas into the yard while police and corrections
officers stormed the yard with guns blazing. They fired over
3,000 rounds blindly into the smoke filed yard. When the
guns fell silent, 29 inmates and 10 of the hostages were
dead, 89 more were injured. Most were shot during the
initial raid, but some were shot after they surrendered.
Authorities first tried to blame the inmates for the
hostages’ deaths, but autopsies later showed that they all
died from the bullets fired by police. In the week following
the riot, inmates faced brutal reprisals from guards,
including beating with nightsticks and being forced to crawl
naked over broken glass. Injured inmates were denied
adequate medical attention. In January 2000, New York State
settled with inmates who brought a class action lawsuit. The
settlement amount was $8million.
Today was also the day that in: 122 construction
began on Hadrian’s wall; 1788 New York City became
the capitol of the USA; 1849 Tom McCoy was the first
US prizefighter killed in a fight; 1882 Britain
invaded Egypt; 1949 the Ladies Pro Golf Association
was formed in New York City; 1965 the Beatles
released "Yesterday"; 1970 IBM announced the System
370 computer; 1983 the US mint struck the "Olympic
Eagle" — the first US gold coin in more then 50 years;
1990 Iraqi troops stormed the French Ambassador’s
residence in Kuwait; 1991 a 55 ton concrete beam in
Montreal’s Olympic Stadium fell;
Born today were: in 1857 chocolatier and
philanthropist Milton S. Hershey; 1860 US WWI
commander Gen John J (Blackjack) Pershing; 1904
actress Gladys George; 1912 actress Rita Shaw;
1913 actor Roy Engle; 1920 actress Carole
Mathews; 1924 actor Scott Brady; 1931 actress
Barbara Bain; 1939 US presidential press secretary
Larry Speakes (born with the name for the job!); 1944
English actress (Winifred) Jacqueline Bisset; 1948
actress Nell Carter; 1965 son of Richard Starsky
(Beatle Ringo Star) Zak Starsky; 1971 daughter of
Paul & Linda McCartney Stella Nina McCartney;
Thanks for reading Goodies to Go!