Goodies to Go (tm)
September 8, 2003-- Newsletter #249

By Vince Barnes



Goodies to Go (tm)
September 8, 2003--Newsletter #249

This newsletter is part of the internet.com network.
http://www.internet.com
 


Featured this week:

* Goodies Thoughts - Solving The Dynamic Dilemma
* Q & A Goodies
* News Goodies
* Goodies Peer Reviews
* Feedback Goodies  
* And Remember This...

 


 

Goodies Announcement

Just in case you missed it before, 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 - Solving The Dynamic Dilemma



In Goodies To Go #247 (See http://www.htmlgoodies.com/letters/247.html) I mentioned that DynDNS.org and TZO.com both provide Dynamic DNS services. I want to clarify something which I thing is confusing, maybe even a little misleading. The article concerned the problems associated with the dynamic IP address usually provided by broadband ISPs. The difficulties start when you want to have a website, an FTP or Game Server or some other server system on your own computer that people on the Internet can get to. When your IP address changes they have to wait for notification from you before they can get to it again. Additionally, many of these ISPs block port 80, the Web port, to prevent people from running web servers behind their connections. Dynamic DNS provides a solution and "Port Forwarding" rounds it out. For many, these solutions solve the problems, but I want to clarify the limitations of the services I mentioned and suggest an alternative. From here on I am going to assume that you have read the original piece so that I don't repeat myself.

First let me say that Broadband AOL works a little differently, and it may be that none of these solutions will work for its subscribers.

