<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The True Tribe &#187; Search Results  &#187;  firebug</title>
	<atom:link href="http://www.thetruetribe.com/?s=firebug&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.thetruetribe.com</link>
	<description>Vroom! That&#039;s us leaving IE in the dust.</description>
	<lastBuildDate>Fri, 22 Jan 2010 23:34:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Understanding Pointers in JavaScript</title>
		<link>http://www.thetruetribe.com/2010/01/understanding-pointers-in-javascript/</link>
		<comments>http://www.thetruetribe.com/2010/01/understanding-pointers-in-javascript/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 09:10:29 +0000</pubDate>
		<dc:creator>jdempcy</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.thetruetribe.com/?p=298</guid>
		<description><![CDATA[Pointers can sometimes be a confusing topic. In JavaScript, it is perhaps even moreso than in other languages. The confusion arises because the var keyword is serving double duty. It is used to define variables, as is commonly realized. But it is also used to make references&#8211; or point to&#8211; other variables, functions and properties.
In [...]]]></description>
			<content:encoded><![CDATA[<p>Pointers can sometimes be a confusing topic. In JavaScript, it is perhaps even moreso than in other languages. The confusion arises because the <em>var</em> keyword is serving double duty. It is used to define variables, as is commonly realized. But it is also used to make references&#8211; or point to&#8211; other variables, functions and properties.<span id="more-298"></span></p>
<p>In most programming languages, for example  C, pointers are symbolized with an asterisk. JavaScript relies on the developer to know which <em>var</em>s are references and which aren&#8217;t. Why is this important? To put it succinctly, it is the difference between a variable being immutable or dynamic.</p>
<p>An example may be in order. Here&#8217;s a simple script you can paste into Firebug to see how pointers work.</p>
<pre>var marxBros = ['Chico', 'Harpo', 'Groucho']
var marxBrosPointer = marxBros;
marxBrosPointer.push('Zeppo');
console.log(marxBros); // ['Chico', 'Harpo', 'Groucho', 'Zeppo']
console.log(marxBrosPointer); // ['Chico', 'Harpo', 'Groucho', 'Zeppo']</pre>
<p>As you can see, <em>marxBros</em> and <em>marxBrosPointer</em> are identical. Anything you do to <em>marxBrosPointer</em> will change <em>marxBros </em>and vice versa. You can think of them like aliases which both reference the same thing.</p>
<p>There is actually no difference now. <em>marxBros</em> is the original and <em>marxBrosPointer</em> is the pointer. But, for all intents and purposes, they are identical. One thing to note is that if you reassign one of them to something else, it does not affect the other.</p>
<pre>var marxBros = ['Chico', 'Harpo', 'Groucho']
var marxBrosPointer = marxBros;
marxBros = null;
console.log(marxBrosPointer); //  ["Chico", "Harpo", "Groucho"]
</pre>
<p>Now let&#8217;s look at a case where we are not dealing with pointers. Let&#8217;s do the same thing as our first example, but instead of using an array, we&#8217;ll use strings. Yes, this makes a big difference.</p>
<pre>var marxBros = 'Chico, Harpo, Groucho';
var marxBrosCopy = marxBros;
marxBrosCopy += ', Zeppo';
console.log(marxBros); // 'Chico, Harpo, Groucho'
console.log(marxBrosCopy); // 'Chico, Harpo, Groucho, Zeppo'
</pre>
<p>When using strings instead of arrays, we find that changes to one do not change the other. Whether you change the original or the copy, they are not linked in the same way arrays and objects are. In the first example, changing either the original or the pointer resulted in changes to both variables. In this case, because strings are immutable in JavaScript, the <em>var</em> keyword copies a string instead of referencing it.</p>
<p>The same is true of numbers:</p>
<pre>var numberOfMarxBros = 3;
var numberOfMarxBrosCopy = numberOfMarxBros;
++numberOfMarxBrosCopy;
console.log(numberOfMarxBros); // 3
console.log(numberOfMarxBrosCopy); // 4
</pre>
<p>Compare this to properties and functions, which use pointers:</p>
<pre>// First let's make a cleanHouse function which has an action property
var cleanHouse = function() {
 console.log(arguments.callee.action);
}
cleanHouse.action = 'Doing your dishes...';

// Let's test and make sure it works as expected.
cleanHouse(); // 'Doing your dishes'

// So far so good. Now let's make a pointer to this function.
var actionToTake = cleanHouse;
actionToTake(); // 'Doing your dishes...'

// Now actionToTake is identical to cleanHouse. Any changes to one affect the other.
cleanHouse.action = 'Vacauuming the rug...';
actionToTake(); // 'Vacauuming the rug...'

actionToTake.action = 'Watering the plants...';
cleanHouse(); // 'Watering the plants...';
</pre>
<p>Here&#8217;s an example where the reference is lost and it does not achieve the goal:</p>
<pre>var cleanHouse = function() {
    console.log('Doing your dishes...');
}

var actionToTake = cleanHouse;

actionToTake(); // 'Doing your dishes...'

// Off to a good start, but here's where it goes wrong:

cleanHouse = function() {
    console.log('Vacauuming the rug...');
};

// Now the reference has been broken and actionToTake no longer refers to cleanHouse.
// Instead, actionToTake refers to, literally, the anonymous function that cleanHouse previously referred to.

actionToTake(); // 'Doing your dishes...'

// cleanHouse now refers to a new separate function.
cleanHouse(); // 'Vacuuming the rug...'
</pre>
<p>As you can see, it&#8217;s important to know how to use pointers. It will help you decide when you need a copy or something, or when you need a reference to it.</p>
<p>Feel free to post clarifications or other explanations. This topic is certainly important to becoming an advanced JavaScript developer, yet it is not addressed too often. I think we could all benefit from more clarity on the subject, myself included.</p>
<p>I hope this article has helped shine some light on this issue. Happy coding!</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.thetruetribe.com%2F2010%2F01%2Funderstanding-pointers-in-javascript%2F&amp;linkname=Understanding%20Pointers%20in%20JavaScript"><img src="http://www.thetruetribe.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.thetruetribe.com/2010/01/understanding-pointers-in-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting Up a Windows Vista Development Environment</title>
		<link>http://www.thetruetribe.com/2009/07/setting-up-a-windows-vista-development-environment/</link>
		<comments>http://www.thetruetribe.com/2009/07/setting-up-a-windows-vista-development-environment/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 05:37:06 +0000</pubDate>
		<dc:creator>jdempcy</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[environment]]></category>
		<category><![CDATA[vista]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://wordpress.thetruetribe.com/?p=65</guid>
		<description><![CDATA[I recently purchased a new computer and was faced with the task of setting up a fresh installation of Windows Vista with all of the web development goodies I&#8217;ve come to know and love.
Here&#8217;s a walkthrough for what I did to get set up, starting from square one. This is literally everything I did and [...]]]></description>
			<content:encoded><![CDATA[<p>I recently purchased a new computer and was faced with the task of setting up a fresh installation of Windows Vista with all of the web development goodies I&#8217;ve come to know and love.</p>
<p>Here&#8217;s a walkthrough for what I did to get set up, starting from square one. This is literally everything I did and installed from when I was first able to access the desktop after a fresh install.</p>
<p><span id="more-65"></span></p>
<p><img src="http://www.thetruetribe.com/images/stories/1-1216221367ByEe.jpg" border="0" alt="" /></p>
<p><strong>Web Browsers</strong></p>
<ol>
<li><a href="http://www.getfirefox.com/">Install Firefox.</a> Seriously, do I even have to mention this?</li>
<li><a href="http://www.google.com/chrome">Install Chrome</a>. I use Chrome for using CMS&#8217;s since I feel it&#8217;s a bit faster than Firefox. Administrating Joomla sites, for instance.</li>
<li><a href="http://www.apple.com/safari/download/">Install Safari</a>. Safari Win has a somewhat different set of rendering bugs than it&#8217;s neighbor on the Mac, but there is enough of an overlap that I use it to spot-check.</li>
<li><a href="http://www.opera.com/download/">Install Opera</a>. It isn&#8217;t that widely used but I like to check out my sites in it.</li>
</ol>
<p><strong><span style="font-weight: normal"><img src="images/stories/tip_thumb.jpg" border="0" alt="" /></span>Development Tools and Useful Apps<br />
</strong></p>
<ol>
<li><a href="http://gisdeveloper.tripod.com/scite.html">Install SciTE with extensions.</a> It&#8217;s a kick-ass text editor with code coloring for a support for a multitude of languages.</li>
<li><a href="http://aptana.com/studio/download">Install Aptana Studio.</a> One of the best full-featured development environments around. Based on Eclipse so it can be a resource hog, and prone to some unusual behavior, but it&#8217;s still on a level beyond costly web dev IDEs like Dreamweaver.</li>
<li><a href="http://www.apachefriends.org/en/xampp-windows.html">Install XAMPP</a>. This is a bundle that includes the Apache web server, MySQL database and support for PHP and Perl. It comes with lots of goodies like a web interface with quick links to all of the administrative areas, e.g. pre-installed phpMyAdmin for administrating the MySQL database. Note: make sure you install this to a folder without spaces, e.g. <em>c:\xampp. </em>For more information, read our <a href="http://rticle%20on%20setting%20up%20xampp./">article on setting up XAMPP.</a></li>
<li><a href="http://tortoisesvn.net/downloads">Install TortoiseSVN</a>.</li>
<li><a href="http://www.7-zip.org/download.html">Install 7-Zip.</a></li>
<li><a href="http://www.softpedia.com/get/Office-tools/Text-editors/DAMN-NFO-Viewer.shtml">Install DAMN NFO Viewer</a>.</li>
<li><a href="http://www.magiciso.com/tutorials/miso-magicdisc-overview.htm">Install the MagicISO Virtual Drive.</a></li>
</ol>
<p><strong>Customizing Firefox</strong></p>
<p>I like the clean up Firefox and streamline it a bit. Here are some of the things I do after a fresh install.</p>
<ol>
<li>
<div>Delete the links in the bookmark toolbar (&#8220;Recent Headlines&#8221; and &#8220;Getting Started&#8221;) by right-clicking the bookmark and hitting &#8216;D&#8217; on the keyboard. You can keep &#8220;Most Visited&#8221; if you like since it is actually useful.</div>
</li>
<li>
<div>Right-click on the navigation buttons and choose &#8216;Customize&#8217; to streamline the icons. If you plan on using navigation icons, check the &#8216;Use small icons&#8217; box so they are at least small. Remove the &#8216;Home&#8217; link by dragging it away from the navbar.</div>
</li>
<li>
<div>Drag and the search box and the addressbar to the top area. Also, you can optionally drag the back/forward and stop/refresh buttons to the top, on the left of the addressbar. I personally remove the navigation in favor of keycommands. Instead of clicking back and forward buttons I just use the Alt+Left and Alt+Right keyboard shortcuts, respectively. I also remove the loading spinner on the top right of the page to save space. No need for a stop button when you can hit Esc, and why click the refresh button when you can hit CTRL+R? Obviously this is personal preference, but that&#8217;s how I roll!</div>
</li>
<li>
<div>Once you&#8217;re finished customizing it, hit &#8216;Done&#8217; and then right-click on the navigation again and click on &#8216;Navigation Toolbar&#8217; to hide it. We&#8217;ve just provided that much more screen real estate for what&#8217;s important, the web sites.</div>
</li>
</ol>
<p><strong><span style="font-weight: normal"><img title="Firebug" src="images/stories/firebug_logo-781750_thumb.png" border="0" alt="Firebug: Web Development Evolved" /></span>Firefox Extensions</strong></p>
<ol>
<li>
<div><strong><a href="https://addons.mozilla.org/en-US/firefox/addon/184Firebug">Firebug</a></strong></div>
</li>
<li>
<div><a href="https://addons.mozilla.org/en-US/firefox/search?q=colorzilla&amp;cat=alColorZilla">ColorZilla</a></div>
</li>
<li>
<div><a href="https://measureit/">MeasureIt</a></div>
</li>
<li>
<div><a href="https://web%20developer/">Web Developer</a></div>
</li>
<li>
<div><a href="https://fireftp/">FireFTP</a></div>
</li>
<li>
<div><a href="https://delicious%20bookmarks/">Delicious Bookmarks</a></div>
</li>
<li>
<div><a href="https://scribefire/">ScribeFire</a></div>
</li>
<li><a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlasFlash%20Pluginh">Flash Plugin</a></li>
<li><a href="http://www.divx.com/divx/windows/download/index.php">DivX Plugin</a></li>
</ol>
<p>After installing the extensions and restarting, I add a few small icons to the top (on the left side of the addressbar). I add the icons for &#8220;Inspect Element&#8221; (Firebug), toggle the Web Developer Toolbar on and off, and tagging pages in Delicious.</p>
<p><strong>Firefox Search Engines</strong></p>
<p>You can install Firefox search engine plugins by visiting the <a href="http://mycroft.mozdev.org/">MyCroft Project</a> homepage. There are some nifty ones like Google Code Search. Also, you can install the MyCroft Project search plugin which actually searches available search plugins. How meta!</p>
<p>That&#8217;s it for now. I&#8217;m sure I left out a lot of great apps so I&#8217;ll have to write a follow-up. But, this is a pretty good start to getting up and running with a development environment.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.thetruetribe.com%2F2009%2F07%2Fsetting-up-a-windows-vista-development-environment%2F&amp;linkname=Setting%20Up%20a%20Windows%20Vista%20Development%20Environment"><img src="http://www.thetruetribe.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.thetruetribe.com/2009/07/setting-up-a-windows-vista-development-environment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conducting Technical Interviews for Web Developers</title>
		<link>http://www.thetruetribe.com/2008/05/conducting-technical-interviews-for-web-developers/</link>
		<comments>http://www.thetruetribe.com/2008/05/conducting-technical-interviews-for-web-developers/#comments</comments>
		<pubDate>Sun, 25 May 2008 21:41:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://wordpress.thetruetribe.com/?p=32</guid>
		<description><![CDATA[Presumably most readers of this blog will have been through a technical interview, and I&#8217;m betting that some of them have to give technical interviews as well. The purpose of this article is to go over some of the points to consider while conducting the interview, as well as suggestions for coming up with good [...]]]></description>
			<content:encoded><![CDATA[<p>Presumably most readers of this blog will have been through a technical interview, and I&#8217;m betting that some of them have to give technical interviews as well. The purpose of this article is to go over some of the points to consider while conducting the interview, as well as suggestions for coming up with good questions to ask.<span id="more-32"></span></p>
<p>The first thing to understand as an interviewer is the requirements of the job position and what competencies a candidate must possess to be a good fit. If the job is for back-end development, then experience working with databases, performance tuning, and writing scalable code is crucial, and only a cursory understanding of HTML and CSS is required. Alternately, for UI development work, it isn&#8217;t necessary to have a candidate who is wrapped up in the back-end code or has Big O notation at the tip of their tongue. There are certainly jacks-of-all-trades but when interviewing, it&#8217;s better to <span style="font-weight: bold;">focus on a few crucial areas</span> than try to set high standards for all areas across the board.</p>
<p>These are some of the areas you may want to explore, depending on the requirements of the position:</p>
<h3>Software Development Skills</h3>
<ul>
<li>Proficiency in at least one high-level programming language: C++, Java</li>
<li>Basic understanding of object-oriented design &amp; analysis: classes/inheritance, interface vs implementation, encapsulation</li>
<li>Experience with source code version control: SVN, CVS, P4</li>
<li>Algorithms: binary search, quicksort</li>
<li>Data structures: array, hash, linked list</li>
<li>Complexity/performance analysis: Big O notation, performance testing</li>
</ul>
<h3>Web Development Skills</h3>
<ul>
<li>Candidate tests web-deployed code in big 3 browsers: IE6+, Firefox 2+, Safari 2+</li>
<li>Candidate uses browser-specific debugging tools: IE Web Developer Toolbar, Script Debugger/Script Editor (IE), Firebug (Firefox), WebKit/Drosera (Safari)</li>
<li>Extensive knowledge of at least one JS framework: jQuery, Prototype, MooTools, YUI</li>
<li>Experience creating dynamic, database-driven websites: PHP/JSP/ASP, MySQL etc</li>
<li>Candidate uses Selenium for front-end automated testing</li>
<li>Proficient in Fireworks or other image editing software, and knowledgeable about how to best export images for the web (CSS sprites, GIF/JPG/PNG, etc)</li>
<li>Follows front-end best practices like CSS-based layouts and unobtrusive JavaScript</li>
<li>Experience developing rich user interfaces (drag-and-drop, Ajax, web applications/RIAs, animation effects)</li>
</ul>
<h3>General and Miscellaneous Skills</h3>
<ul>
<li>Familiarity with agile development methodology: scrum, burndown charts</li>
<li>Proficiency at Search Engine Optimization (SEO), Search Engine Marketing (SEM), and related fields</li>
<li>Knowledgeable about security vulnerabilities in code. Experience with threat analysis software (e.g. Fortify for Java)</li>
<li>Familiarity with automated unit/integration tests: JUnit (Java), Selenium (front end)</li>
<li>DBA-related skills such as database optimization</li>
<li>Usability skills and knowledge of user behavior</li>
<li>Project management skills</li>
</ul>
<p>You can choose from these or other criteria to create a baseline for what makes an ideal candidate, ignoring the skills which aren&#8217;t relevant. Once you&#8217;ve determined the skills necessary for the position, you may find that a Ph.D. is less qualified than someone without a college degree, depending on the skills required. So, never make assumptions about candidates simply based on their credentials or previous work experience. Developers can take drastically different amounts of time to complete tasks based on their prior experience and their ability to learn new things quickly.</p>
<h3>Criteria for Various Job Positions</h3>
<p>Let&#8217;s look at a few example job positions and apply criteria from the list above.</p>
<h4>Quality Assurance Engineer</h4>
<p>An ideal QA engineer for a website will be an expert at creating automated test suites for front and back end, and should also be aware of security issues. So you could focus the interview on how they choose to write test suites, and come up with sample test suites for real-life objects (e.g. an elevator). Then you could ask them to list some of the common security threats (e.g. <a href="http://en.wikipedia.org/wiki/Cross-site_scripting">XSS</a>, <a href="http://en.wikipedia.org/wiki/Cross-site_request_forgery">XSRF</a>) and how to mitigate them.</p>
<p>Of course, if you already have a security engineer at your company, then you may not require your QA to wear another hat. But for most small- to medium-sized businesses, it&#8217;s most efficient and cost effective for your developers to wear many hats. In fact, you may have a software developer who also does QA on the site, or a QA engineer who does project management. It all depends on the size of your company and the particular restraints in budget for your development team.</p>
<h4>Software Developer / Programmer</h4>
<p>Let me say right off the bat that I&#8217;ve never conducted a software development interview. But, I have been through a few, and I have an idea of what types of questions I would ask depending on the position.</p>
<p>There are some general software development skills that I would consider, such as experience with SVN (or other source control), automated testing, knowledge of data structures and algorithms, and perhaps object oriented design and analysis.</p>
<p>If the candidate is a Java developer, then you can ask about things like exception handling, reflection, familiarity with libraries (Swing, Struts, JSF etc), or other Java-specific questions. If they are a C++ developer then you should drill down into memory management, constructors/destructors, and other tropes of C++. It&#8217;s up to you as the interviewer to determine the right questions to ask based on the job requirements, or to find someone else to conduct the interview if you can&#8217;t. I know I would have a hard time conducting an interview with a C++ developer, unless I had a &#8220;cheatsheet&#8221; with all the correct answers to the questions.</p>
<h4>Web Developer</h4>
<p>For a web development position, the focus will be less on knowledge of traditional computer science and more on the candidate&#8217;s knowledge of current best practices. Since best practices are always changing, the ideal web developer is enthusiastic and passionate about their field, and stays up to date by reading/contributing to blogs, belonging to email lists or other online communities and generally <span style="font-weight: bold;">keeping &#8220;in the know&#8221; about the best way to solve problems</span>.</p>
<p>Unlike traditional computer programming, in which code is executed in a controlled environment and changes to the language take years to complete, web development is a fast-paced field where changes happen all the time and code is executed in a wide range of environments, each with its own caveats and bugs. So, the ideal web developer is familiar with the issues surrounding development on each platform and environment, especially the Big 3 browsers (IE, Firefox and Safari).</p>
<h3>Interview Coding Challenges</h3>
<p>A great way to test a developer is to actually have them write some code for you. As they say, &#8220;the proof is in the pudding,&#8221; and even a developer who successfully answers your questions may not be able to complete the test put forth. The test can be verbal (if conducting the interview by phone), on a whiteboard (if in person) or you can give the candidate a time limit and have them email you the code. The choice is yours, just make sure that you choose one modality for all candidates. It isn&#8217;t fair comparing one candidate&#8217;s typed code to what another said on the phone, or drew on a whiteboard. Also remember that generally <span style="font-weight: bold;">typed code will be higher quality</span> than that spoken over the phone or written on a whiteboard.</p>
<p>I&#8217;ve posted a few JavaScript challenges on this blog that would make good interview questions for a JS developer. You could also adapt some of these to other languages such as C++, PHP or Java:</p>
<ul>
<li><a href="http://www.thetruetribe.com/2008/05/javascript-challenge-reverse-linked.html">Reverse a Linked List</a></li>
<li><a href="http://www.thetruetribe.com/2008/05/javascript-challenge-dispense-change.html">Dispense Change</a></li>
<li><a href="http://www.thetruetribe.com/2008/04/javascript-challenge-cardinal-numbers.html%20">Cardinal Numbers</a></li>
</ul>
<p>Other challenges include reversing a string, reversing the words in a string, finding words that occur in both files, converting a clock from digital time to degrees (e.g. for an analog clock&#8217;s hands), or generally any other relatively simple test you can come up with.</p>
<h3>Layouts and HTML/CSS</h3>
<p>For candidates doing CSS, just send them a mock-up and give them a reasonable amount of time to complete the HTML/CSS for it. You could optionally send a PSD or layered PNG, but more commonly people just send flat images. Really, the test shouldn&#8217;t be much &#8212; maybe the wireframe for a site, or a navbar, menu or UI component. You can also give them some challenge questions about explaining various CSS properties and how to use them. Challenges I&#8217;ve had in the past are:</p>
<ul>
<li>Make a banner and horizontal navbar that matches the dimensions of a wireframe</li>
<li>Make a 3-column site with a fluid-width center column</li>
<li>Create a vertical drop-down menu or horizontal flyout menu (bonus points for a cross-browser CSS-only solution, though JavaScript solutions are accepted)</li>
<li>Explain the difference between absolute and relative positioning, and what happens when you put one type of element inside another</li>
<li>Explain the difference in block and inline display</li>
<li>Explain what effect float has on elements. Does float change elements&#8217; display property, and if so, does it make it block or inline? (Answer: block)</li>
<li>Explain what effect z-index has on elements and the natural z-index order.</li>
<li>Explain CSS specificity.</li>
</ul>
<p>On this last point, CSS specificity, I find it&#8217;s fun to show a list of CSS rules and ask which rule wins out. If you know the trick how rules are calculated, it&#8217;s easy to tell:</p>
<pre class="html:nocontrols"><!-- Sample HTML code -->
&lt;!-- Sample HTML code --&gt;
&lt;p class="description" id="main"&gt;
  Some text.
  &lt;span class="special"&gt;
      Some more text.
  &lt;/span&gt;
&lt;/p&gt;</pre>
<pre class="css">/* Challenge:
 * What color is the "special" text? */

body .description span {
   color: blue;
}

p.description {
   color: red;
}

body .description .special {
   color: pink;
}

#main .special {
   color: orange;
}

#main span {
   color: green;
}</pre>
<p>For those of you unfamiliar with how CSS specificity is calculated by browsers, it is a point-based system where the selector with the highest point value wins. The three main things selectors consist of are elements, classes and ids. These are worth 1 point, 10 points and 100 points respectively. Given this knowledge, do <span style="font-style:italic;">you</span> know which rule wins out in the above example?</p>
<p>By calculating the point values of the rules, you see that the rule <span style="font-style:italic;">#main .special</span> is worth 110 points and is the winner, hence the color of the &#8220;special&#8221; text is <span style="font-style:italic;">orange</span>.</p>
<h3>Hiring People who Write Good Code</h3>
<p>Besides &#8220;just working&#8221;, the criteria for what makes good code differs from person to person, but in general, you&#8217;ll want to look for readability, useful comments, simplicity, accuracy, good formatting and code that doesn&#8217;t repeat itself. So, even if two candidates submit working solutions to a problem, you can still determine which is the better candidate by analyzing the code itself with these criteria in mind.</p>
<p>In addition to this, you may consider their talent, as opposed to their current skill in any one area. If the candidate is highly talented and passionate about the position, then they will most likely be able to learn any particular skills required for the position, within reason. Of course, talented individuals should demonstrate expertise in a number of domains already, which will give you an idea of their potential for growth in job-specific areas. You may also consider their participation in online forums, discussion groups and blogs (like this one, wink wink) related to their job field. Active participation in online communities demonstrates dedication and passion for those particular fields of interest.</p>
<p>I hope this article has been informative for interviewers and perhaps interviewees as well. Feel free to post your favorite (or least favorite) interview questions.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.thetruetribe.com%2F2008%2F05%2Fconducting-technical-interviews-for-web-developers%2F&amp;linkname=Conducting%20Technical%20Interviews%20for%20Web%20Developers"><img src="http://www.thetruetribe.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.thetruetribe.com/2008/05/conducting-technical-interviews-for-web-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inspecting Javascript with Firebug</title>
		<link>http://www.thetruetribe.com/2008/05/inspecting-javascript-with-firebug/</link>
		<comments>http://www.thetruetribe.com/2008/05/inspecting-javascript-with-firebug/#comments</comments>
		<pubDate>Wed, 21 May 2008 00:24:00 +0000</pubDate>
		<dc:creator>grandecomplex</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://wordpress.thetruetribe.com/?p=31</guid>
		<description><![CDATA[1. Go to http://www.alexgrande.com/breakable/ and add the link to your bookmarks.


2. Go to the page you are interested in inspecting and click on the bookmark in your browser called &#8220;Inspect JS&#8221;. That will load breakable.js into the head of the page you are currently using.

3. In firebug go into the scripts tab and view breakable.js.
4. [...]]]></description>
			<content:encoded><![CDATA[<p>1. Go to <a href="http://www.alexgrande.com/breakable/">http://www.alexgrande.com/breakable/</a> and add the link to your bookmarks.<br />
<span id="more-31"></span><br />
<img src="http://www.alexgrande.com/breakable/01.jpg" alt="" /></p>
<p>2. Go to the page you are interested in inspecting and click on the bookmark in your browser called &#8220;Inspect JS&#8221;. That will load breakable.js into the head of the page you are currently using.</p>
<p><img src="http://www.alexgrande.com/breakable/02.jpg" alt="" /></p>
<p>3. In firebug go into the scripts tab and view breakable.js.</p>
<p>4. Set a break point on line 7 where it says funct();</p>
<p><img src="http://www.alexgrande.com/breakable/03.jpg" alt="" /></p>
<p>5. Find out what the ID is of the element that has the event listener.</p>
<p><img src="http://www.alexgrande.com/breakable/04.jpg" alt="" /></p>
<p>6. Click the console tab in firebug. Type in: breakOn(&#8220;elementID&#8221;, &#8220;eventTrigger&#8221;);<br />
Example: breakOn(&#8220;prettyImageOver&#8221;, &#8220;onmouseover&#8221;); Example 2: breakOn(&#8220;ajaxImageChanger&#8221;,&#8221;onclick&#8221;);</p>
<p><img src="http://www.alexgrande.com/breakable/05.jpg" alt="" /></p>
<p>7. (1)Initialize the event by mousing over it or whatever you you chose as the event trigger. If the original js author chose a mouse over event then you should also use a mouse over event. Because if you choose an onclick for an onmouseover event then by the time you click it the event has already passed you by..</p>
<p>8. (2)Firebug will transfer over to the breakable.js in the scripts tab at the breakpoint funct(). Step into it by (3)clicking the arrow right in firebug script section.</p>
<p><img src="http://www.alexgrande.com/breakable/06.jpg" alt="" /></p>
<p>9. and you will enter into the javascript code of whatever function is called by the event.</p>
<p><img src="http://www.alexgrande.com/breakable/07.jpg" alt="" /></p>
<p>I love this! Big thanks to my friend Grady Morgan for writing this short script!</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.thetruetribe.com%2F2008%2F05%2Finspecting-javascript-with-firebug%2F&amp;linkname=Inspecting%20Javascript%20with%20Firebug"><img src="http://www.thetruetribe.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.thetruetribe.com/2008/05/inspecting-javascript-with-firebug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using MooTools&#8217; Hash.Cookie API</title>
		<link>http://www.thetruetribe.com/2008/05/using-mootools-hash-cookie-api/</link>
		<comments>http://www.thetruetribe.com/2008/05/using-mootools-hash-cookie-api/#comments</comments>
		<pubDate>Thu, 08 May 2008 08:01:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[MooTools]]></category>

		<guid isPermaLink="false">http://wordpress.thetruetribe.com/?p=23</guid>
		<description><![CDATA[
MooTools makes working with cookies quite easy. Based on functions from Paul Peter Koch&#8217;s QuirksMode, the MooTools API for handling cookies is intuitive and easy to remember.
For storing simple bits of information on the browser, the Cookie methods read(), write() and dispose() are adequate. As their names imply, these read, write and delete cookies from [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://docs12b.mootools.net/Plugins/Hash.Cookie" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://www.thetruetribe.com/uploaded_images/doobiecookie-722766.jpg" border="0" alt="" /></a></p>
<p>MooTools makes working with cookies quite easy. Based on functions from Paul Peter Koch&#8217;s <a href="http://www.quirksmode.org/">QuirksMode</a>, the MooTools API for handling cookies is intuitive and easy to remember.<span id="more-23"></span></p>
<p>For storing simple bits of information on the browser, the <a href="http://docs12b.mootools.net/Utilities/Cookie">Cookie methods</a> <span style="font-style:italic;">read(), write()</span> and <span style="font-style:italic;">dispose()</span> are adequate. As their names imply, these read, write and delete cookies from the browser, respectively.</p>
<p>But, if you want to do something more complex, such as save a JSON string each time a method is called on the cookie, then <a href="http://docs12b.mootools.net/Plugins/Hash.Cookie">Hash.Cookie</a> is for you.</p>
<p>What&#8217;s the difference between the Hash.Cookie methods and the standard methods you say? For one, Hash.Cookie is its own module, so make sure the version of MooTools you&#8217;re using has it included. Besides that, Hash.Cookie gives you all the functionality of the Hash class, including getters/setters, <span style="font-style:italic;">each(), some(), filter(), has(), keyOf()</span> and more. For the full documentation on all Hash methods available, view the <a href="http://docs12b.mootools.net/Native/Hash/#Hash">Hash docs here</a>.</p>
<p>Here&#8217;s an example that uses the Hash.Cookie class to store <span style="font-weight:bold;">how many times a user has visited</span> the page. Note that this uses Firebug so if you don&#8217;t have it enabled, you&#8217;ll need to override <a href="http://www.thetruetribe.com/2008/04/redefining-consolelog-for-browsers.html">console.log()</a>.</p>
<pre class="js">window.addEvent('domready', function() {
    var cookie = new Hash.Cookie('test-cookie');

    var numberOfVisits = $defined(cookie.get('numberOfVisits')) ?
                         cookie.get('numberOfVisits') :
                         0;

    cookie.set('numberOfVisits', numberOfVisits + 1);

    console.log('You have visited the page ' +
                 cookie.get('numberOfVisits') +
                 ' times.');
});</pre>
<p>On line 1, we start by declaring everything to occur when the DOM is ready.<br />
For MooTools developers, this should be a familiar practice. Although we aren&#8217;t<br />
manipulating the DOM in this example, I&#8217;ve left it in, as Firebug threw an error<br />
when I tried to console.log() before the DOM was ready.</p>
<p>On line 2, we instantiate a new cookie named &#8216;test-cookie&#8217; without any options. Interestingly, this also has the effect of <span style="font-weight:bold;">loading the cookie</span> if it already exists. This means that the first time the user visits the page, it will write a cookie, but on all subsequent visits it will read a cookie. The end result is the same: we have a reference to the cookie as a hash object, and can use the methods that the Hash class provides.</p>
<p>Next, on lines 4-6, we use a <span style="font-weight:bold;">ternary operator</span> to check if &#8216;numberOfVisits&#8217; has already been written to the cookie. If so, we read it from the cookie. If not, it is initialized to 0.</p>
<p>On line 8, we increment &#8216;numberOfVisits&#8217; using the <span style="font-style:italic;">set()</span> method. Finally, we log the number of visits using Firebug&#8217;s <span style="font-style:italic;">console.log()</span>.</p>
<h3>Getters, Setters and Auto-Saving Cookies</h3>
<p>Getters and setters should be familiar to anyone versed in Java but I imagine some JavaScript developers may be unfamiliar with them. Essentially, <span style="font-style:italic;">get()</span> and <span style="font-style:italic;">set()</span> methods are provided for you to use instead of directly accessing the data. For instance, cookie.hash.numberOfVisits and cookie.get(&#8216;numberOfVisits&#8217;) both return the same data, but the former directly accesses the data while the latter uses a wrapper method.</p>
<p>There are numerous reasons to use getters/setters instead of directly accessing the data, but one practical example is the use of Hash.Cookie&#8217;s autoSave functionality. There is an <span style="font-weight:bold;">autoSave flag in the options</span> which, if enabled, will save the data after each operation on the hash. It defaults to &#8216;true&#8217; which is why I didn&#8217;t have to <span style="font-style:italic;">write()</span> the cookie in the above example.</p>
<p>Since I didn&#8217;t define a duration in the options object when instantiating the cookie (nor did I even include an options object, for that matter), it will only live for the duration of the browser. In other words, it&#8217;s a session cookie: When the user exits the browser and restarts, the cookie will be destroyed. For the cookie to live beyond the lifespan of the browser, you can specify the duration of the cookie to live (in days).</p>
<p>The other options which I omitted were <span style="font-style:italic;">domain, path</span> and <span style="font-style:italic;">secure</span>. None of those were important for my example but for some applications, setting domain- and path-specific cookies and ensuring they are only accessed over HTTPS may be necessary</p>
<p>This example is somewhat simple but I hope it has provided an introduction to using MooTools&#8217; excellent Hash.Cookie API. Good luck and enjoy a tall glass of soymilk with your Hash Cookies!</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.thetruetribe.com%2F2008%2F05%2Fusing-mootools-hash-cookie-api%2F&amp;linkname=Using%20MooTools%26%238217%3B%20Hash.Cookie%20API"><img src="http://www.thetruetribe.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.thetruetribe.com/2008/05/using-mootools-hash-cookie-api/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JavaScript Date Object</title>
		<link>http://www.thetruetribe.com/2008/05/javascript-date-object/</link>
		<comments>http://www.thetruetribe.com/2008/05/javascript-date-object/#comments</comments>
		<pubDate>Wed, 07 May 2008 00:21:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://wordpress.thetruetribe.com/?p=22</guid>
		<description><![CDATA[
In this article I will explore the use of the JavaScript date object and its methods. We won&#8217;t be using any JavaScript libraries because the existing API is quite adequate, and most libraries don&#8217;t really offer much in the way of extensions anyway.
Let&#8217;s start with displaying the current time. You can do this by using [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>In this article I will explore the use of the <strong>JavaScript date object</strong> and its methods. We won&#8217;t be using any JavaScript libraries because the existing API is quite adequate, and most libraries don&#8217;t really offer much in the way of extensions anyway.<span id="more-22"></span></p>
<p>Let&#8217;s start with displaying the current time. You can do this by using the <span style="font-family: 'Courier New';">Date()</span> constructor and calling the <span style="font-family: 'Courier New';">toString()</span> method on it. If you have Firebug, open up the console and type this code:</p>
<pre class="js:nocontrols">var date = new Date();
date.toString();</pre>
<p>You&#8217;ll see that <span style="font-family: 'Courier New';">date.toString()<span style="font-family: sans-serif;"> evaluates to a string containing the current time in Greenwich Meridian Time (GMT). In my case, it is &#8220;Tue May 06 2008 16:06:39 GMT-0700 (Pacific Daylight Time).&#8221;</span></span></p>
<p><span style="font-family: 'Courier New';"><span style="font-family: sans-serif;">There are a number of other <em>to</em> methods available as well. You can paste these into the Firebug console to see what they evaluate to. I&#8217;ve put my example as a comment after each one:</span><br />
</span></p>
<ul>
<li><span style="font-family: 'Courier New';">date.toDateString(); // </span><span class="objectBox objectBox-string">&#8220;Tue May 06 2008&#8243;</span></li>
<li><span style="font-family: 'Courier New';">date.toGMTString(); // </span><span class="objectBox objectBox-string">&#8220;Tue, 06 May 2008 23:06:39 GMT&#8221;</span></li>
<li><span style="font-family: 'Courier New';">date.toLocaleDateString(); // </span><span class="objectBox objectBox-string">&#8220;Tuesday, May 06, 2008&#8243;</span></li>
<li><span style="font-family: 'Courier New';">date.toLocaleString(); // </span><span class="objectBox objectBox-string">&#8220;Tuesday, May 06, 2008 4:06:39 PM&#8221;</span></li>
<li><span style="font-family: 'Courier New';">date.toLocaleTimeString(); // </span><span class="objectBox objectBox-string">&#8220;4:06:39 PM&#8221;</span><span style="font-family: 'Courier New';"><br />
</span></li>
</ul>
<h3>Practical Applications of the JavaScript Date Object</h3>
<p>One of the most obvious applications of the date object is to display the current time, should you desire to do so. Oftentimes news websites will contain the day&#8217;s date, and sometimes they have a clock as well. For example, see <a href="http://www.bbc.co.uk/">the BBC&#8217;s homepage</a> which displays the day&#8217;s date and an analog-style clock done in Flash:</p>
<p><a href="http://www.thetruetribe.com/uploaded_images/bbc-banner-799304.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img style="cursor: pointer;" src="http://www.thetruetribe.com/uploaded_images/bbc-banner-799301.jpg" border="0" alt="" /></a></p>
<p>The BBC follows the format &#8220;Tuesday 6 May 2008&#8243; for example. Let&#8217;s construct that using JavaScript:</p>
<pre class="js:nocontrols">function getFormattedDate(date) {
    var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
    var day = days[date.getDay()];

    var months = ["January", "February", "March", "April", "May", "June",
                  "July", "August", "September", "November", "December"];
    var month = months[date.getMonth()];

    // Returns a string formatted like "Tuesday 6 May 2008"
    return day + " " +
           date.getDate() + " " +
           month + " " +
           date.getFullYear();
}

getFormattedDate(new Date());</pre>
<p>You could also accomplish this with some <strong>RegEx hackery</strong> but I think this is cleaner, albeit a bit more verbose. The benefit of doing this with RegEx is that you can use one of the existing <span style="font-family: 'Courier New';">toString()</span> methods, such as <span style="font-family: 'Courier New';">toLocaleString()</span>, and then parse the data you need from there.</p>
<p>Actually, given that the data is delimited by commas, you could accomplish this simply by splitting the returned string without the use of RegEx. Doing it that way would avoid the need to tediously specify the names of all the days and the months.</p>
<h3>Creating a Countdown Timer in JavaScript</h3>
<p>Another use case for the JavaScript date object is to count down the time remaining until a certain date. This could be the launch of a new website or product, the cut-off time for a submission, or anything else that requires notification of the time remaining until a specific date and time.</p>
<p>On a website I previously worked on, <a href="http://www.endless.com">Endless.com</a>, there is a countdown timer in the banner that notifies the customer how long they have to order to get next day shipping. This is a fun idea because it adds a little pressure for the customer to make an impulse buy as the cutoff time comes closer. I&#8217;ve seen similar uses on other e-commerce sites and it adds a nice touch, for those sites which offer next-day shipping.</p>
<p>To do something like this, I imagine you&#8217;d need two functions, one to update the HTML with the correct date string (given a date object as input), and another, possibly anonymous function that is declared with a setInterval, which decrements the current time and calls the update function. Without writing the implementation details, I imagine it would look something like this:</p>
<pre class="js:nocontrols">function updateTimeRemaining(date) {
    // implementation details for parsing data from date object
    // and updating the DOM
}

window.onload = function() {
    var interval = setInterval(function() {
        updateTimeRemaining(new Date());
    }, 1000);
};</pre>
<p>The updateTimeRemaining() function would need to be written to output the time remaining given a date object. I feel that there may be a better way to do this than creating a new Date() instance every second, however. Could we not use the same date object but decrement its time manually every second? In any case, this isn&#8217;t a full-fledged solution at this point, just an outline of one possible solution.</p>
<p>What are your favorite uses of the JavaScript date object? Do you have other use cases that I&#8217;ve left out here? Please leave them in the comments and I may even devote a whole article to them. There is quite a bit you can do with date and time and I&#8217;m always on the lookout for new uses. Hopefully these short examples will get you thinking about how you can use the JavaScript date object on <em>your</em> site.</div>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.thetruetribe.com%2F2008%2F05%2Fjavascript-date-object%2F&amp;linkname=JavaScript%20Date%20Object"><img src="http://www.thetruetribe.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.thetruetribe.com/2008/05/javascript-date-object/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Downloading the Full MooTools Library</title>
		<link>http://www.thetruetribe.com/2008/05/downloading-the-full-mootools-library/</link>
		<comments>http://www.thetruetribe.com/2008/05/downloading-the-full-mootools-library/#comments</comments>
		<pubDate>Tue, 06 May 2008 04:20:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[MooTools]]></category>

		<guid isPermaLink="false">http://wordpress.thetruetribe.com/?p=21</guid>
		<description><![CDATA[
One of my minor frustrations on the MooTools download page has always been having to manually select each component to add. While it is nice that you can keep the filesize down by omitting components that you don&#8217;t need, I wish they had a way to select all components at once.
Well, it turns out they [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mootools.net/download" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://www.thetruetribe.com/uploaded_images/mootools-all-selected-708490.jpg" border="0" alt="" /></a></p>
<p>One of my minor frustrations on the <a href="http://mootools.net/download">MooTools download page</a> has always been having to manually select each component to add. While it is nice that you can keep the filesize down by omitting components that you don&#8217;t need, I wish they had a way to select all components at once.<span id="more-21"></span></p>
<p>Well, it turns out they do. I just found out that Mootools actually allows you to select all components by calling the <span style="font-family: courier">Download.all()</span> method. You can do this by opening the Firebug console while you&#8217;re on the MooTools download page and entering <span style="font-family: courier">Download.all()</span> and clicking Run. Alternately, if you don&#8217;t have Firebug, you can enter <span style="font-family: courier">javascript:Download.all()</span> into the addressbar and press enter. This will select all components on the page.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.thetruetribe.com%2F2008%2F05%2Fdownloading-the-full-mootools-library%2F&amp;linkname=Downloading%20the%20Full%20MooTools%20Library"><img src="http://www.thetruetribe.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.thetruetribe.com/2008/05/downloading-the-full-mootools-library/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Using Blogger for Content Management</title>
		<link>http://www.thetruetribe.com/2008/04/using-blogger-for-content-management/</link>
		<comments>http://www.thetruetribe.com/2008/04/using-blogger-for-content-management/#comments</comments>
		<pubDate>Fri, 25 Apr 2008 05:39:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Blogger]]></category>
		<category><![CDATA[CMS]]></category>

		<guid isPermaLink="false">http://wordpress.thetruetribe.com/?p=15</guid>
		<description><![CDATA[
Despite the name, Blogger isn&#8217;t just limited to blogs. It actually makes for  a nifty Content Management System (CMS) for a wide range of sites, including e-commerce, informational and educational sites.
I&#8217;ve found it to be an easy and inexpensive (well, free) solution for simple content management, albeit a comparatively inflexible one. You won&#8217;t get [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>Despite the name, <a href="http://www.blogger.com/">Blogger</a> isn&#8217;t just limited to blogs. It actually makes for  a nifty Content Management System (CMS) for a wide range of sites, including e-commerce, informational and educational sites.<span id="more-15"></span></p>
<p>I&#8217;ve found it to be an easy and inexpensive (well, free) solution for simple content management, albeit a comparatively inflexible one. You won&#8217;t get the rich plugin library of blogging platforms like <a href="http://www.wordpress.org/">WordPress</a> or CMS&#8217;s like <a href="http://www.joomla.org/">Joomla</a>, <a href="http://www.pligg.com/">Pligg</a> or <a href="http://www.drupal.org/">Drupal</a>. But you will get the benefit of having a very fast setup time. I estimate once you get good at it, it only takes 15 minutes to be up and running with Blogger (not counting time developing the template of course).</p>
<p>If you already have an existing site layout, adding in Blogger functionality is a snap. Blogger uses special markup that is compartmentalized and easily pasted into an existing HTML layout.</p>
<p>Also, when deploying to your own web server, Blogger plays nice with with PHP. I&#8217;m not sure about other web languages such as ASP or Perl/Mason, but I imagine as long as it&#8217;s an interpreted language, it should be fine.</p>
<p>Blogger is completely transparent to use. In other words, your users will have no idea you&#8217;re using Blogger. One caveat: If you enable comments on your posts then it will be revealed when a user clicks to add a comment.</p>
<h3>Setting up a Blog</h3>
<p>You have three options for hosting the blog. You can get free hosting and a sub-domain at blogspot.com, for instance, thetruetribe.blogspot.com. Or, you can register your own domain name with Blogger for a small fee (e.g. thetruetribe.com). Or, if you already have hosting and a domain name with another provider, you can publish to that domain from Blogger.</p>
<p>By far, most people have a sub-domain at blogspot.com. But, except for personal blogs, this isn&#8217;t really appropriate most of the time. Although I do see e-commerce sites have blogs at blogspot.com addresses, this is somewhat of a faux pas in my opinion.</p>
<p>One reason not to have your blog on a separate domain is that it divides resources. If you have both <span style="font-style: italic;">yoursite.com</span> and <span style="font-style: italic;">yoursite.blogspot.com</span>, the SEO will be twice as difficult as keyword relevance and backlinks will be split between the two web properties. From an SEO standpoint (and probably from a user&#8217;s standpoint as well), it&#8217;s ideal to have the blog or news page be on the same domain as the main site. You could also publish the blog to a sub-domain of the site, for instance <span style="font-style: italic;">blog.yourdomain.com</span>, without ill effect.</p>
<p>My recommendation is to go for one of the other two options unless it&#8217;s a personal site, as you will want to have a custom domain in order to rank well for SEO and also for users to be able to easily recall the domain and access it.</p>
<p>The second option, registering the domain through Blogger and having them host it, has the benefit that you get free hosting and can use their powerful XML templates. The XML templates were released in 2007 and seem to have been complete rewrite of their templating engine. You don&#8217;t get this functionality when publishing to your own FTP site, so this is the best option if you want to fully utilize what Blogger has to offer. Blogger&#8217;s XML templates allow easy drag-and-drop rearranging of widgets on the page, as well as a variety of built in widgets including RSS feed aggregators, image galleries and so on.</p>
<p>The third option, publishing to your own FTP site, is appropriate if you already have a domain name and hosting or if you wish to utilize the flexibility having your own hosting can give you. But, take note that you will be limited to only using &#8220;Blogger 1.0&#8243; templates, without any of the new XML features or widgets. Still, this is usually sufficient for simple content management.</p>
<h3>Publishing Via FTP from Blogger</h3>
<p>Here&#8217;s a walkthrough to getting set up with Blogger on your own FTP server.</p>
<ol>
<li>Go to <a href="http://www.blogger.com/">www.blogger.com</a> and click &#8220;Create blog now&#8221;</li>
<li>Don&#8217;t bother filling out any of the information just yet. Instead, click on &#8220;Advanced Blog Setup&#8221;<br />
<img style="max-width: 800px;" src="http://lh5.ggpht.com/jdempcy/SBFmXv7ldmI/AAAAAAAAABk/EQfQsFqTNYA/%5BUNSET%5D.jpg" alt="" /></li>
<li>On the following page you can enter account details for your FTP server. You can choose what path and filename to publish to, as well as whether to publish using FTP or <a href="http://en.wikipedia.org/wiki/SSH_file_transfer_protocol">SFTP</a>. You can choose to publish to a .html file (<em>e.g.</em> <span style="font-family:Courier New;">index.html</span>) or a .php file if your hosting supports it.</li>
</ol>
<p>That&#8217;s it! Assuming all the details have been entered correctly, Blogger should be set up to publish files to your FTP server now. It will publish the main page at the URL you specified, as well as archive pages and individual &#8220;permalink&#8221; pages for posts.</p>
<h3>Customizing the Blogger Template</h3>
<p>After setting up the FTP details, The following page presents readymade templates for Blogger. I&#8217;ll assume you already have a layout you&#8217;d like to use. If not, then now would be a good time to make one.</p>
<p>Since we don&#8217;t need to use the template for any layout, CSS or HTML other than the Blogger-specific code, it doesn&#8217;t matter a great deal which template you choose. But for now, just choose Minima, so we&#8217;re working with the same code base.</p>
<p>Select Minima, continue, and publish a post (the obligatory &#8220;Hello, world!&#8221; of your new blog). The click on the Template tab to get down to business, cut-and-paste style.</p>
<p><img src="http://lh4.ggpht.com/jdempcy/SBFo_f7ldnI/AAAAAAAAABs/coMYWTbCLbk/%5BUNSET%5D.jpg" alt="" /></p>
<p>The next step is to open up your layout file in the editor of your choice (I prefer SciTE and Aptana personally) and get ready to cut-and-paste.</p>
<p>The first tags to grab are &lt;$BlogPageTitle$&gt;  and &lt;$BlogMetaData$&gt;, which output the title of your blog and hook up the RSS feeds, respectively. The &lt;$BlogPageTitle$&gt; tag can be outputted as the page title (i.e. in &lt;title&gt;&lt;/title&gt; tags) as well as the header, in an &lt;h1&gt;.</p>
<p>The resulting code should look like this:</p>
<p><span style="font-family:Courier New;"><br />
&lt;head&gt;<br />
&lt;title&gt;&lt;$BlogPageTitle$&gt;&lt;/title&gt;<br />
&lt;$BlogMetaData$&gt;<br />
&lt;/head&gt;</span></p>
<p>The &lt;$BlogMetaData$&gt; tag outputs a lot of good stuff including all flavors of RSS feeds (RSS 2.0, RSD, Atom).</p>
<p>Next, grab everything between and including the &lt;Blogger&gt;&lt;/Blogger&gt; tags. You&#8217;ll want to paste this into the main wrapper of you site, where you want the dynamic content to be. This is typically something like &lt;div id=&#8221;main-content&#8221;&gt;. It&#8217;s a lot of code to paste, and the indentation may be a bit off, but if you&#8217;ve correctly copied it, it should work fine.</p>
<p>As for styling, you can inspect the resulting HTML using Firebug and see the pre-defined classes. Or you can always add classes yourself to the Blogger code. Just make sure not to add any <span style="font-family:Courier New;">id</span>s since the code will be repeated once for each post.</p>
<h3>The Sidebar: Recent Posts, Archives, Profile</h3>
<p>You may want to include archived posts, recent posts or your Blogger profile. It&#8217;s quite simple, really. Scrolling down towards the bottom of the <em>Minima</em> HTML/Blogger tag source, you&#8217;ll find an area marked with the comment &#8220;Begin #sidebar.&#8221; Here is where we&#8217;ll find the tags:</p>
<p><span style="font-family:Courier New;"> &lt;$BlogMemberProfile$&gt;<br />
</span><br />
This one outputs your Blogger profile pic and description. Nothing too useful but I guess it&#8217;s nice for a blog site.</p>
<p><span style="font-family:Courier New;"> &lt;ul id=&#8221;recently&#8221;&gt;<br />
&lt;BloggerPreviousItems&gt;<br />
&lt;li&gt;&lt;a href=&#8221;&lt;$BlogItemPermalinkURL$&gt;&#8221;&gt;&lt;$BlogPreviousItemTitle$&gt;&lt;/a&gt;&lt;/li&gt;<br />
&lt;/BloggerPreviousItems&gt;<br />
&lt;/ul&gt;</span></p>
<p>This code outputs the recent posts, with links to their individual permalink pages.</p>
<p><span style="font-family:Courier New;"> &lt;ul class=&#8221;archive-list&#8221;&gt;<br />
&lt;BloggerArchives&gt;<br />
&lt;li&gt;&lt;a href=&#8221;&lt;$BlogArchiveURL$&gt;&#8221;&gt;&lt;$BlogArchiveName$&gt;&lt;/a&gt;&lt;/li&gt;<br />
&lt;/BloggerArchives&gt;</span></p>
<p>&lt;/ul&gt;</p>
<p>This code links to the archive pages.</p>
<p>Hopefully this post has proven helpful and will give you the confidence to publish your own Blogger-powered dynamically driven sites! It&#8217;s nothing fancy, but it gets the job done and is a breeze to set up. Post comments with any other tweaks you&#8217;ve found or issues you run into. Blogger certainly has its shortcomings but for the price (i.e. free), I&#8217;m not complaining, and it does a lot of things right too.</p>
<p>Have fun and happy bloggin&#8217;!</p></div>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.thetruetribe.com%2F2008%2F04%2Fusing-blogger-for-content-management%2F&amp;linkname=Using%20Blogger%20for%20Content%20Management"><img src="http://www.thetruetribe.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.thetruetribe.com/2008/04/using-blogger-for-content-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Redefining console.log() For Browsers Without Firebug</title>
		<link>http://www.thetruetribe.com/2008/04/redefining-console-log-for-browsers-without-firebug/</link>
		<comments>http://www.thetruetribe.com/2008/04/redefining-console-log-for-browsers-without-firebug/#comments</comments>
		<pubDate>Fri, 11 Apr 2008 00:10:00 +0000</pubDate>
		<dc:creator>jdempcy</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://wordpress.thetruetribe.com/?p=8</guid>
		<description><![CDATA[
I use Firebug&#8217;s console.log() method extensively when developing code. But, when viewing the site in Internet Explorer, Safari, Opera or other browsers that don&#8217;t have Firebug, console.log() throws an error. Rather than wrap each log statement in a try/catch, I just add this bit of code during development that checks for Firebug and redefines the [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.thetruetribe.com/uploaded_images/firebug_logo-781750.png" border="0" alt="Firebug" /></p>
<p>I use Firebug&#8217;s console.log() method extensively when developing code. But, when viewing the site in Internet Explorer, Safari, Opera or other browsers that don&#8217;t have Firebug, console.log() throws an error.<span id="more-8"></span> Rather than wrap each log statement in a <a href="http://en.wikipedia.org/wiki/Exception_handling">try/catch</a>, I just add this bit of code during development that checks for Firebug and redefines the console.log() method if Firebug isn&#8217;t installed:</p>
<pre class="js:nocontrols"> // When logging messages with console.log()
 // if user doesn't have Firebug, write them to the DOM instead
 if (typeof console == "undefined") {

  // Create an unordered list to display log messages
  var logsOutput = document.createElement('ul');
  document.getElementsByTagName('body')[0].appendChild(logsOutput);

  // Define console.log() function
  console = {
   log: function(msg) {
    logsOutput.innerHTML += '&lt;li&gt;' + msg + '&lt;/li&gt;';
   }
  };
 }</pre>
<h3>Logging Statements in Production Code</h3>
<p>If you don&#8217;t want to have to remove your console.log() statements in production code, you can set a &#8220;development mode&#8221; flag that ignores log messages.</p>
<pre class="js:nocontrols">var DEVELOPMENT_MODE = true;

// When logging messages with console.log()
// if user doesn't have Firebug, write them to the DOM instead
if (typeof console == "undefined" &amp;&amp; DEVELOPMENT_MODE == true) {

  // Create an unordered list to display log messages
  var logsOutput = document.createElement('ul');
  document.getElementsByTagName('body')[0].appendChild(logsOutput);

  // Define console.log() function
  console = {
    log: function(msg) {
      logsOutput.innerHTML += '&lt;li&gt;' + msg + '&lt;/li&gt;';
    }
  };
} else if (DEVELOPMENT_MODE == false) {
  console = {
    log: function() {} // Do nothing
  };
}</pre>
<p>I made the flag uppercase since it follows <span style="font-weight: bold;">naming<br />
conventions for constants</span>. Now you can set the DEVELOPMENT_MODE flag when deploying to production environments and leave your logging messages intact, if you desire.</p>
<p>Take note that this adds unnecessary page-weight from the logging messages, so to fully optimize the code, logging should be removed. But, leaving some amount of logging in the production code is probably acceptable, as long as it doesn&#8217;t add more than a few kilobytes to the page weight. As long as you&#8217;re using <a href="http://en.wikipedia.org/wiki/Gzip">GZip</a>, <a href="http://www.crockford.com/javascript/jsmin.html">minifying your JavaScript</a> and serving it with <a href="http://stevesouders.com/hpws/rule-expires.php">far future expires headers</a>, a few extra <span style="font-style: italic;">k</span> aren&#8217;t going to hurt anything.</p>
<h3>Redefining All Firebug Methods</h3>
<p>If you use other Firebug methods, such as assert(), trace() or error(), then you may want to use the following code, provided by the developers of Firebug as part of the <a href="http://www.getfirebug.com/lite.html">Firebug Lite</a> project.</p>
<p>This code redefines all Firebug methods as empty functions when Firebug isn&#8217;t installed on the browser:</p>
<pre class="js:nocontrols">if (!window.console || !console.firebug) {
  var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
  "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];

  window.console = {};
  for (var i = 0; i &lt; names.length; ++i)
    window.console[names[i]] = function() {}
}</pre>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.thetruetribe.com%2F2008%2F04%2Fredefining-console-log-for-browsers-without-firebug%2F&amp;linkname=Redefining%20console.log%28%29%20For%20Browsers%20Without%20Firebug"><img src="http://www.thetruetribe.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.thetruetribe.com/2008/04/redefining-console-log-for-browsers-without-firebug/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Firebug Tutorial: Getting Started</title>
		<link>http://www.thetruetribe.com/2008/03/firebug-tutorial-getting-started/</link>
		<comments>http://www.thetruetribe.com/2008/03/firebug-tutorial-getting-started/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 12:58:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[Firebug]]></category>
		<category><![CDATA[Firefox]]></category>

		<guid isPermaLink="false">http://wordpress.thetruetribe.com/?p=3</guid>
		<description><![CDATA[Firebug is a plugin for Firefox that greatly aids CSS and JavaScript debugging. This guide will walk you through installing Firebug and using some of its functionality, including debugging JavaScript, inspecting the DOM and editing CSS on the fly.

Getting Started
First, make sure you&#8217;re running Firefox. If you aren&#8217;t, get Firefox now. You won&#8217;t be disappointed. [...]]]></description>
			<content:encoded><![CDATA[<p>Firebug is a plugin for Firefox that greatly aids CSS and JavaScript debugging. This guide will walk you through installing Firebug and using some of its functionality, including<span style="font-weight: bold;"> debugging JavaScript</span>, inspecting the DOM and<span style="font-weight: bold;"> editing CSS on the fly.<span id="more-3"></span><br />
</span></p>
<h4>Getting Started</h4>
<p>First, make sure you&#8217;re running Firefox. If you aren&#8217;t, <a title="Firefox really is the best browser." href="http://www.getfirefox.com/">get Firefox</a> now. You won&#8217;t be disappointed. Next, <a href="https://addons.mozilla.org/en-US/firefox/addon/1843">install Firebug</a> by following the link and clicking &#8220;Install Now.&#8221; After installing, restart Firefox and continue.</p>
<p>Now you can click the small icon in the bottom right corner of the Firefox window to open Firebug. Go ahead and open it&#8211; the first time running, you may have to choose to enable it for sites on the world wide web.</p>
<p><a href="http://www.thetruetribe.com/uploaded_images/html1-770907.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img style="cursor: pointer;" src="http://www.thetruetribe.com/uploaded_images/html1-770892.gif" border="0" alt="" /></a></p>
<h4>Using the Console</h4>
<p>The first tab that&#8217;s open in Firebug is the console. The console tab shows JavaScript error messages, as well as having a command line interface (CLI) where you can enter JavaScript and execute it in real time.</p>
<p><a style="margin: 10px 0pt 10px 10px; float: right;" href="http://www.getfirebug.com/cl.html"><img class="miniscreen" src="http://www.getfirebug.com/screenHome-cl.gif" alt="" /></a>Using the CLI, you can call functions, define variables, or even write new functions.</p>
<p>The JavaScript error messages are are also helpful for debugging since they show you which line the error occurred on, as well as a <a href="http://en.wikipedia.org/wiki/Stack_trace">stack trace</a>.</p>
<p>Another interesting feature is the ability to <span style="font-weight: bold;">log messages to the console </span>by using the method <span style="font-style: italic;">console.log()</span>. Note that this will throw an error in browsers which don&#8217;t have Firebug installed, so it&#8217;s just for development purposes.</p>
<p>Logging messages can be very useful when debugging complex JavaScript applications that have a lot of moving parts. It can also be used for page profiling. Here&#8217;s an example of how you might use logging to the console to add some <span style="font-weight: bold;">rudimentary speed profiling</span> of a JavaScript function:</p>
<pre class="js:nocontrols">function doStuff() {
var startTime = new Date().getTime(); // The current time in epoch milliseconds

// Add code here to be profiled

var endTime = new Date().getTime() - startTime;
console.log("The function doStuff() took " + endTime + " milliseconds to complete.");
}</pre>
<p>This would result in a message being logged to the console with the amount of milliseconds it took for that code to execute. Nothing fancy, but it gets the job done!</p>
<h4>DOM Inspection</h4>
<p>Clicking the next tab over in Firebug, to <span style="font-style: italic;">HTML</span>, you&#8217;ll find a two-paned window that allows you to browse the DOM on the left and edit CSS on the right.</p>
<p>Start opening HTML tags and mousing over them. You&#8217;ll notice that the HTML element on the screen lights up when you hover over the tag. It&#8217;s a nice feature that lets you quickly orient yourself in the code.</p>
<p>The highlighted area also shows how much space an element is taking up on the screen. The color blue denotes the element&#8217;s <span style="font-style: italic;">height</span> and <span style="font-style: italic;">width</span>, while yellow is <span style="font-style: italic;">margin</span> and purple is <span style="font-style: italic;">padding</span>.</p>
<p>Clicking the <span style="font-style: italic;">Inspect</span> button (next to the bug icon in the top left corner of Firebug) will toggle a mode where you can click on HTML elements on the screen and it will go to that tag in the code.</p>
<p>There&#8217;s another tab for DOM inspection, the aptly-named <span style="font-style: italic;">DOM</span> tab. Here you will find all of the DOM objects created by JavaScript, such as <span style="font-weight: bold;">variables and functions</span>, as well as the <span style="font-weight: bold;">core DOM API</span> (for example, the <span style="font-style: italic;">window</span> and <span style="font-style: italic;">document</span> objects can be inspected here).</p>
<p>I check this page when I want to view the current state of the page and watch it change as JavaScript executes. For example, say I have a variable that keeps track of how many items are in a shopping cart. I could watch this variable in the <span style="font-style: italic;">DOM</span> tab to make sure that it&#8217;s incremented when I add an item to the cart.</p>
<h4>Editing CSS on the Fly</h4>
<p>Going back to the <span style="font-style: italic;">HTML</span> tab, notice that the pane on the right shows CSS styles for whichever element is currently selected. You can choose an element in the left pane (or by clicking <span style="font-style: italic;">Inspect</span> and then clicking the element), and the CSS styles for that element will be displayed. Furthermore, you can edit the properties and even add new ones.</p>
<p>Firebug has a different take on CSS editing than some other debugging programs, namely the <span style="font-weight: bold;">Microsoft Web Developer Toolbar</span>, so I&#8217;ll clarify how it works: In Firebug, when you change a CSS style, it updates it for every element on the page. Conversely, in Microsoft Web Developer Toolbar, changing CSS styles only affects the currently selected element.</p>
<p>By way of example, say you have the CSS rule <span style="font-style: italic;">p {padding: 10px;}</span>. You then select a P tag and change it to <span style="font-style: italic;">padding: 20px</span>;<span style="font-style: italic;"> </span>using Firebug<span style="font-style: italic;">. </span>The result is that every P tag will now have 20px padding, unlike other programs where it would only affect the styles of the selected tag.</p>
<p>To add a new style, simply click twice in the whitespace inside of a style block, next to the existing declarations. Firebug even has a convenient auto-complete feature for writing CSS.</p>
<p>In the right page, there are three tabs: <span style="font-style: italic;">Style, Layout </span>and <span style="font-style: italic;">DOM</span>. So far, we&#8217;ve been editing CSS in the <span style="font-style: italic;">Style</span> tab, but make sure to check out the other two as well. The <span style="font-style: italic;">Layout</span> tab offers an alternate view of the box model for the selected element, along with pixel-precise measurements of its dimensions. The <span style="font-style: italic;">DOM</span> tab shows all properties and methods for that element.</p>
<h4>Page Profiling and Network Metrics</h4>
<p><a style="margin: 10px 10px 10px 0pt; float: left;" href="http://www.getfirebug.com/net.html"><img class="miniscreen" src="http://www.getfirebug.com/screenHome-net.gif" alt="" /></a>Nothing&#8217;s worse than making a great site only to have it suffer from poor front end performance. (OK, well, a lot of things are worse &#8212; but it&#8217;s still frustrating!). The Firebug <span style="font-style: italic;">Net</span> profiler can help get to the source of that slowness.</p>
<p>Although it is far from robust, the <span style="font-style: italic;">Net </span>tab offers semi-reliable metrics on the download speed of all assets including the HTML document, CSS, JavaScript, images and any other linked files.</p>
<p>You can see which files are being downloaded concurrently and which are blocking (hint: it&#8217;s the JavaScript), and how many connections are being opened with a given domain.</p>
<p>For more extensive page profiling, be sure to check out <a href="http://developer.yahoo.com/yslow/"><span style="font-style: italic;">YSlow</span>!</a>, a plugin for Firebug  (I guess that makes it an extension-of-an-extension) developed by Yahoo.</p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.thetruetribe.com%2F2008%2F03%2Ffirebug-tutorial-getting-started%2F&amp;linkname=Firebug%20Tutorial%3A%20Getting%20Started"><img src="http://www.thetruetribe.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.thetruetribe.com/2008/03/firebug-tutorial-getting-started/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
