<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://davidjberman.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>DavidJBerman.com</title><link>http://davidjberman.com/blogs/</link><description>An online community of advocacy and support of entrepreneurial ventures</description><dc:language>en-US</dc:language><generator>CommunityServer 2007 (Build: 20416.853)</generator><item><title>Digitize Yourself!</title><link>http://davidjberman.com/blogs/useful_software/archive/2008/08/12/digitize-yourself.aspx</link><pubDate>Tue, 12 Aug 2008 21:21:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:324</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;Digitize Yourself in ASCII text letters like this or in color:&amp;nbsp; &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.text-image.com/index.html" title="Text-Image.com" target="_blank"&gt;http://www.text-image.com/index.html&lt;/a&gt; &lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;font&gt;&lt;font color="BLACK"&gt;dddddmMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNMNyssssssyyyyyydNNMMMMMNNMMNNNNNNMNNNMNmhyyyyyyyyyy&lt;br /&gt;ddddddNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNmmmmmmNNNNMmyyyyyyyhhhyyydNNNMMMMNNNNNNNNNNNNNNNNNmmNNNNNNNNN&lt;br /&gt;ddddddNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNmNNNNMmyyyyyyyhhhhhydNNNMMMMNNMNNMNNNMNNNNNNMMMMMMMMMMMM&lt;br /&gt;ddddddNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNmmNmmNmyhhhhhhhhhhhhmNNMMMMNNMMNNMMNNMNNNNMMMMMMMMMMMMMM&lt;br /&gt;ddddddNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNmmddmddmmdhddmdmddddmddddmNNNMMMMMMMMMMMMMMMMMNMMMMMMMMMMMMMM&lt;br /&gt;ddddddNMMMMMMMMMMMMMMMMMMMMMMMNNNNNmmmmNmmmNmddmNmddmmmmNNNNmmmmNNNNNMMMMMMMMMMMMMMMMMMNMMMMMMMMMMMM&lt;br /&gt;ddddddmNMMMMNNMMMMMMMMMMMMMNNNmmmmmNNNmNNNNNmmmdddmmmmmmNNNNdmddNNNdmNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMM&lt;br /&gt;ddhhhhmNMMMMNNMMMMMMMMMMMMNNNNNNNNNNNmdmmmmddmmdddyhmmddmmmmdNmmNNdhhmmNNMMMMMMMMMMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhhhhmNMMMMMNNMMMMMMMMMMNNNNNNNmmdhddmmmddhyssshhsoyddyhddddmmmdhddmmmmNNMMMMMMMMMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhhhhmNNMMMMNNMMMMMMMMNNNNNNNmmmmdddhyyhhhhhhhsyyso+oooshhyhdmdyydmmddmNNMMMMMMMMMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhhhhdNNMMMMNNMMMMMMMNNNNNNmdmmmmmmmmdhhhyyyhyysoosso/:oyyhhhhhyyhdddddmNNNMMMMMMMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhhhhdNNMMMMNNMMMMMMNmmNNmmNNNmmmdmmdhyss+////+/:::::-.-://+++++osyyhddmNMMMMMMMMMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhhhhdNMMMMMNNMMMMMNmmmmmmdmNmmmddhhys+//:-..`...............---:/+osyhmNMMMMMMMMMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhhhhdNMMMMMNNMMMMMNmmmddddmmmdddyyo+::-...``````..............---:/oydmNMMMMMMNNMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhhhhdNMMMMMNNNMMMMmmmmddmmmmddhhyso/:-..........................--:/ydmNMMMMMMNNMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhhhhdNMMMMMNNNMMMNNmmmmdddddddhhyo++:--..........................---/yNNMMMMMMNNMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhhhhhNNMMMMNmNMMMMNdmmmmdddddhdhso++/:---.....`````````...........--:+dNMMMMMMNNMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhhhhhmMMMMMNmNMMMMNmmNmmmmddddhyso+/::---.......`````````.......-::/+oymNMMMMMMMMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhhhhhmMMMMMNmNNMMMNNNNNNNmmdhhys+/::::::://:::://://::-.......-:+ssso+sdNMMMMMMNMMMNmmmmNNNNNNNNNM&lt;br /&gt;hhhhhhhmNMMMMNmmNMMMMNNNNNNmdhhys+/:::::///:------:::::::-.....-/+oo+/++smMMMMMMNNMMMNdhhhhhyyyyyyhh&lt;br /&gt;hhhhhhhmNMMMMNmmNMMMMMNMNNNmddhyo/:::::::----://++/::::-...``..://oso//shmNMMMMMNNMMMMNNNNmmmdddhhhh&lt;br /&gt;hhhhhhhmNMMMMNmmNMMMMMNhhdmdhddy+/:::::----:/+/oss:`-::---..`..:/:/o+:/oymNMMMMMNNMMMMMMMMMMMMMMMMNN&lt;br /&gt;hhhhhhhdNMMMMNmmNMMMMNy+/+osyhys+::-:--..--://:://..-::.--.....:///::::+odNMMMMMNNMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhhhhhdNMMMMNmmNMMMMNo::::+oso+/::::--...----....--::---.-....-//::::://smMMMMMMMMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhhhhhdNMMMMMmmNMMMMNs::--:/++///:::--............---..........:/:-:::::/hNMMMMNNMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhhhhhdNMMMMMNmmNMMMMh/-...:++///::::-....---..----.............-::----::omMMMMMMMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhddhhdNMMMMMNmmNMMMMmo---.-/+///::::-------------.........--...--:----::/yNMMMMMMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhdddddmMMMMMNmmNMMMMMh/::--:+/////:::-------..........-----.``...:/:--::/yNMMMMMMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhdddddmMMMMMNmmNMMMMMNy/---:/+/://::::::--...`....--.---...-....-/+/-:::+hNMMMMMMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhdddddmMMMMMNmmNMMMMMMNho:-:/+/:://:::::--......-:-....------::/++/:::/+yNMMMMMMMMMMMMMMMMMMMMMMMN&lt;br /&gt;hhhdddddmMMMMMNmmNMMMMMMNNho+++++/::/:::::---..---:..........---:://++/:/yNMMMMMMMMMMMMMMMMMMMMMMMMM&lt;br /&gt;hhhdddddmMMMMMNmmmNMMMMMMMdo///o+//:/::::::-----::---........---:/+o+/--omMMMMMMMMMMMMMMMMMMMMMNNMMM&lt;br /&gt;ddddddddmMMMMMMNNNMMMMMMMMms///+o+///::---------::::::-------::::+so:--+dMMMMMMMMMMMMMMMMMMMMMMNMMMM&lt;br /&gt;mNNNmNNNNNNNNMNNNNNNNNNNNNms//:++++///::------.-:---::::--.....-:+o+::odNMMMMMMMMMMMMMMMMMMMMMMMMMMM&lt;br /&gt;MMMNNNNMNNNNNNNNNNMMNNNNNmds+/:/++/////:-----...-....-------:::::/++/odMMMMMMMMMMMMMMMMMMMMMMMMMMMMM&lt;br /&gt;MNNNNNMMNNNNNNNNNNMNNmdddddy//:/++////+/::----..............--:::/++odMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM&lt;br /&gt;MNNNNMMNNNMNNNNNNMMMMMdhddhy+:::///::////:-----............---:::::+hNMMMMMMMMMMMMMMNmNNNNMMMMMMMMMN&lt;br /&gt;MNNNNMMNNNNNMNMMMMMMMMmddhhhyo/:::/::::///:------............----::omMMMMMMMMMMMMMMMNdddddddmmNNNMMN&lt;br /&gt;MNNNMMMNNNNMMMMMMMMMMMmdhhyhhhyo//::::::////:-----............---::sNMMMMMMMMMMMMMMMMNNNNmmddhhhhddd&lt;br /&gt;NNNNMMMNNNMMMMMMMMMMMNdhyhhyyhhyyso+/:---://++//::::------...---:/odNMMMMMMMMMMMMMMMMMMMMNNNNNmmmddd&lt;br /&gt;MNNNMMNNNMMMMMMMMMMNmddhyyyhyyyhyyyyys+:---:/++ooo++++////:::://oymNMMMMMMMMMMMMMMMMNNNNNMMMMNNNNNNN&lt;br /&gt;MMNNMMNNMMMMMMMMMNNmmddhyyyyyyyyyyysyhhyo/:--::/+ossyyyyssssyhddmddmNMMMMMMMMMMMMMMNmddddmmNNNNNMMMM&lt;br /&gt;MMNMMMNNMMMMMMMMNmdddddhyyyyyyyyyyyyssyyyyso/:-:://++osssssyhmmddhyyhdNMMMMMMMMMMMMNmhhhhhhhhdddmmNN&lt;br /&gt;MMMMMNNNmdmNNNNmmdhhhhhhyyyyyyyyyysyyysyyyyyyso/:-:://+oooo+ydhhhhhyhyhNMMMMMMMMMMMNdhhhhyyyyyyyhhhh&lt;br /&gt;MMMNNNNNdhhdmmmmddhyyhhhyyyyyyyyyyyyyyyssyyyyyyys+/::/+oo+//hmddhhhhhyhNMMMMMMMMMMMNdhhhhyyyyyyyyyyy&lt;br /&gt;MMMNmmmNmhhdmmmmmdhhhhhhyyyyyyyyyyyyyyyyyssyyysyyhyo+/++/::/shdmddhhhhdNMMMMMMMMMMMNdhhhhhyyyyyyyyyy&lt;br /&gt;MMMNmmmmmdddmmmmmddhhhyyhyyyyyyyyyyyyyyyyyssyyyssyyyyys+/::/++shddmmdhhhdNMMMMMMMMMNdhhhhhhyyyyyyyyy&lt;br /&gt;NMMNNNNNNNmmmmmmmmmdhhhhhhhhhyhhhyyyhyyyhyyyyyyyssyyyyyso+/////+shdmmddhhhmMMMMMMMMNdhhhhhhyyyyyyyyy&lt;br /&gt;MMMMMNNNNNmmmmmmdddhyhhyyyyyyhyyyhhyyyhyyyhyyyyyyysyyyyhyyyo+////ohdddddhyhmMMMMMMMNddhhhhyyyyyyyyyy&lt;br /&gt;MMMMNNNmmmmdddddddhyyhyyyyyyyyyyyyhhyyyyyyyyyyyyyyyyshdhhdddys+///+yhhdhhhyhmMMMMMMNmmmddhhhhyyyyyyy&lt;br /&gt;MMMMNMNmmdmddmdddhyyyyyyysssyyyyyyyyyyyyyyyyyyyyyyyyhdhhhhddhhhys+/+syhhhhhydNMMMMMNmddddmmmddhhhhyy&lt;br /&gt;NNNNNNmdmddmdmdddhyyyyssyyysssssyyyyyyyyyyyyyyyyyyyhdhyhhhhhdhhdmdyo+oyyyhhhhmNMMMMNmddmmddddddmddhh&lt;br /&gt;NNNNNmdddddmdmddhyssyyyyyyyyyysssssyyyyyyyyyyyyyyydhhhhhhhhhhdhhdddhyosyhhhhhhdNMMMNmddddddmmmdddddd&lt;br /&gt;NNNNNmddddhddmdhyyysyysssssyyhhhhyyyyhhyyyyyyyyyyhhyyyhhhhhhhhddddhhddhyhdhyhhhdmMMMmddddddmNmmmmmmd&lt;br /&gt;NNMNNdhhhhddddhyyyyyyhhhhhhhhhyyyyyssyyyyyyyyyyhhhhyyyyyhyhhhhhdddddddddhddhhhhhdmMMMNNNmddmNNNNNmmd&lt;br /&gt;NNMNmdddddddhhhhhhyyhhhhhhhyyyyyyyyyssssyyyhyyyyhyydyydyyhyyhhdhddddddddddmmdhhhhdmNNNNNNNNNNmNNNNNN&lt;br /&gt;MNNmmmmdddddhhhyhhyhhhhyhhhyyyyyyssyyyyysssyyyyyyhyydyhdhhdhhhyhhhhhddddmddmmdhhdhdmmmmmNmNNNNNNNNNN&lt;br /&gt;MMNmmmdmdhhmdhdhhyyhhhyyyyhhyyyyyyyyyyyyyhyssyyssosyyyyydhhdhhdhhhyyyhhddmmmmmdddddmmmmmmmmNNNNNmNNN&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=324" width="1" height="1"&gt;</description></item><item><title>How to detect a mobile web browser using ASP.NET 2.0</title><link>http://davidjberman.com/blogs/csharp/archive/2008/04/10/how-to-detect-a-mobile-web-browser-using-asp-net-2-0.aspx</link><pubDate>Thu, 10 Apr 2008 16:20:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:322</guid><dc:creator>Dave</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Today I&amp;#39;m using two mobile devices:&amp;nbsp; The BlackBerry Perl 8130 and
the BlackBerry 8830 &amp;#39;World Edition&amp;#39; phones by Verizion.&amp;nbsp; The 8830 is
larger but has a qwerty keyboard.&amp;nbsp; If I&amp;#39;m actually going to be sending
email from something, this is the choice.&amp;nbsp; For being in touch when on
the go (and I don&amp;#39;t like to carry lots of stuff) the Perl is good.&amp;nbsp; But
when I&amp;#39;m on the train or bored waiting for something, I like to use my
Perl to access some websites, especially my own.&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Both phones come with Research In Motion (RIM)&amp;#39;s built in
browser.&amp;nbsp; It supports images but it&amp;#39;s definitely a mobile browser.&amp;nbsp; It
is designed to display content that fits well on a phone screen. This
is a great interface for getting information quickly from mobile
optimized websites.&amp;nbsp; However, since mobile phones have limited screen
sizes and capabilities, a lot of what your website has to offer just
isn&amp;#39;t good in that environment.&amp;nbsp; &lt;a href="http://www.operamini.com/" title="Opera Mini MObile Browser" target="_blank"&gt;Opera Mini&lt;/a&gt;
is great, it runs on both devices (and many other compatible devices)
and shows you the full web page, which it shrinks down to fit your
screen.&amp;nbsp; You can zoom in on any part of the page and interact with
content that doesn&amp;#39;t have special mobile-enabled programming.&lt;br /&gt;
&lt;/p&gt;&lt;p&gt;Mobile phone bandwidth is increasing all the time, and mobile
device web browsers keep improving, but you don&amp;#39;t want to serve full
javascript enabled, multi-media data to a mobile device; it&amp;#39;s too slow,
and many features won&amp;#39;t work.&amp;nbsp; You know this, which is why you&amp;#39;re
reading this blog post.&amp;nbsp; So if you are an ASP.NET programmer, how do
you detect if the visitor is using a mobile browser?&amp;nbsp;&lt;/p&gt;&lt;p&gt;.NET Framework to the rescue:&lt;/p&gt;&lt;p&gt;HttpContext.Current.Request.Browser will give you a HttpBrowserCapabilities object, which has a property &lt;b&gt;IsMobileDevice&lt;/b&gt;.&amp;nbsp;
The value of this property will be true if a mobile browser is
detected.&amp;nbsp; This method is looking at the http post headers which
disclose the browser and platform information of the device.&amp;nbsp; You could
check these values yourself, but having access to this property is a
lot easier.&amp;nbsp; Be warned, it doesn&amp;#39;t always work because new devices keep
coming out and not every browser brand name is recognized.&amp;nbsp; Here is a
list of officially recognized browsers:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.asp.net/mobile/tested-devices/" title="Compatible Mobile  Browsers" target="_blank"&gt;http://www.asp.net/mobile/tested-devices/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;For
some additional information on detecting mobile browsers that are not
compatible, and some sample code on how to use both methods, check out
this link:&lt;/p&gt;&lt;p&gt;&lt;a href="http://forums.asp.net/p/474014/1162577.aspx" title="More info on browser detection" target="_blank"&gt;http://forums.asp.net/p/474014/1162577.aspx&lt;/a&gt;&lt;br /&gt;&amp;nbsp;
&lt;br /&gt;&lt;/p&gt;&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=322" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/csharp/archive/tags/ASP.NET+BlackBerry/default.aspx">ASP.NET BlackBerry</category></item><item><title>Optimizing your ASP.NET 2.0 website performance</title><link>http://davidjberman.com/blogs/csharp/archive/2008/04/10/optimizing-your-asp-net-2-0-website-performance.aspx</link><pubDate>Thu, 10 Apr 2008 16:05:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:321</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I just discovered this great article on &lt;a href="http://www.codeproject.com" title="The Code Project" target="_blank"&gt;codeproject.com&lt;/a&gt; for optimizing ASP.NET 2.0 website performance:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx" title="10 ASP.NET Performance and Scalability Secrets" target="_blank"&gt;http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx&lt;/a&gt; by Omar Al Zabir titled &lt;u&gt;10 ASP.NET Performance and Scalability Secrets&lt;/u&gt;&lt;b&gt;.&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I wanted to pin it on my blog so this article doesn&amp;#39;t get missed.&amp;nbsp; There is some good practical information here on how to tweak your ASP.NET configuration for improved performance.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=321" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/csharp/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>SEO - A Case Study: QuoteACopier.com</title><link>http://davidjberman.com/blogs/seo/archive/2008/04/03/seo-a-case-study-quoteacopier-com.aspx</link><pubDate>Thu, 03 Apr 2008 17:18:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:320</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;b&gt;This post talks about applying search engine optimization strategies to web pages, while working in parallel with a content designer. &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Recently I was contacted by web designer who built QuoteACopier.com.&amp;nbsp; The owners of the site want to increase awareness about their services for providing pricing information and advice to buyers of digital copiers.&amp;nbsp; The website wasn&amp;#39;t coming up anywhere in search results and they asked me to take a look at the site to see what could be done to improve search engine page rank. &lt;br /&gt;&lt;br /&gt;The company provides good information, but they typically deliver this information on the phone.&amp;nbsp; In order for search engines to be aware of the value they offer customers, this content needs to be brought to the web.&amp;nbsp; As always, the golden rule of building optimized web pages is to make specific pages that provide valuable information to the people who are looking for it. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;There were two challenges&lt;/b&gt;:&amp;nbsp; To improve search engine visibility, and to organize the site in such a way that the work to optimize the page is separate from the design of the page, so that the design could easily be changed with minimal impact to the optimization work.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The website was built using ASP (not ASP.NET).&amp;nbsp; To separate the design from the optimization, we created a template and used ASP server side includes.&amp;nbsp; We also made a piece of code to read content from .htm files and insert that content at the right places.&amp;nbsp; This allowed us to make one page that had layout in the right places, and the content in separate .htm files.&amp;nbsp; That makes it easy for the designer to use any tools to work on the HTML, and the SEO analyst to design the structure of the page.&lt;/p&gt;&lt;p&gt;The template has a header section, title section, and body section.&amp;nbsp; The header section contains a place holder for meta keywords and meta description tags.&lt;/p&gt;&lt;p&gt;Once the template was made, we made one page for each phrase that the customer wanted to match a customer search.&amp;nbsp; For example, if the customer enters &amp;#39;prices on copiers&amp;#39;, the customer would land on the &lt;a href="http://quoteacopier.com/quoteacopier/prices-on-copiers.asp" title="prices on copiers" target="_blank"&gt;prices on copiers&lt;/a&gt; page of the QuoteACopier.com site.&amp;nbsp; The template places the content elements of the page in the intended places, and allows designers to work in parallel.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=320" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/seo/archive/tags/SEO/default.aspx">SEO</category></item><item><title>New website: softwarethatdoesntsuck.com - From idea to deployment in 30 minutes</title><link>http://davidjberman.com/blogs/useful_software/archive/2007/10/17/new-website-softwarethatdoesntsuck-com-from-idea-to-deployment-in-30-minutes.aspx</link><pubDate>Wed, 17 Oct 2007 20:55:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:317</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Today I launched a new website, softwarethatdoesntsuck.com, because we need &lt;a class="" title="Software that doesn&amp;#39;t suck" href="http://softwarethatdoesntsuck.com/" target="_blank"&gt;software that doesn&amp;#39;t suck&lt;/a&gt;.&amp;nbsp; The idea behind the site is to have a forum where people can post links to software that is good, and links to software that should be avoided, with an explantation of why.&lt;/p&gt;
&lt;p&gt;This post however, is really about &lt;strong&gt;improving efficiency to pursue new ideas&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;As an Entrepreneur, you probably have many ideas.&amp;nbsp; You probably have more ideas than you can pursue, because each venture&amp;nbsp;requires time and money.&amp;nbsp; However, if you can create&amp;nbsp;ventures&amp;nbsp;affordably enough (in terms of time and money) then you can pursue more ventures.&amp;nbsp; You never know which venture is going to be the successful one in advance!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Lets talk about operating efficency here for a minute, because this website is all about improving entrepreneurship.&amp;nbsp; Forgetting the particulars of what the site content is about, the thing that&amp;#39;s impressive about this site for entrepreneurs is that I got this website up in 30 minutes.&amp;nbsp; That includes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div&gt;Registering the domain name&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Creating the website on my server&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Setting up e-mail accounts&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Creating a database to power the website&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Configuring the website&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Setting up forums on the software that users can post on&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Creating content for the home page&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Registering the&amp;nbsp;domain name&amp;nbsp;cost me less than $20 for a year.&amp;nbsp; I could have registered it for less but I paid extra for private / anonymous registration.&amp;nbsp; Since I have my own server, throwing another site on it doesn&amp;#39;t cost me anything.&lt;/p&gt;
&lt;p&gt;So how did I do it so quickly?&amp;nbsp; These are the ingredients of my process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;An account with GoDaddy.&amp;nbsp; I login, enter the name of my&amp;nbsp;new website and pay.&amp;nbsp; Then I click on the nameservers tab and configure the site to use the nameservers GoDaddy already has on file.&amp;nbsp; Since GoDaddy supports bulk operations on domains, if I ever need to move my domains to a new server&amp;nbsp;I can do that in a few seconds.&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;A dedicated server with domain management software.&amp;nbsp; Software like Helm, or Plesk or others let you log in via web browser and register a new domain with the server.&amp;nbsp; The software creates all the folders for you and lays everything out.&amp;nbsp; Now you have an empty site. The management software lets you manage security permissions, create e-mail address accounts and more.&amp;nbsp; It also automatically sets up for you DNS server, MAIL server and an online statistics package so you can monitor how your site is performing.&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;A content management system, in this case Community Server.&amp;nbsp; When you use a CMS you don&amp;#39;t need to design and program a website.&amp;nbsp; Out of the box you have something that looks nice.&amp;nbsp; You login through your web browser to configure it and add content using an editor that&amp;#39;s a lot like Microsoft Word.&amp;nbsp; Now you can add or edit content at any time without being dependant on a designer / programmer.&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;A database server.&amp;nbsp; CMS systems need a database to store your content.&amp;nbsp; You can use free servers like MySQL (which you can also manage using Plesk / Helm using your web browser).&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Since I now have these great tools at my disposal, and I use them over and over again as a cookie-cutter for each new site I setup, I become familiar enough with the applications to do what I need to do quickly.&lt;/p&gt;&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=317" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/useful_software/archive/tags/Software/default.aspx">Software</category><category domain="http://davidjberman.com/blogs/useful_software/archive/tags/Entrepreneurship/default.aspx">Entrepreneurship</category><category domain="http://davidjberman.com/blogs/useful_software/archive/tags/process/default.aspx">process</category><category domain="http://davidjberman.com/blogs/useful_software/archive/tags/website/default.aspx">website</category></item><item><title>How to create asynchronous ASP.NET pages using C#</title><link>http://davidjberman.com/blogs/csharp/archive/2007/08/13/how-to-create-asynchronous-asp-net-pages-using-c.aspx</link><pubDate>Mon, 13 Aug 2007 18:13:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:315</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;IIS combined with ASP.NET provides many technologies to improve performance and scalability.&amp;nbsp; IIS provides a pool of threads so that it can server many requests simultaneously.&amp;nbsp; The pool has a limited number of threads in it, and once they are used up additional requests can start to pile up.&amp;nbsp; Keeping the total number of active threads down is an attempt to prevent too many active threads from consuming all of the available CPU time.&amp;nbsp; However, with today&amp;#39;s data intensive websites, much of the time threads are tied up waiting for an external resource such as a request from a web service or from a database.&amp;nbsp; Asynchronous pages in ASP.NET can boost performance in these situations by enabling threads in the pool to be used to serve additional requests while an operation is waiting for an external resource request to complete.&lt;/p&gt;
&lt;p&gt;Suppose you have a website with two web pages.&amp;nbsp; One is your home page which display&amp;#39;s a greeting, and the second page displays a large dataset from a database.&amp;nbsp;&amp;nbsp;You have 25 threads in your thread pool.&amp;nbsp; 25 people simultaneously are accessing the database query page, and one additional person comes onto the site to see the home page which has static content on it.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Compare these two scenarios:&lt;/p&gt;
&lt;p&gt;Synchronous database driven page:&amp;nbsp; While everyone is waiting for the dataset to load, all available threads are in use so the 26&lt;sup&gt;th&lt;/sup&gt; request for the home page becomes blocked.&lt;/p&gt;
&lt;p&gt;Asynchronous database driven page: &amp;nbsp;While 25 requests are waiting for data from the database, those threads are returned to the pool for work.&amp;nbsp; When the 26&lt;sup&gt;th&lt;/sup&gt; request comes in for the home page, that page is returned immediately.&amp;nbsp; As the datasets are returned the threads are drawn out of the thread pool to finish serving the pages.&amp;nbsp; The result is that the threads spend much more time available to serve requests.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Here are two good pages for getting started with asynchronous ASP.NET pages:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Asynchronous ASP.NET Page Processing by Peter Bromberg&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.eggheadcafe.com/articles/20060918.asp"&gt;http://www.eggheadcafe.com/articles/20060918.asp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Use Threads and Build Asynchronous Handlers in Your Server-Side Web Code by Fritz Onion&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/03/06/threading/default.aspx"&gt;http://msdn.microsoft.com/msdnmag/issues/03/06/threading/default.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;After reading these and some other articles, here is a piece of code to get you started.&amp;nbsp; I put this together to process a job in the background as a generic pattern.&amp;nbsp; I wrap my big job in a delegate so that I can get an IAsyncResult object back.&amp;nbsp; This simplifies things, because in most examples I read you get this by calling a web service asynchronously but this isn&amp;#39;t always what you want done.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Step 1: &amp;nbsp;Make an empty asp.net page.&amp;nbsp; Add &lt;b&gt;async=&amp;quot;true&amp;quot; &lt;/b&gt;to the @Page tag in the .aspx file.&lt;/p&gt;
&lt;p&gt;Step 2: &amp;nbsp;In the class code, declare a delegate&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;public delegate void AsyncTaskDelegate();&lt;/p&gt;
&lt;p&gt;Step 3: &amp;nbsp;Declare a member variable in the class to prevent the delegate from going out of scope&lt;/p&gt;
&lt;p&gt;&amp;nbsp;AsyncTaskDelegate _runnerDelegate = null;&lt;/p&gt;
&lt;p&gt;Step 4:&amp;nbsp; Create a method that will be run asynchronously:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;public void DoJob()&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; this.GridView1.DataSource = GetDatasetFromDatabase();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.GridView1.DataBind();&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;/p&gt;
&lt;p&gt;Step 5:&amp;nbsp; Tell the framework you want your job run.&amp;nbsp; You can put this in Page_Load or in a response to a button click / postback:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Register async methods&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddOnPreRenderCompleteAsync(&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new BeginEventHandler(OnBegin),&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new EndEventHandler(OnEnd)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/p&gt;
&lt;p&gt;Step 6: &amp;nbsp;Add the event to kick off the delegate and run the job asynchronously.&lt;/p&gt;
&lt;p&gt;IAsyncResult OnBegin(object sender, EventArgs e, AsyncCallback cb, object state)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _runnerDelegate = new AsyncTaskDelegate(this.DoJob);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IAsyncResult result = _runnerDelegate.BeginInvoke(cb, state);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return result;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Step 7: &amp;nbsp;&amp;nbsp;Add an event handler for after the request finishes &lt;/p&gt;
&lt;p&gt;void OnEnd(IAsyncResult ar)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _runnerDelegate.EndInvoke(ar);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;All together, it looks like this:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;public partial class Async : System.Web.UI.Page&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public delegate void AsyncTaskDelegate();&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AsyncTaskDelegate _runnerDelegate = null;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IAsyncResult OnBegin(object sender, EventArgs e, &lt;/p&gt;
&lt;p&gt;AsyncCallback cb, object state)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _runnerDelegate = new AsyncTaskDelegate(this.DoJob);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IAsyncResult result = _runnerDelegate.BeginInvoke(cb, state);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return result;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void DoJob()&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;this.GridView1.DataSource = new AsyncTaskDelegate(this.DoJob);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; this.GridView1.DataBind();&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void OnEnd(IAsyncResult ar)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _runnerDelegate.EndInvoke(ar);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected void Button1_Click(object sender, EventArgs e)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Register async methods&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddOnPreRenderCompleteAsync(&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new BeginEventHandler(OnBegin),&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new EndEventHandler(OnEnd)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=315" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/csharp/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://davidjberman.com/blogs/csharp/archive/tags/Programming/default.aspx">Programming</category><category domain="http://davidjberman.com/blogs/csharp/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>How to create a console window for a Windows Forms application</title><link>http://davidjberman.com/blogs/csharp/archive/2007/08/06/how-to-create-a-console-window-for-a-windows-forms-application.aspx</link><pubDate>Mon, 06 Aug 2007 20:38:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:314</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Suppose you are writing a GUI application for Windows and you want to be able to debug your applicaiton by sending console output to a console window that opens only if you pass a certain command line argument or are compiled in debug mode.&amp;nbsp; Console.WriteLine sends your output to nowhere very fast.&amp;nbsp; If you want to have a console window, here is how you do it:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Inside one of your classes insert this reference to the AllocConsole method in kernel32.dll:&lt;/p&gt;
&lt;p&gt;[DllImport(&amp;quot;kernel32.dll&amp;quot;)]&lt;br /&gt;public static extern Int32 AllocConsole();&lt;/p&gt;
&lt;p&gt;Now just call MyClass.AllocConsole() if you want a console for output and voila, there you go!&amp;nbsp; All output to Console now appears in your console window.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=314" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/csharp/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>How to access command line arguments</title><link>http://davidjberman.com/blogs/csharp/archive/2007/08/06/how-to-access-command-line-arguments.aspx</link><pubDate>Mon, 06 Aug 2007 20:32:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:313</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;In a C# Windows Application or Console Application, you may want to access arguments passed to your application via the Command Line.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;This is actually very easy to do.&amp;nbsp; All you have to do is modify your Main() method to take in an array of strings:&lt;/p&gt;&amp;nbsp;&lt;strong&gt;static void Main(string[] args)&lt;/strong&gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach(string arg in args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(String.Format(&amp;quot;Arg: {0}&amp;quot;, arg);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp; }&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=313" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/csharp/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>Recover pictures from digital camera flash memory cards</title><link>http://davidjberman.com/blogs/useful_software/archive/2007/07/02/recover-pictures-from-digital-camera-flash-memory-cards.aspx</link><pubDate>Mon, 02 Jul 2007 19:50:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:312</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table cellpadding="2" cellspacing="0"&gt;&lt;tr&gt;&lt;td&gt;&lt;img src="http://www.z-a-recovery.com/images/logo.gif" title="ZAR Logo" alt="ZAR Logo" height="94" width="195" /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.z-a-recovery.com/images/logo.gif" title="Zero Assumption Digital Image Recovery" target="_blank"&gt;Zero Assumption Digital Image Recovery&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;&lt;a href="http://www.z-a-recovery.com/digital-image-recovery.htm" title="Recover deleted or damaged files from digital camera flash memory cards" target="_blank"&gt;Recover deleted or damaged files from digital camera flash memory cards&lt;/a&gt; &lt;br /&gt;&amp;nbsp;&lt;br /&gt;I popped my xD flash memory card out of my digital camera and popped it into my computer.  Windows XP spontaneously reboots.  I try to put the card back in my camera and now my camera says there are no photos on the card!!&lt;/p&gt;
I did some searching and I found a utility that recovers digital images from your flash memory cards and the software is free.  Download Zero Assumption Digital Image Recovery.  There is a pay version of the software, but that is for recovering files from other types of storage; the recover images from flash memory cards feature is enabled for free in the trial version.
&lt;p&gt;I&amp;#39;m really glad this company released this software.  There are a lot of products out there that try to charge you money for you to get your data back.  The pictures are worth more than the camera.  You can always replace a camera, but you can&amp;#39;t replace pictures once they&amp;#39;re really gone.&lt;/p&gt;
&lt;p&gt;With the card still in my digital camera, I plugged my digital camera into my computer&amp;#39;s USB port and ran this software.  The utility instantly found my memory card and with one mouse click it scanned the card and found and recovered my pictures.  It&amp;#39;s easy to use and works very well.  A must-have for anyone who takes pictures with digital cameras.&lt;/p&gt;&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=312" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/useful_software/archive/tags/Recover+Data/default.aspx">Recover Data</category><category domain="http://davidjberman.com/blogs/useful_software/archive/tags/Photography/default.aspx">Photography</category><category domain="http://davidjberman.com/blogs/useful_software/archive/tags/Software/default.aspx">Software</category></item><item><title>How to use the BIRT Reporting Engine for Eclipse</title><link>http://davidjberman.com/blogs/birt_reporting/archive/2007/03/16/How-to-do-things-that-should-be-easy-using-BIRT-_2800_but-aren_2700_t_21002900_.aspx</link><pubDate>Fri, 16 Mar 2007 13:45:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:249</guid><dc:creator>Dave</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;BIRT, the Business Intelligence Reporting Tool for Java, is a powerful open source reporting platform.&amp;nbsp; It&amp;#39;s a good tool but it has bugs and an overall lack of good documentation and support.&amp;nbsp; However, if you spend time with it to learn it&amp;#39;s ins-and-outs then you&amp;#39;ll discover it&amp;#39;s very easy to do things with it once you know what to do!&lt;/p&gt;

&lt;p&gt;In this blog I&amp;#39;m going to document some of the things that I think are important fundamental tasks in BIRT that were a lot harder than they should have been to get working.&amp;nbsp; My hope is that I&amp;#39;ll save you many days of struggle and frustration by providing some quick answers here. &amp;nbsp;&lt;/p&gt;

&lt;p&gt;I&amp;#39;d like to add first that I&amp;#39;m no expert in BIRT, and I certainly don&amp;#39;t provide support for it.&amp;nbsp; Also, much of what I&amp;#39;ve learned and have posted here is due to the help I&amp;#39;ve received from others. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. How to get help using BIRT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It&amp;#39;s great if you have a forum to ask questions and have them answered. The best resource out there right now for learning to use BIRT and resolving problems is the USENET group news.eclipse.org; subscribe to the e.birt group.&amp;nbsp; You can post your questions on the newsgroup and typically your questions will be answered by someone within 24 hours using your favorite Usenet reader.&amp;nbsp; A good free Usenet news reader is &lt;a href="http://www.mozilla.com/en-US/thunderbird/" title="Mozilla Thunderbird" target="_blank"&gt;Mozilla Thunderbird&lt;/a&gt;, from those same people who make the Firefox web browser.&amp;nbsp; You can get more information on how to register for a password for the newsgroup and access the &lt;a href="http://www.eclipse.org/birt/phoenix/community.php" title="Eclipse BIRT Newsgroup here" target="_blank"&gt;Eclipse BIRT Newsgroups here&lt;/a&gt;.&amp;nbsp; Be a good netizen and search the newsgroup before you post your question.&amp;nbsp; &lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. A good reference manual&lt;/strong&gt;&lt;/p&gt;

&lt;table cellpadding="0" cellspacing="1"&gt;

&lt;tr&gt;
&lt;td&gt;&lt;br /&gt;
&lt;/td&gt;

&lt;td&gt;It really helps to have a decent book on BIRT to get you started.&amp;nbsp; This book is a good first step on how to do many tasks BIRT.&amp;nbsp; However, it isn&amp;#39;t good enough on it&amp;#39;s own, that&amp;#39;s why I&amp;#39;m writing this post.&amp;nbsp; I suggest you use it as one of the tools in your arsenal when you start working with BIRT. &amp;nbsp; (Disclosure: If you buy the book from this link to Amazon, a few pennies get thrown in my tip jar.&amp;nbsp; Thank you!).&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;strong&gt;
3. How to output script debug information to the console&lt;/strong&gt;&lt;br /&gt;


&lt;p&gt;BIRT is a powerful tool because it has lots of events that you can write scripts for.&amp;nbsp; When the event occurs BIRT faithfully runs your script.&amp;nbsp; However, one of the problems that I have with BIRT is if there is something wrong with your script then BIRT stops processing your script for the event and just keeps going, without providing you with any useful feedback at all.&amp;nbsp; I&amp;#39;ve come up with a workaround that lets me display output to the debug console.&lt;/p&gt;

&lt;p&gt;Make a Java class.&amp;nbsp; Call it something like MyLogger.&lt;/p&gt;

&lt;p&gt;package com.davidjberman.birt.mytools;&lt;br /&gt;
&lt;br /&gt;
public class MyLogger {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void log(String comment) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.out.println(comment);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
}&lt;br /&gt;
&amp;nbsp;&lt;/p&gt;

&lt;p&gt;In your BIRT script add an import package statement in the initialize event by clicking on the name of your report file in the Outline view, and then click on the script tab in the Report Design perspective in Eclipse.&amp;nbsp; Select the initialize event from the drop down list at the top of the edit window.&amp;nbsp; Add a line to import your package like this:&lt;/p&gt;

&lt;p&gt;importPackage(Packages.com.davidjberman.birt.mytools);&lt;/p&gt;

&lt;p&gt;Now anywhere inside BIRT you can insert a line to log debug output:&lt;/p&gt;

&lt;p&gt;MyLogger.log(&amp;quot;Hello, world!&amp;quot;);&lt;/p&gt;

&lt;p&gt;This is a big step, you&amp;#39;ve just gone from being in the dark to shedding some light on things.&amp;nbsp; You will now be able to insert lines to output values for debugging, for example: MyLogger.log(&amp;quot;Value of X is &amp;quot; + X);&amp;nbsp;&amp;nbsp;&amp;nbsp; You can also insert lines to display output so you can see exactly how far your script ran before it was interrupted by an error.&amp;nbsp; Finally, you can leverage structured exception handling in BIRT.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. How to catch exceptions in BIRT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;BIRTs way of catching exceptions is slightly different from Java because BIRT uses JavaScript. Here is what I have found as an effective way to catch exceptions in BIRT:&lt;/p&gt;

&lt;p&gt;try { &lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp; DoSomethignNaughty = param[&amp;quot;ThisParamDoesntExist&amp;quot;];&lt;br /&gt;
 &lt;/p&gt;

&lt;p&gt;} catch (Oops) {&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyLogger.log(&amp;quot;Exception accessing report parameter: &amp;quot; + e.message);&lt;/p&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;&lt;em&gt;WARNING: &lt;/em&gt;In my experience BIRT does not always run the code in your catch block if something goes wrong in your Javascript.&amp;nbsp; Sometimes BIRT just stops running your script.&amp;nbsp; Use this approach as one possible tool but be aware of this snafu.&amp;nbsp; If your code isn&amp;#39;t working, add some lines to your script so you can see in your console output if a line of output displayed at the beginning of your script appears and another at the end to see if your script ran all the way through for that particular event.&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. How to access report parameters in BIRT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;BIRT lets you define parameters for processing in your report.&amp;nbsp; These parameters can be passed in by URL query string, for example:&lt;/p&gt;

&lt;p&gt;http://www.davidjberman.com/notarealpage/myreport/?parama=hello&amp;amp;paramb=world&lt;/p&gt;

&lt;p&gt;Inside your script you can access like this:&lt;/p&gt;

&lt;p&gt;MyLogger.Log(params[&amp;quot;parama&amp;quot;] + &amp;quot; &amp;quot; + params[&amp;quot;paramb&amp;quot;]);&lt;/p&gt;

&lt;p&gt;When you declare report parameters in BIRT you can specify some rules about how those parameters must be formatted, and you can even have BIRT pop up a window asking the user to select the desired report parameters before the report runs.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. How to test if a parameter is missing in BIRT&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is a lot harder to figure out than one might expect.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Wrong answer&lt;/em&gt;: &amp;nbsp; if (params[&amp;quot;MyDesiredParameter&amp;quot;] == null) { ... do something ... }&lt;/p&gt;

&lt;p&gt;This does not evaluate to null if you defined the report parameter and it defaults to null.&amp;nbsp; The above logical test will return false but the value of the parameter will still be null.&amp;nbsp; Instead, you have to do this:&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Right answer:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/em&gt;if (params[&amp;quot;MyDesiredParameter&amp;quot;].value == null) { MyLogger.log(&amp;quot;MyDesiredParameter is null!!!&amp;quot;); }&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. How to access parameters in a Scripted DataSet or Scripted DataSource&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Scripted DataSets can have input parameters just like reports can have parameters.&amp;nbsp; This lets you create something called Master-Detail report, also known as a correlated sub-query.&amp;nbsp; You would use a master-detail report to do something like:&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; For each user: Display the user&amp;#39;s name, and when the user last signed on)&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; For each post by this user on my forum: Display how many times the post was replied to and the date of most recent reply&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; This sort of a query has a master, the FOR EACH USER part; and a detail, the FOR EACH POST part.&amp;nbsp; These are two different peices of information.&amp;nbsp; You have an outer query, and an inner query which is dependant upon something from the outer query, which in this case would be the ID of the user in the outer loop.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BIRT lets you do this by giving you a second type of parameter: The DataSet parameter.&amp;nbsp; Unlike Report Parameters, DataSet parameters are associated with a specific dataset only.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Report Parameters are accessed using the collection &lt;strong&gt;params&lt;/strong&gt;. DataSet parameters are accessed using the collection &lt;strong&gt;inputParams&lt;/strong&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0"&gt;

&lt;tr&gt;
&lt;td align="left"&gt;1&lt;/td&gt;
&lt;td&gt;Edit your dataset. Click on the Parameters tab on the left.&amp;nbsp; Click NEW to declare a new parameter.&amp;nbsp; Make sure to assign a default value, for a string use &amp;quot;&amp;quot;. &lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Add your nested table (the master-detail relationship, otherwise known as sub-table or correlated sub-query):&amp;nbsp; Go to your report layout.&amp;nbsp; Add a Table for your first dataset (the Master).&amp;nbsp; Inside your table add a second detail row and drop another Table inside it.&amp;nbsp; Associate the second Table with your second (detail) dataset.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Define the relationship between master and detail records:&amp;nbsp; Click on the grid for your details dataset.&amp;nbsp; In the property editor, select the Binding tab.&amp;nbsp; You should see that Data Set: has the name of your detail scripted dataset selected.&amp;nbsp; Click on the Dataset Parameter Binding button. The DataSet parameter you defined in step 1 will appear.&amp;nbsp; Click on it to select it, then click the Edit button.&amp;nbsp; For the value, enter something like this:&amp;nbsp; row[&amp;quot;MasterTablePrimaryKey&amp;quot;]&amp;nbsp;&amp;nbsp;&amp;nbsp; .&amp;nbsp; Your nested table is inside a parent table, so row[&amp;quot;xxx&amp;quot;] will be replaced with the value from the parent table in field xxx from the dataset associated with the parent row.&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;&lt;td&gt;
Leverage the parameter in your scripted dataset:&lt;br /&gt;
&amp;nbsp;&amp;nbsp; /* In my script: */&lt;br /&gt;
&amp;nbsp;&amp;nbsp; PrimaryKeyFromParent = inputParams[&amp;quot;NameOfDatasetParameter&amp;quot;];&lt;br /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;p&gt;
&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;8. How to use Global Variables in BIRT scripted DataSet&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;You can &amp;#39;declare&amp;#39; global variables in BIRT by using a assigning a value to your variable in the &lt;strong&gt;initialize&lt;/strong&gt; event of your report.&amp;nbsp; For example:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; importPackage(Packages.java.util);&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; globalvarToday = new Date();&lt;/p&gt;&lt;p&gt;&amp;nbsp;Now you have a global variable called globalvarToday which is initialized to the current date.&amp;nbsp;&amp;nbsp; You can now access this anywhere in your report, including inside your scripted DataSets.&amp;nbsp; Make sure you don&amp;#39;t use the &lt;strong&gt;var&lt;/strong&gt; token here or that will make your variable local to the initialize event scope only.&amp;nbsp; Also if you declare your variable inside a try block that might also make it go out of scope, I haven&amp;#39;t tried it.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;I hope you found this helpful.&amp;nbsp; I&amp;#39;ll be posting more here as I learn more.&amp;nbsp; Feel free to add comments with links to other resources.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=249" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/birt_reporting/archive/tags/BIRT/default.aspx">BIRT</category><category domain="http://davidjberman.com/blogs/birt_reporting/archive/tags/Java/default.aspx">Java</category><category domain="http://davidjberman.com/blogs/birt_reporting/archive/tags/Business+Intelligence/default.aspx">Business Intelligence</category><category domain="http://davidjberman.com/blogs/birt_reporting/archive/tags/Reporting/default.aspx">Reporting</category></item><item><title>Predictions for 2007</title><link>http://davidjberman.com/blogs/web_technologies/archive/2006/12/22/Predictions-for-2007.aspx</link><pubDate>Fri, 22 Dec 2006 19:05:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:245</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>Corporations return to more traditional work environments. More people wearing ties, increasing demands to work longer hours in exchange for higher pay. More job opportunities for decision makers. Unskilled labor rates stagnate, tech sector and IT related jobs stay the same as they are now for next year. Energy becomes very exiting because of legitimate economic needs, cool technological advances, anti-middle east sentiment, the desire to address global warming, the effects of which we can now actually...(&lt;a href="http://davidjberman.com/blogs/web_technologies/archive/2006/12/22/Predictions-for-2007.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=245" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/web_technologies/archive/tags/Technology/default.aspx">Technology</category><category domain="http://davidjberman.com/blogs/web_technologies/archive/tags/Entrepreneurship/default.aspx">Entrepreneurship</category><category domain="http://davidjberman.com/blogs/web_technologies/archive/tags/Nintendo/default.aspx">Nintendo</category><category domain="http://davidjberman.com/blogs/web_technologies/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://davidjberman.com/blogs/web_technologies/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>Community Server Gurus</title><link>http://davidjberman.com/blogs/cs21/archive/2006/10/19/Community-Server-Gurus.aspx</link><pubDate>Thu, 19 Oct 2006 14:30:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:199</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Here are some of the Masters of Community Server.&amp;nbsp; They have their own CS powered sites of course and they have excellent, valuable content for anyone interested in getting anything done with CS that isn&amp;#39;t already done for you when you take it &amp;#39;out of the box&amp;#39;.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Dave Stokes (&lt;a href="http://www.davestokes.net/" title="DaveStokes.net" target="_blank"&gt;davestokes.net&lt;/a&gt;) -&amp;nbsp; Dave Stokes will show you exactly, and I do mean EXACTLY how to setup CS.&amp;nbsp; He has step by step instructions on how to install CS on your server, dedicated server and so on.&amp;nbsp; He is very thorough, includes step-by-step instructions with pictures and everything.&amp;nbsp; His documents show you how to install a new installation or upgrade an existing installation. Thanks Dave for providing this!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Scott Water (&lt;a href="http://scottwater.com" title="ScottWater.com" target="_blank"&gt;scottwater.com&lt;/a&gt;) - Once you get your CS up and running, Scott is going to provide you with amazing add-ons so that you can do cool stuff with your Community Server.&amp;nbsp; One example is:&amp;nbsp; Enable people to post YouTube based videos with a simple tag they insert into a post.&amp;nbsp; Get his CS Module Pack for CS 2.1 off of his website.&amp;nbsp; Here are some of the things in it (Thanks Scott!)&lt;/p&gt;&lt;ul&gt;&lt;li&gt;MetaBlogExtender - enables access to the full CS Blog Post API via the MetaBlogAPI&lt;/li&gt;&lt;li&gt;LiveSearch - enables creating posts which act like live search
results. The search happens at render time enabling CS to always use
the most recent data and the current user&amp;#39;s permissions.&lt;/li&gt;&lt;li&gt;XHTML - attempts to convert any CS content to XHTML (actually just xml)&lt;/li&gt;&lt;li&gt;ShareIt - see above&lt;/li&gt;&lt;li&gt;Camtasia - enables adding Camtasia flash movies to posts[1]&lt;/li&gt;&lt;li&gt;ModuleNotification - enables sending emails at key CS events&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=199" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/cs21/archive/tags/Community+Server/default.aspx">Community Server</category></item><item><title>How to install a Tag Cloud in CS 2.1</title><link>http://davidjberman.com/blogs/cs21/archive/2006/10/19/How-to-install-a-Tag-Cloud-in-CS-2.1.aspx</link><pubDate>Thu, 19 Oct 2006 14:16:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:198</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I just upgraded from CS 2.0 to 2.1.&amp;nbsp; One of the great new features is the Tag Cloud feature.&amp;nbsp; Basically you can attach key words to blogs and forum posts, and then visitors can click on those key words in the tag clouds to find related content.&lt;/p&gt;&lt;p&gt;&lt;a href="http://communityserver.org/forums/thread/539666.aspx" title="CS Official Forums: How to install a Tag Cloud" target="_blank"&gt;Here&amp;#39;s the forum thread on how to install a tag cloud&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Here&amp;#39;s what I got from that thread and I&amp;#39;m going to clarify a little:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;First, here&amp;#39;s the code to copy into your clipboard&lt;/strong&gt;:&lt;/p&gt;&lt;p&gt;&amp;lt;div class=&amp;quot;CommonSidebarArea&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h4 class=&amp;quot;CommonSidebarHeader&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;cs:ResourceControl ResourceName=&amp;quot;PopularTags&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/h4&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;div class=&amp;quot;CommonSidebarContent&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;CS:TagCloud
ApplicationType=&amp;quot;weblog&amp;quot;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;TagCloudCssClasses=&amp;quot;CommonTag6,CommonTag5,CommonTag4,CommonTag3,CommonTag2,CommonTag1&amp;quot;
runat=&amp;quot;server&amp;quot; id=&amp;quot;TagCloud&amp;quot; MaximumNumberOfTags=&amp;quot;25&amp;quot;
ShowTagCounts=&amp;quot;false&amp;quot; IgnoreFilterTags=&amp;quot;true&amp;quot;
CssClass=&amp;quot;CommonSidebarTagCloud&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;div class=&amp;quot;CommonSidebarFooter&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;a href=&amp;quot;&amp;lt;%=SiteUrls.Instance().TagsHome
%&amp;gt;&amp;quot;&amp;gt;&amp;lt;cs:ResourceControl ResourceName=&amp;quot;ViewAllTags&amp;quot;
runat=&amp;quot;server&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Second, open the ASP.NET Master page for the Theme you are using&lt;/strong&gt;.&amp;nbsp; I&amp;#39;m assuming you are using the default theme, so the file you want is \themes\default\Masters\Master.ascx&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Third, paste in the code for the cloud.&lt;/strong&gt;&amp;nbsp; I decided to put it here, underneath the standard controls that appear on the right hand side.&amp;nbsp; Search for this line and insert the tag cloud code directly below:&lt;/p&gt;&lt;p&gt;&amp;lt;td valign=&amp;quot;top&amp;quot; id=&amp;quot;CommonRightColumn&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;CS:MPRegion id=&amp;quot;rcr&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;em&gt;[[ OK insert tag cloud here ]]&lt;/em&gt;&lt;br /&gt;  &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;strong&gt;Fourth, add &lt;/strong&gt;align=&amp;quot;center&amp;quot;&lt;strong&gt;.&amp;nbsp; &lt;/strong&gt;I added a align=&amp;quot;center&amp;quot; attribute to the right hand column cell header tag, so it looks like this: &amp;lt;td valign=&amp;quot;top&amp;quot; align=&amp;quot;center&amp;quot; id=&amp;quot;CommonRightColumn&amp;quot;&amp;gt;.&amp;nbsp; I found that if I didn&amp;#39;t have that then the tag cloud would appear offset to the left and didn&amp;#39;t line up with the other panels.&amp;nbsp; Adding this attribute didn&amp;#39;t move the other panel items at all.&lt;/p&gt;&lt;p&gt;I&amp;#39;d actually prefer to put the tag cloud inside the controls that appear on the right hand side but I haven&amp;#39;t figure out yet which file I need to modify.&amp;nbsp; I&amp;#39;d like to get it above the Recent Additions panel.&amp;nbsp; If you know which control it is please let me know.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=198" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/cs21/archive/tags/Community+Server/default.aspx">Community Server</category></item><item><title>How to upgrade from Community Server 2.0 to CS 2.1</title><link>http://davidjberman.com/blogs/cs21/archive/2006/10/19/How-to-upgrade-from-Community-Server-2.0-to-CS-2.1.aspx</link><pubDate>Thu, 19 Oct 2006 14:13:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:197</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Dave Stokes wrote a terriffic guide for upgrading from CS 2.0 to 2.1.&amp;nbsp; After reading this guide I can&amp;#39;t possibly imagine trying to do this on your own.&amp;nbsp; Definitely get the guide.&amp;nbsp; You have to register on his site, but the energy expended to tap a few key strokes is really worth the great information Dave provides.&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.davestokes.net/blogs/community_server_21/archive/2006/10/10/Community-Server-2.0-to-2.1-Upgrade-document-now-available.aspx" title="Dave Stoke&amp;#39;s guide to upgrading CS from 2.0 to 2.1" target="_blank"&gt;Get Dave Stokes&amp;#39;s Guide to Upgrade CS 2.0 to CS 2.1&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=197" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/cs21/archive/tags/Community+Server/default.aspx">Community Server</category></item><item><title>Purpose of this Blog</title><link>http://davidjberman.com/blogs/cs21/archive/2006/10/19/Purpose-of-this-Blog.aspx</link><pubDate>Thu, 19 Oct 2006 14:08:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:196</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The purpose of this blog is to capture lessons about setting up Community Server 2.1 as I learn them.&amp;nbsp; I&amp;#39;m hoping people can benefit.&amp;nbsp; On the official &lt;a href="http://communityserver.org/forums/" title="Official Community Server Forums" target="_blank"&gt;Community Server Forums&lt;/a&gt; you can probalby learn everything you can find in this blog.&amp;nbsp; However, on the CS forums there is a lot of Q&amp;amp;A and dialog as people collaboratively uncover solutions.&amp;nbsp; I&amp;#39;m going to post only solutions and when I&amp;#39;m not too lazy post links back to the original solution providers.&amp;nbsp; I&amp;#39;m not an expert on CS but I think it&amp;#39;s really fun and exciting.&amp;nbsp; Partly, this blog is for my own reference as I set up additional CS sites.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;This blog also relates only to CS v2.1.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=196" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/cs21/archive/tags/Community+Server/default.aspx">Community Server</category></item><item><title>Small companies CAN afford to offer customer service and support by outsourcing</title><link>http://davidjberman.com/blogs/resourcesforentrepreneurs/archive/2006/10/10/Small-companies-CAN-afford-to-offer-customer-service-and-support-by-outsourcing.aspx</link><pubDate>Tue, 10 Oct 2006 18:35:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:168</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Recent technologies make it easier than
ever for startup ventures to bring new products and services to the
market.&amp;nbsp; A website goes up and now its time to start charging a
subscription fee, or collecting advertising revenue.&amp;nbsp; However, who&amp;#39;s
supporting those new customers?&lt;br /&gt;
&lt;br /&gt;
Historically start-ups offer little to no technical support or customer
service.&amp;nbsp; If they do have so much as a support e-mail box, it&amp;#39;s usually
the software developers themselves who have to answer those service
requests.&amp;nbsp; If they are busy answering customer inquiries, then they
aren&amp;#39;t doing what you hired them for: writing code.&lt;br /&gt;
&lt;br /&gt;
New opportunities for outsourcing exist today.&amp;nbsp; Of course, most people
I know don&amp;#39;t know companies in India or Africa, or just how much it
would cost to hire them if they did know who to talk to.&amp;nbsp; There are
companies in India and Africa which are thriving by providing
affordable outsourced customer service.&amp;nbsp; What does &amp;quot;affordable&amp;quot; mean?&amp;nbsp;
Your business can buy e-mail and help desk based technical support,
9AM-5PM on all weekdays for $500 per month.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
So what does your $500 buy you?&amp;nbsp; Africa Great Thinkers (AGT), based out of
Dar Es Salaam, Tanzania, will provide you with a dedicated, full time
technical support staff to support your business during regular
business hours, in your time zone.&amp;nbsp; You can buy additional coverage if
you&amp;#39;re willing to pay for it.&amp;nbsp; AGT will also monitor your web based trouble ticket / help desk and respond to tickets, and keep an eye on your server, paging you if there is a problem.&amp;nbsp; They have broad band internet and a backup power generator so they can offer you reliable service.&amp;nbsp; At that price, freeing up your staff so
they don&amp;#39;t have to be disrupted with customer support inquiries, or
growing your business faster by offering some support instead of no
support, it&amp;#39;s a no brainer.&amp;nbsp; &lt;br /&gt;
&lt;/font&gt;&lt;br /&gt;
&lt;br /&gt;&lt;font face="Verdana" size="2"&gt;You can contact Boniphace Melchades Rutta, President of Africa Great Thinkers at this email address: &lt;a href="mailto://mrbonnytz@socialnetwork.com"&gt;mrbonnytz@socialnetwork.com&lt;/a&gt; or call: +255&amp;nbsp; 22 2460775&lt;/font&gt;&lt;/p&gt;&lt;p&gt;[photo:169]&amp;nbsp;&lt;/p&gt;&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=168" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/resourcesforentrepreneurs/archive/tags/Entrepreneurship/default.aspx">Entrepreneurship</category><category domain="http://davidjberman.com/blogs/resourcesforentrepreneurs/archive/tags/Outsourcing/default.aspx">Outsourcing</category></item><item><title>How to stop SPAM - for good!</title><link>http://davidjberman.com/blogs/web_technologies/archive/2006/10/04/How-to-stop-SPAM-_2D00_-for-good_2100_.aspx</link><pubDate>Wed, 04 Oct 2006 16:19:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:127</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>SPAM! It's terrible! It wastes our time! It gets in the way of our friends and our work! Does anything stop it? Yes. I'm going to tell you why current solutions don't work and give you one that really does work, is easy to use, and is affordable. It works so well, you don't need to manage it or think about it. The SPAM problem is easy to understand. Every day we get unwanted email from people who don’t care that we’re doing our best not to get e-mail from them. We end up going through our mail box...(&lt;a href="http://davidjberman.com/blogs/web_technologies/archive/2006/10/04/How-to-stop-SPAM-_2D00_-for-good_2100_.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=127" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/web_technologies/archive/tags/Software/default.aspx">Software</category><category domain="http://davidjberman.com/blogs/web_technologies/archive/tags/Solutions/default.aspx">Solutions</category><category domain="http://davidjberman.com/blogs/web_technologies/archive/tags/Technology/default.aspx">Technology</category></item><item><title>Getting value out of Social Networking websites</title><link>http://davidjberman.com/blogs/web_technologies/archive/2006/09/29/Getting-value-out-of-Social-Networking-websites.aspx</link><pubDate>Fri, 29 Sep 2006 15:54:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:97</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>Social Networking websites are all the rage right now. Even television advertisers are trying to cash in on the hype and connect with younger viewers by advertising their personal pages on MySpace.com. There are many Social Networking websites out there today, many of them knock offs of MySpace. Some sites try to take on different approaches, like TagWorld.com where content gets tagged so that you can do key word searches, or other sites like SocialNetwork.com focus on social networking as a way...(&lt;a href="http://davidjberman.com/blogs/web_technologies/archive/2006/09/29/Getting-value-out-of-Social-Networking-websites.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=97" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/web_technologies/archive/tags/Technology/default.aspx">Technology</category><category domain="http://davidjberman.com/blogs/web_technologies/archive/tags/Social+Networking/default.aspx">Social Networking</category><category domain="http://davidjberman.com/blogs/web_technologies/archive/tags/Entrepreneurship/default.aspx">Entrepreneurship</category></item><item><title>Search Engine Optimization Resources</title><link>http://davidjberman.com/blogs/seo/archive/2006/09/28/Search-Engine-Optimization-Resources.aspx</link><pubDate>Thu, 28 Sep 2006 15:54:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:96</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>&lt;b&gt;&lt;font face="Verdana" size="3"&gt;Search Engine Optimization Resources&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/b&gt;&lt;font face="Verdana" size="3"&gt;&lt;font size="2"&gt;Links:&lt;br&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font face="Verdana"&gt;&lt;a href="http://www.google.com/addurl/"&gt;Submit your website to Google for indexing&lt;/a&gt;&lt;br&gt;&lt;a href="http://search.yahoo.com/info/submit.html"&gt;Submit your website to Yahoo for indexing&lt;/a&gt;&lt;br&gt;&lt;a href="http://submitit.bcentral.com/msnsubmit.htm"&gt;Submit your website to MSN for indexing&lt;/a&gt;&lt;br&gt;&lt;br&gt;Everything you ever wanted to know about Search Engines (and a whole lot more):&lt;br&gt;&lt;a href="http://searchenginewatch.com/"&gt;SearchEngineWatch.com&lt;/a&gt; - A website dedicated to tracking the Search Engine Industry&lt;br&gt;&lt;a href="http://www.mattcutts.com/blog/"&gt;Matt Cutts's Blog&lt;/a&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font face="Verdana"&gt; - A web blog written by someone inside Google, great insite&lt;br&gt;&lt;a href="http://www.submit-it.com/subopt.htm"&gt;Microsoft SEO Tips&lt;/a&gt; - Microsoft's Tips on making Search Engine Friendly Pages&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font face="Verdana"&gt;Information about RSS News Feeds and Readers:&lt;br&gt;&lt;a href="http://cravingideas.blogs.com/backinskinnyjeans/2006/09/how_to_explain_.html"&gt;How to explain RSS the Oprah way&lt;/a&gt;&lt;br&gt;&lt;br&gt;SEO Tools:&lt;br&gt;&lt;a href="http://www.checkyourlinkpopularity.com/"&gt;Link Popularity Checker&lt;/a&gt; - Software (free download), tells you how many sites link to your web site.&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font face="Verdana"&gt;Geek stuff:&lt;br&gt;&lt;a href="http://citeseer.ist.psu.edu/cache/papers/cs/7144/http:zSzzSzwww-db.stanford.eduzSz%7EbackrubzSzpageranksub.pdf/page98pagerank.pdf"&gt;The PageRank Citation Ranking: Bringing Order to the Web&lt;/a&gt;&lt;br&gt;This article is a bit out of date by now but still informative.&amp;nbsp; It explains the core concepts beneat Google's fameous PageRank system.&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;a href="http://www-db.stanford.edu/%7Ebackrub/google.html"&gt;&lt;font face="Verdana" size="2"&gt;The Anatomy of a Large-Scale Hypertextual Web Search Engine&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;font face="Verdana"&gt; - Some more useful information on how Google (and other search engines) index pages.&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;br&gt;&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=96" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/seo/archive/tags/SEO/default.aspx">SEO</category></item><item><title>How do I optimize my web site?  Making your website Search Engine Friendly</title><link>http://davidjberman.com/blogs/seo/archive/2006/09/28/How-do-I-optimize-my-web-site_3F00_--Making-your-website-Search-Engine-Friendly.aspx</link><pubDate>Thu, 28 Sep 2006 15:44:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:95</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>

&lt;font face="Verdana" size="2"&gt;Here are some quick simple tips to follow to make your web page search engine friendly.&amp;nbsp; Follow these steps and you're 90% of the way there.&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;ol&gt;&lt;li class="MsoNormal"&gt;&lt;font face="Verdana" size="2"&gt;Search
     engines are designed to return pages that are highly relevant to a keyword
     search phrase typed into the search box on their site.&lt;span&gt;&amp;nbsp; &lt;/span&gt;If you want your page to show up in the
     results, start by making your page relevant to a specific search phrase.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Select the search phrase you want to
     optimize for and write it down so that you can focus on it.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Try to keep it to 3 key words or less if
     you can.&lt;/font&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;font face="Verdana" size="2"&gt;Create
     a web page with a file name that contains your key word search
     phrase.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Don’t use spaces in the
     file name, instead, use underscore (“_”) or hyphen (“-“) characters.&lt;span&gt;&amp;nbsp; &lt;/span&gt;It used to be the case that you would
     get better results on Google if you use the hyphen character but it no
     longer matters.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Don’t worry about
     the name of the directory it is in.&lt;/font&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;font face="Verdana" size="2"&gt;Add a
     HTML title to your web page using your key words to start the title.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Try to keep your title in the 5-8 word
     range. &lt;/font&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;font face="Verdana" size="2"&gt;Add a
     META DESCRIPTION tag to your web page to suggest an abstract to search
     engines to show in search results.&lt;span&gt;&amp;nbsp;
     &lt;/span&gt;Search engines may or may not use your description, it varies.&lt;span&gt;&amp;nbsp; &lt;/span&gt;The description should contain your key
     words and be approximately 90 characters long (including spaces).&lt;/font&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;font face="Verdana" size="2"&gt;Add a
     META KEYWORDS tag to your page.&lt;span&gt;&amp;nbsp;
     &lt;/span&gt;Most major search engines don’t put a lot of weight into your
     keywords tag, but some do, and most consider it at least somewhat.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Use only your search phrase in
     here.&lt;span&gt;&amp;nbsp; &lt;/span&gt;You don’t want to look like
     you are trying to SPAM the search engine here.&lt;/font&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;font face="Verdana" size="2"&gt;Create
     a headline on your page using the H1 Tag, and make sure the headline
     contains your key words.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Your
     headline could be the same as your page title, but this is not
     required.&lt;span&gt;&amp;nbsp; &lt;/span&gt;It better to have a
     little diversity.&lt;/font&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;font face="Verdana" size="2"&gt;Add
     content to your page that is very relevant to your search phrase.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Ideally make sure to have 500-800 words.&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt;

&lt;font face="Verdana" size="2"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;b&gt;&lt;font face="Verdana" size="3"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=95" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/seo/archive/tags/SEO/default.aspx">SEO</category></item><item><title>Search Engine Optimization Basics</title><link>http://davidjberman.com/blogs/seo/archive/2006/09/28/Search-Engine-Optimization-Basics.aspx</link><pubDate>Thu, 28 Sep 2006 14:56:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:94</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>&lt;span&gt;What is Search Engine Optimization?&lt;br&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;span&gt;Search Engine Optimization (SEO) is the practice of modifying the content of your web page so that it is easier for your target audience to find your website when they search the web using a search engine.&amp;nbsp; When someone goes to a search engine like Google or MSN, they'll type in a search phrase.&amp;nbsp; When they click that search button the search engine serves up a list of results, usually ten.&amp;nbsp; If the web surfer doesn't like the first ten results, there will be a button to see more results.&amp;nbsp; However, most people are going to find a link to a site that looks good to them on the first or second page of results.&amp;nbsp; If you want you can buy a sponsored link that appears on the top of the list of results, or on the side, but that can add up to a lot of money.&amp;nbsp; Another approach is to try to optimize your web pages so that they naturally appear in the first ten links returned by the search engine.&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;br&gt;&lt;br&gt;Important Factors that Impact Placement&lt;br&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;span&gt;There are lots of search engines out there.&amp;nbsp; The biggest ones are Google, MSN, and Yahoo!.&amp;nbsp; Each one has it's own method of indexing pages and figuring out in what order those pages should be presented to the web surfer doing the search.&amp;nbsp; The most important thing is that the search engines know about your site and include your pages in their index.&amp;nbsp; If they don't, you'll never show up no matter what you do.&amp;nbsp; &lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;Getting indexed by search engines&lt;br&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;span&gt;Most major search engines provide a page where you can go to submit your website or a particular web page for indexing.&amp;nbsp; For example, here is Google's submit page:&lt;br&gt;&lt;a href="http://www.google.com/addurl/"&gt;Submit your website to Google for indexing&lt;/a&gt;&lt;br&gt;(Some people beleive that Google no longer processes submissions)&lt;br&gt;&lt;a href="http://search.yahoo.com/info/submit.html"&gt;Submit your website to Yahoo for indexing&lt;/a&gt;&lt;br&gt;&lt;a href="http://submitit.bcentral.com/msnsubmit.htm"&gt;Submit your website to MSN for indexing&lt;/a&gt;&lt;br&gt;&lt;br&gt;A second way you can get your page indexed is to have a link to your page added to a page that is already indexed.&amp;nbsp; Once search engines index a site they periodically revisit that site and crawl through all of it's pages and links.&amp;nbsp; When the search engine sees a link to your site it will "discover" you, and start crawling your site.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;Getting indexed by search engines&lt;/span&gt;&lt;br&gt;&lt;font size="2"&gt;&lt;span&gt;Before you submit your website, make sure your web pages are search engine friendly.&amp;nbsp; Follow the link below for some tips on how to make your web page easy for search engines to index and understand what your page is about:&lt;br&gt;How do I optimize my web site?&amp;nbsp; Making your website Search Engine Friendly&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;Relevancy vs. Page Rank&lt;br&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;span&gt;It's one thing to have your page indexed, it's another to appear at the top of the search engine results.&amp;nbsp; Following the tips above on how to make your website search engine friendly will help, but it's not enough.&amp;nbsp; The tips above will tell search engines that your page is RELEVANT to the phrase being searched for, but it won't tell search engines how good the QUALITY of the content is.&amp;nbsp; Search engines measure quality as a numerical score, refered to by Search Engine Optimization experts as Page Rank, a phrase started by Google and now widely adopted.&amp;nbsp; Search engines try to find the most relevant content of the highest quality to satisfy the needs of the person doing the search.&amp;nbsp; So how does the search engine determine the quality of your content?&amp;nbsp; A big part of that is how many people link to your web page.&amp;nbsp; When pages link to your page, that's an indication to the search engine that someone thinks the content of your page is interesting and important.&amp;nbsp; The search engine indexing will also consider how important the site is that is pointing to your site.&amp;nbsp; A link from a very important site to your site is more important than several links to your site from other sites that are not considered so important.&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;Next steps&lt;br&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;span&gt;Now that you understand the basics of Search Engine Optimization, you're probably interested in taking steps to get your pages optimized and get the best page rank you can.&amp;nbsp; It's going to take some time and some effort, but it can certainly be done.&amp;nbsp; I recommend that you use a RSS News Reader and subscribe to this blog, so you can read the other articles I've written on the subject and receive new articles as I release them.&amp;nbsp; You're going to need to:&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;ul&gt;&lt;li&gt;&lt;font size="2"&gt;&lt;span&gt;Create search engine friendly pages&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font size="2"&gt;&lt;span&gt;Promote your pages to improve your page rank&lt;/span&gt;&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;font size="2"&gt;&lt;span&gt;&lt;br&gt;&lt;font size="3"&gt;&lt;b&gt;Do it yourself or hire an SEO specialist?&lt;/b&gt;&lt;/font&gt;&lt;br&gt;You can either do the optimization yourself or hire an SEO specialist.&amp;nbsp; It depends on what kind of time you have, if you have a budget to spend on this, what tools you have and what your technical skills are.&amp;nbsp; There are several aspects to the SEO process, and you can do some of them yourself and outsource other activities to other people.&amp;nbsp; The important thing to understand is that setting up your pages is important, but promoting those pages to get good page rank is an ongoing marketing activity.&amp;nbsp; Someone needs to create your website with search engine friendly pages, or modify your existing website to make it search engine friendly.&amp;nbsp; After you have done that, you'll need to follow the advice in my other blog posts to see how you can promote your site's page rank.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=94" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/seo/archive/tags/SEO/default.aspx">SEO</category></item><item><title>The Problem of Sending Files to People</title><link>http://davidjberman.com/blogs/web_technologies/archive/2006/08/05/The-Problem-of-Sending-Files-to-People.aspx</link><pubDate>Sat, 05 Aug 2006 15:10:00 GMT</pubDate><guid isPermaLink="false">ecfba891-f940-4913-a10d-cc8fe6f9482a:1</guid><dc:creator>Dave</dc:creator><slash:comments>0</slash:comments><description>The Problem of Sending Files to People First I'll talk about the problem, and then I'll talk about the solution later on. Sending large files to people is becomming a problem. When I say large files, I'm referring to files larger than 5 megabytes. A few years ago it was unusual to send large files, so if it took a long time to email someone a file, you didn't really care. However, today sending files larger than 5 megabytes is becoming commonplace. Businesses are becoming increasingly dependant upon...(&lt;a href="http://davidjberman.com/blogs/web_technologies/archive/2006/08/05/The-Problem-of-Sending-Files-to-People.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://davidjberman.com/aggbug.aspx?PostID=1" width="1" height="1"&gt;</description><category domain="http://davidjberman.com/blogs/web_technologies/archive/tags/Solutions/default.aspx">Solutions</category><category domain="http://davidjberman.com/blogs/web_technologies/archive/tags/Technology/default.aspx">Technology</category></item></channel></rss>