The free service offered by dyndns.org may well be sufficient for your needs. If this is the case, that's great -- you can't beat the price! Let's take a closer look, however, at the premium services they each offer. If you're not familiar with DNS, check out the HTML Goodies home page (see http://www.htmlgoodies.com) -- there's a new article going up about DNS basics.

Dyndns.org offers "custom DNS" (sm of dyndns.org) which "allows you to control an entire domain through an intuitive web-based interface" as they say on their home page. Within this domain you can create any number of host records that are updated dynamically. You can also (manually) create a variety of other DNS records within your domain using either their "basic" (easy) or "advanced" (know what you want) interfaces. They also offer an "account upgrade" to the free service, which you can find by navigating through one of their product pages to their pricing page. This allows for the addition of twenty hostnames to the five already included in the free service. At less than 50 cents per year each, this is not a bad deal. If I wanted a few hostnames within my own domain name to be dynamic, I would set up an account with dynamic hostnames under their domain names, and alias my hostnames to them (assuming that I already have DNS services for my domain somewhere.) For more than twenty-five hosts, or for the convenience of keeping all the DNS for my domain in the same place, I would use the custom DNS offering. Thus the dyndns.org offering is quite attractive.

Tzolkin Corporation, a.k.a. tzo.com, offers their basic service for $24.95 and their premium service for $59.95. Each of these only allows for the dynamic direction of a single hostname within the domain. Yes, that also applies to the $59.95 offering. That is their charge for redirecting one name to one IP address using your domain name! I have to say that I was most surprised when their technical support person told me this, and had to have them repeat it several times. Maybe you can think of a reason to pay $59.95 rather than fifty cents or less.

If you are looking for somebody to host your DNS for you, dozens of the DNS registrars out there will be happy to provide you that service, though those that I have looked at also want you to have the domain registered through their or transferred to their service. If you transfer, you also get another year added to your service so that it doesn't hurt too much! I have mentioned Directnic.com before -- they charge $5/year for DNS hosting and provide an easy to use interface.

One more thing.... I was speaking with Chris at Dyndns.org, who was telling me that they have had problems with the dynamic DNS clients built in to the Linksys and Netgear routers. I am going to experiment with them a little and will give you a quick update in next week's newsletter. You can still use one of the other client programs available through their site (at no cost) which would run on your PC behind the router. I will probably try out one or two of them also and I'll let you know how it goes.
 

Thanks for Reading!
 

- Vince Barnes

 

Top

Q & A Goodies

Questions are taken from submissions to our Community Mentors. You can ask a Mentor a question by going to http://www.htmlgoodies.com/mentors.



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 exists 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.




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 tutorial about Paypal here: http://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.



 

 

 

 

Top

News Goodies


Microsoft Debuts Office Online
[September 8, 2003] Replacement for Office Tools on the Web site allows Office 2003 users to access user resources directly from their applications.

Click here to read the article


 

RIAA Files 261 Lawsuits Against Alleged Music Pirates
[September 8, 2003] Music trade group promises 'subsequent waves of litigation' for those who ignore amnesty offer.

Click here to read the article

 

 

Apple Polishes Up iMac, iPod
[September 8, 2003] The computer maker opts for faster G4 chips in its 'lamp-shaped' desktop models as well as beefing up its music player to be able to hold up to 10,000 songs.

Click here to read the article

 

 


Judge Says AdWare is Legal
[September 8, 2003] In a blow to Web site operators' claims against adware makers, a federal judge says WhenU's pop-up ad-delivery method is perfectly legal.

Click here to read the article

 


 

Broadcom and Philips Reduce Power & Size
[September 8, 2003] The two chip makers have each announced their own low power 802.11b chipsets for use in handheld phones and PDAs, with Broadcom offering one of the WLAN world's Holy Grails: A completely single-chip solution.

Click here to read the article

 

 

Researcher: IE Cumulative Patch Inadequate
[September 8, 2003] Secunia is warning that a variant of the 'Object Data' vulnerability is being actively exploited.

Click here to read the article

 

 

Intel Fawns Over Itanium 'Deerfield'
[September 8, 2003] The chipmaker fills vendor's requests to make processors that could fit in with a customer's two and four-way system low-power dual processor plans.

Click here to read the article

 

 

Wireless Firm Files Follow-On, Eyes Acquisitions
[September 8, 2003] Wall Street may not be ready for new telecom IPOs, but LCC Int'l believes there's interest in secondary offerings for proven companies.

Click here to read the article



 

Spoke Builds on Social Networking Patent Portfolio
[September 8, 2003] Rather than re-invent the wheel, the new company is bolstering its sales productivity software with new technology that protects user privacy.

Click here to read the article

 

 


Microsoft Settles Anti-Trust Charges with Be
[September 8, 2003] Settlement reached, Microsoft agrees to pay Be more than $23 million.

Click here to read the article

 

 

 

 

 

 


Top

Goodies Peer Reviews


 

Every week a site selected each week 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 http://www.htmlgoodies.com/peerreviews
 

 

 


Top

Feedback Goodies



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 http://www.htmlgoodies.com/mentors/


From all the feedback it is very clear that almost everybody has suffered from, as is pretty fed up with spam. Many thanks to all of you who wrote in with suggestions for techniques for dealing with it. Ideas ranged from software offerings to methods for garnering internetional (that's a typo, but I kinda like it!) cooperation for legislative controls. It is certainly a problem for every Internet user, no matter where on the planet you are.

The Internet has grown up as a result of the cooperative efforts of those who use it, however, and so I personally am most in favor of solutions that are implemented by those same users. This is why I really like these anti-spam software solutions. The more these get implemented, the less effective spam will become. The less effective it is, the less incentive there will be to use it. That's what I like -- a solution that we can bring about ourselves without involving lawyers all over the place!

Thanks again for all your feedback!

 


Windows Tech Goodie of the Week:


Populating the TreeView Control from a Database

Populating the TreeView Web Control from a database allows menu and input trees to change on the fly. Don Schlichting provides an introduction to the TreeView and then provides detailed steps for populating the tree from a database using ADO.NET

http://www.15seconds.com/issue/030827.htm


** and **
 


A Script to Teach You About Using Forms with ASP

Here's a script that was designed for no purpose other then
to teach new ASP users about using forms. If you're new to
ASP or even if you just need a refresher course on form handling, you've got to take a look at this script.

http://www.asp101.com/resources/visitors/index.asp#formtest
 


 

 

Top
And Remember This . . .


On this day in...

1664 New Amsterdam Surrenders


The Dutch East India Company had created the colony of New Netherland in 1624. To make it legal, the land on which it stood was purchased from the indigenous peoples for some trinkets. In 1664 the Dutch Governor of the Colony, Peter Styvesant, was hoping to resist the English who came to take over. Because he was so unpopular, however, none of his fellow colonists came to his aid and he was forced to surrender. The English squadron of 300 soldiers, led by Colonel Richard Nicolls, had been organized by the Duke of York, after whom the colony was renamed as New York. When the Manhattans realized what the Dutch had meant by "property" that they had exchanged for about $24 in trinkets they attempted to retake their land. The ensuing war, which started in 1641, cost a thousand lives. The Netherlands briefly regained the colony in 1673 and lost it again in 1674. In 1686 the city received a Royal Charter - the first in the colonies. After the American Revolution it became the first capitol of the United States.


Today was also the day that: in 1380 the Russians defeated the Tatars at Kulikovo; 1858 Abraham Lincoln explained who you can fool and how much of the time you can fool them; 1900 6,000 people died when a hurricane destroyed Galveston Texas; 1943 Italy surrendered to the allies; 1944 the first German V-2 rocket - the "Flying Bomb" - lands in England; 1966 "Star Trek" premiers on NBC-TV; 1974 President Gerald Ford pardoned former president Richard Nixon of all federal crimes;

Born today were: in 1157, Richard I of England (Richard the Lionheart); 1841 Czech composer Antonin Dvorjak; 1921 Welsh actor/comedian Harry Secombe; 1922 comedian Sid Ceasar; 1925 actor comedian Peter Sellers; 1932 country singer Patsy Cline; 1938 US Senator Samm Nunn; 1971 playmate Christy Thom (?!)

 


Thanks for reading Goodies to Go!

 

Archive Home Page.



Make a Comment

Loading Comments...

  • Web Development Newsletter Signup

    Invalid email
    You have successfuly registered to our newsletter.
  •  
  •  
  •  
Thanks for your registration, follow us on our social networks to keep up-to-date