<?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>girlswhogeek.com</title>
	<atom:link href="http://girlswhogeek.com/feed" rel="self" type="application/rss+xml" />
	<link>http://girlswhogeek.com</link>
	<description>Girls Who Geek</description>
	<lastBuildDate>Tue, 01 Mar 2016 18:41:40 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.8.4</generator>
	<item>
		<title>Creating a Facebook page for your blog</title>
		<link>http://girlswhogeek.com/tutorials/2013/creating-a-facebook-page-for-your-blog</link>
		<comments>http://girlswhogeek.com/tutorials/2013/creating-a-facebook-page-for-your-blog#comments</comments>
		<pubDate>Tue, 11 Jun 2013 12:03:34 +0000</pubDate>
		<dc:creator><![CDATA[Jem]]></dc:creator>
				<category><![CDATA[Social Media]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[increasing hits]]></category>
		<category><![CDATA[marketing]]></category>

		<guid isPermaLink="false">http://girlswhogeek.com/?p=13059</guid>
		<description><![CDATA[<p>As someone who&#8217;s been blogging for over 10 years, I&#8217;ve seen blog subscription options come and go. I&#8217;ve dabbled with bloglovin&#8217; to get posts to my inbox (inevitably deleting them as my unread count reaches triple figures); fallen in and out of love with RSS and Google Reader (forgetting to check and coming back to [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/tutorials/2013/creating-a-facebook-page-for-your-blog">Creating a Facebook page for your blog</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>As someone who&#8217;s been blogging for over 10 years, I&#8217;ve seen blog subscription options come and go. I&#8217;ve dabbled with bloglovin&#8217; to get posts to my inbox (inevitably deleting them as my unread count reaches triple figures); fallen in and out of love with RSS and Google Reader (forgetting to check and coming back to thousands of posts demanding my attention) and even spent many years browsing each favourited blog one by one. The announced death of Google Reader this year only cements the need for an alternative way to stay up to date even further.</p>
<p>By far the most successful way of getting my eyes on your blog updates is to integrate with a service that I already use (all day!) every day: Facebook.</p>
<h2>Creating Your Facebook Page</h2>
<p>We&#8217;ll start on the <a href="https://www.facebook.com/pages/create.php" rel="nofollow">Create a Page</a> page. Choose <em>Brand or Product</em> and scroll down to the bottom of the list to <em>Website</em>. Enter the name of your website, agree to the Facebook terms (which you probably ought to read) and click Get Started to continue.</p>
<p><strong>Hint:</strong> <em>if your website has a title with a keyword in it that people are likely to search for — e.g. HotCars.com might attract people searching for Cars, separate the words in the page title to &#8220;Hot Cars .com&#8221;</em></p>
<p>At this point you&#8217;ll be prompted for a profile picture.</p>
<p><a href="http://girlswhogeek.com/wp-content/uploads/2013/03/facebook-page-add-pic.png"><img class="aligncenter size-medium wp-image-13062" alt="facebook-page-add-pic" src="http://girlswhogeek.com/wp-content/uploads/2013/03/facebook-page-add-pic-300x173.png" width="300" height="173" srcset="http://girlswhogeek.com/wp-content/uploads/2013/03/facebook-page-add-pic-300x173.png 300w, http://girlswhogeek.com/wp-content/uploads/2013/03/facebook-page-add-pic.png 592w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>If you don&#8217;t have one ready then feel free to skip this step, but I find it helps to go through the process properly so that I don&#8217;t forget later on. Don&#8217;t forget that your profile picture will appear on fan&#8217;s timeline and is effectively your avatar for Facebook, so choose something that people will remember you by so that they don&#8217;t &#8220;unlike&#8221; your page later on.</p>
<p>Once you&#8217;ve added your profile picture you should be prompted to set up the about section of your page:</p>
<p><a href="http://girlswhogeek.com/wp-content/uploads/2013/06/About.png"><img class=" wp-image-15374 aligncenter" alt="About" src="http://girlswhogeek.com/wp-content/uploads/2013/06/About.png" width="546" height="248" srcset="http://girlswhogeek.com/wp-content/uploads/2013/06/About.png 683w, http://girlswhogeek.com/wp-content/uploads/2013/06/About-300x136.png 300w" sizes="(max-width: 546px) 100vw, 546px" /></a></p>
<p>Here you can fill in all the relevant information &#8211; describing your blog and making it sound as appealing as possible (whilst being honest of course). You can then choose to add in all the links to your relevant social networks as well as your website.</p>
<p>Please note Facebook also asks you to verify that your blog is genuine by ticking that it is &#8216;a real business, product or brand&#8217; so you should tick yes here and again tick yes where it questions whether this page will be the &#8216;authorised and official representation&#8217; of your blog on Facebook.</p>
<p>The next section asks you to choose a Facebook web address for your blog:</p>
<p><a href="http://girlswhogeek.com/wp-content/uploads/2013/06/WebAddress.png"><img class=" wp-image-15375 aligncenter" alt="WebAddress" src="http://girlswhogeek.com/wp-content/uploads/2013/06/WebAddress.png" width="524" height="181" srcset="http://girlswhogeek.com/wp-content/uploads/2013/06/WebAddress.png 655w, http://girlswhogeek.com/wp-content/uploads/2013/06/WebAddress-300x103.png 300w" sizes="(max-width: 524px) 100vw, 524px" /></a></p>
<p>It makes sense to keep the URL as simple as possible so where you can simply use the name of your blog, stick to it.</p>
<p>That&#8217;s basically it &#8211; your page is now out there and Facebook will then prompt you to like it and once you do so can anybody else. There are plenty of ways you can pep it up further and make it more appealing to your readers, including adding a cover photo, liking some of your friends&#8217; blogs&#8217; pages and if you fancy getting more technical customising the landing page when visitors first arrive on your page.</p>
<p>To keep those likes rolling in you need to publicise your page through other means, including Twitter and possibly your personal Facebook. You also need to make sure you link back to your Facebook profile from your blog itself, usually through a direct link in the sidebar. Similarly, you need to update your feed regularly to keep readers interested so this means posting on Facebook every time you write a new blog post but also regularly engaging with your audience through visual means such as photos and videos. Ask questions and engage regularly with your fans.</p>
<p>Facebook is regularly accessed by millions of users and they definitely include people who would be interested in reading your blog as well as current readers. Its own Facebook page will give your blog even more potential to be read and enjoyed.</p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/tutorials/2013/creating-a-facebook-page-for-your-blog">Creating a Facebook page for your blog</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://girlswhogeek.com/tutorials/2013/creating-a-facebook-page-for-your-blog/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Breaking in to the Web Design Industry</title>
		<link>http://girlswhogeek.com/articles/2013/breaking-in-to-the-web-design-industry</link>
		<comments>http://girlswhogeek.com/articles/2013/breaking-in-to-the-web-design-industry#respond</comments>
		<pubDate>Fri, 07 Jun 2013 19:20:06 +0000</pubDate>
		<dc:creator><![CDATA[Jem]]></dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[guest post]]></category>

		<guid isPermaLink="false">http://girlswhogeek.com/?p=15371</guid>
		<description><![CDATA[<p>Are you ready for a new career as a web designer? Do you enjoy designing sites for fun, for friends or as a hobby? Then, it might be time to start considering web design as a profession. Whatever way you start – freelancing, at a company or as an intern – web design is a [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/articles/2013/breaking-in-to-the-web-design-industry">Breaking in to the Web Design Industry</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Are you ready for a new career as a web designer? Do you enjoy designing sites for fun, for friends or as a hobby? Then, it might be time to start considering web design as a profession.</p>
<p>Whatever way you start – freelancing, at a company or as an intern – web design is a viable possibility if it&#8217;s something you love and enjoy. Passion is the hallmark of many successful web designers, but there are other factors involved too.</p>
<h2>Your Website</h2>
<p>Every web designer needs a website, including you. It&#8217;s the best way to showcase sites that you have designed for clients and broadcast your designer talent. An online portfolio with active linking samples gives potential customers an overview of what you can offer. A well-written &#8216;About&#8217; page also provides a glimpse into the type of person you are, and indicates your individual style and approach.</p>
<p>Having your own blog to post articles showing your knowledge and understanding is a must have these days and can also lead to increased opportunity within the online community to write for other blog sites, known as <a href="http://www.uk-blogs.co.uk">guest blogging</a> which helps build your &#8216;profile&#8217;.</p>
<h2>Working Space</h2>
<p>When starting out as a web designer, begin small. By working from a computer desk in a spare room or cornered space at home, expenses can be kept to a minimum. A lot of equipment isn&#8217;t required either. A PC, Mac and/or laptop, phone, design software and high speed Internet connection, plus the skills and know-how to find customers, build websites and manage your financial accounts are all that you need.</p>
<h2>Designer Skills</h2>
<p>In designing for the web, you can&#8217;t go far without creative drive, an eye for colour and a natural sense of design. Along with proficient use of Adobe Illustrator and Photoshop, and a bit of Dreamweaver, knowing what works and what doesn&#8217;t, really helps. What may look great &#8216;offline&#8217; may not be so functional &#8216;online&#8217; to meet a client&#8217;s needs or business purpose.</p>
<p>Having an open mind and relaxed temperament is also ideal. This is particularly true when clients dislike a design and request changes you don&#8217;t agree with. Aside from expressing your ideas and discussing designs with customers, communicating well with other designers (if in a shared workplace) is also important.</p>
<h2>Keep Learning</h2>
<p>As a designer, it is vital to up-skill on a regular basis. This includes understanding the nuances of web browsers and updated versions of the software you use. While it isn&#8217;t necessary to learn code like Javascript or PHP, it is beneficial to have a foundation in XHTML and CSS (Cascading Style Sheets). New skills can be picked up from guide books, enrolling on college courses or online resources, or by attending seminars.</p>
<p>In todays climate for jobs in the industry it is becoming more frequent for a web designer role to basically be advertised for someone who is also a front-end <a href="http://www.mathewporter.co.uk">web developer</a>, so improving your skills and demonstrating them in projects and your portfolio is key.</p>
<h2>Design for the Web</h2>
<p>Web design is one of the hardest skills to learn so value the work you do. Promote yourself from a professional standpoint. Whether it is in your physical appearance or presenting a formal proposal, showing your best will lead you towards the best clients and opportunities.</p>
<p>Building a reputation is invaluable in attracting new prospects over the long term. In the <a href="http://www.twdg.co.uk">web design</a> industry, this can take a bit of time and effort, but you can do it.</p>
<p class="author-box"><a href="https://plus.google.com/106198049776360121594?rel=author">Mathew Porter</a> has been in the Web Design / Development and Online Marketing industry for over 8 years, building a wide range of skills throughout his career in various roles. Whilst working for his Design and Marketing Agency, TWDG Ltd. Mathew also runs his own blog and web site.</p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/articles/2013/breaking-in-to-the-web-design-industry">Breaking in to the Web Design Industry</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://girlswhogeek.com/articles/2013/breaking-in-to-the-web-design-industry/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Outlook Vs. Zimbra</title>
		<link>http://girlswhogeek.com/technology/2013/outlook-vs-zimbra</link>
		<comments>http://girlswhogeek.com/technology/2013/outlook-vs-zimbra#respond</comments>
		<pubDate>Mon, 13 May 2013 09:01:53 +0000</pubDate>
		<dc:creator><![CDATA[Jem]]></dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[guest post]]></category>

		<guid isPermaLink="false">http://girlswhogeek.com/?p=15353</guid>
		<description><![CDATA[<p>Now that Hotmail has been converted to Outlook, many users are looking at email clients like Zimbra. Although both contain similar features, there are some distinct differences that will matter greatly to some users. Here is a breakdown of the various features of Outlook and Zimbra that will help you make a more informed decision [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/technology/2013/outlook-vs-zimbra">Outlook Vs. Zimbra</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><img alt="" src="http://regmedia.co.uk/2012/07/11/vmware_zimbra_logo.jpg" style="margin: 10px; width: 321px; height: 249px;" /></p>
<p>Now that Hotmail has been converted to Outlook, many users are looking at email clients like Zimbra. Although both contain similar features, there are some distinct differences that will matter greatly to some users. Here is a breakdown of the various features of Outlook and Zimbra that will help you make a more informed decision about which email client to choose.</p>
<h3>Overview</h3>
<p>Zimbra was developed by VMware software company, while Outlook was created by Microsoft. Outlook first came out in 1997 as part of the Microsoft Office package, while Zimbra was not released until 2007. Since their release, both of these email clients have put out multiple versions with continued offerings coming in the future.</p>
<h3>Cost</h3>
<p>Zimbra desktop is free, open source software that is not proprietary. The cost of Outlook depends on which version you are using. Since Outlook has replaced Hotmail, it is now free for anyone to use. Otherwise it will be part of any Microsoft Office suite that you buy.</p>
<h3>Features</h3>
<p>A quick glance at the features offered by these two email clients shows that they are fairly similar. Here are some of the common general features:</p>
<ul>
<li>Conversation view</li>
<li>Encryption</li>
<li>HTML support</li>
<li>Image blocking</li>
<li>Local Spam filtering</li>
<li>Server Spam filtering</li>
<li>UTF-8</li>
<li>Virtual folder</li>
</ul>
<p>When it comes to general features the only real differences are that Zimbra offers PGP support while Outlook does not. Also, Outlook has Phishing filters, which are not offered on Zimbra.</p>
<p>When it comes to message features there are a few more differences. Both Outlook and Zimbra offer:</p>
<ul>
<li>Message labeling</li>
<li>Signatures</li>
<li>Spellcheck</li>
</ul>
<p>However, Outlook also offers bottom post replies, and ways to reformat received messages while Zimbra does not.</p>
<p>Those interested in the authentication and protocol features of Outlook and Zimbra should know that Outlook’s authentication features do not include DIGEST-MD5 and PKCS#11 authentication, while Zimbra does not feature authentication for SSL/TLS. When it comes to protocol both are very similar. The difference is that Outlook does not offer protocol for LDAP v.3 and NNTP while Zimbra does not offer protocol for MAPI, MAPI/RPC or SMTP. Both Outlook and Zimbra use a Graphic User Interface that supports BMP, GIF, JPED and PNG image files.</p>
<h3>Platforms that are Supported</h3>
<p>When it comes to supported platforms, Zimbra is far more versatile than Outlook. While Outlook will only support Windows and Mac, Zimbra will support those as well as Unix and Linux. This is one of the biggest differences between the two email clients and one of the main reasons that some people are making the move to Zimbra. As more and more people start to use Unix and Linux to avoid viruses, Zimbra is likely to grow in popularity.</p>
<h3>Support Features</h3>
<p>While both Outlook and Zimbra have support features for Forums that is where the similarities end, as both offer a number of support features that the other does not. Outlook also has support features for FAQ, Instructional Videos, and Knowledge Base while Zimbra does not. However, Zimbra has support features for Blogs, Request Forms, Tips and Hints, White Papers and Wiki as well.  None of these support features are included on Outlook.</p>
<h3>The Verdict</h3>
<p>Choosing an email client really depends on your own personal preferences, the type of operating system you use and how you plan to use the account. Anyone that wants to move to open source software like Linux or Unix will not be able to use Outlook. Otherwise the two offer very similar features and can both be used for free. Most people will just end up sticking with the email service they are used to, but if you are unhappy then you should consider some of the ways that these two email clients are different.</p>
<p class="author-box">Edward Dennis is a tech and marketing blogger. He works for a dedicated server hosting provider in Australia, Web24.</p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/technology/2013/outlook-vs-zimbra">Outlook Vs. Zimbra</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://girlswhogeek.com/technology/2013/outlook-vs-zimbra/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Forum Upgraded and Improved</title>
		<link>http://girlswhogeek.com/updates/2013/forum-upgraded-and-improved</link>
		<comments>http://girlswhogeek.com/updates/2013/forum-upgraded-and-improved#comments</comments>
		<pubDate>Thu, 21 Mar 2013 11:19:00 +0000</pubDate>
		<dc:creator><![CDATA[Jem]]></dc:creator>
				<category><![CDATA[Updates]]></category>

		<guid isPermaLink="false">http://girlswhogeek.com/?p=15284</guid>
		<description><![CDATA[<p>Thanks for your patience folks &#8211; the GWG forums are now up to date and using a nifty anti-spam plugin which should curb that non-stop tag/post spam we had before. The forums have also been properly integrated into the site layout (which is probably here for the foreseeable future; I want to concentrate on new [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/updates/2013/forum-upgraded-and-improved">Forum Upgraded and Improved</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Thanks for your patience folks &#8211; the GWG forums are now up to date and using a nifty anti-spam plugin which should curb that non-stop tag/post spam we had before. The forums have also been properly integrated into the site layout (which is probably here for the foreseeable future; I want to concentrate on new content!)</p>
<p>Registration has reopened &#8211; you can join or login via the main menu. </p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/updates/2013/forum-upgraded-and-improved">Forum Upgraded and Improved</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://girlswhogeek.com/updates/2013/forum-upgraded-and-improved/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Forum Issues</title>
		<link>http://girlswhogeek.com/updates/2013/forum-issues</link>
		<comments>http://girlswhogeek.com/updates/2013/forum-issues#respond</comments>
		<pubDate>Mon, 18 Mar 2013 08:00:38 +0000</pubDate>
		<dc:creator><![CDATA[Jem]]></dc:creator>
				<category><![CDATA[Updates]]></category>

		<guid isPermaLink="false">http://girlswhogeek.com/?p=13063</guid>
		<description><![CDATA[<p>Just a quick note to say that we&#8217;re aware of some issues with the forums and are working to remedy them as soon as possible.</p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/updates/2013/forum-issues">Forum Issues</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Just a quick note to say that we&#8217;re aware of some issues with the forums and are working to remedy them as soon as possible.</p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/updates/2013/forum-issues">Forum Issues</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://girlswhogeek.com/updates/2013/forum-issues/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating a Custom WordPress Shortcode</title>
		<link>http://girlswhogeek.com/tutorials/2011/creating-custom-wordpress-shortcode</link>
		<comments>http://girlswhogeek.com/tutorials/2011/creating-custom-wordpress-shortcode#comments</comments>
		<pubDate>Wed, 23 Mar 2011 20:46:18 +0000</pubDate>
		<dc:creator><![CDATA[Jem]]></dc:creator>
				<category><![CDATA[3rd Party Scripts]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[shortcode]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://girlswhogeek.com/?p=154</guid>
		<description><![CDATA[<p>Creating your own WordPress shortcodes is a nifty way to build dynamic elements into your website without relying on 3rd party developers or plugins. This tutorial offers a beginner&#8217;s guide to creating your first WordPress plugin which will be referenced by a custom shortcode. In this example we&#8217;ll be creating a basic random quote generator [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/tutorials/2011/creating-custom-wordpress-shortcode">Creating a Custom WordPress Shortcode</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Creating your own WordPress shortcodes is a nifty way to build dynamic elements into your website without relying on 3rd party developers or plugins. This tutorial offers a beginner&#8217;s guide to creating your first WordPress plugin which will be referenced by a custom shortcode. </p>
<p>In this example we&#8217;ll be creating a basic random quote generator plugin. This can just as easily be achieved through your themes <var>functions.php</var> but I prefer to be able to turn items on and off in WordPress without having to edit blocks of code. </p>
<h4>Creating the WordPress Plugin File</h4>
<p>If you&#8217;re familiar with WordPress plugins and have installed them before, you&#8217;ve probably seen folders chock full of complicated PHP classes. This is not necessary for a working plugin; something as simple as a quote generator only needs 1 file. Create your plugin file (in this example we&#8217;ll call it <var>gwg_quote.php</var>) and enter the following base info:</p>
<pre><code>&lt;?php
/*
	Plugin Name: gwg Random Quote Generator
	Plugin URI: http://girlswhogeek.com/?p=154
	Description: Basic custom WordPress plugin example: random quote generator
	Version: 1.0
	Author: Girls Who Geek
	Author URI: http://girlswhogeek.com
	License: GPL2

	Copyright 2011 GirlsWhoGeek  (email: jem@girlswhogeek.com)

	This program is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License, version 2, as 
	published by the Free Software Foundation.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program; if not, write to the Free Software
	Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/</code></pre>
<p>This is the required plugin info which will be used to populate the WordPress plugins page, and the license information. In this instance we&#8217;re using GPL2 because a) it&#8217;s what WordPress uses and b) I am a big fan of free code :)</p>
<h4>Creating the Plugin Function</h4>
<p>Although WordPress supports classes (and encourages their use to prevent naming clashes) it&#8217;s too big a subject for the scope of this plugin. Creating a basic PHP function is plenty sufficient. If you&#8217;re unfamiliar with the syntax for creating a function with PHP, or have never heard of scope before, I recommend reading <a href="http://jemturner.co.uk/php/beginners-guide-to-php-part-six/">PHP Beginner&#8217;s Guide Part Six</a> on my development blog (off site).</p>
<p>And so we add the barebones of the function underneath the previously entered licencing information:</p>
<pre><code>&lt;?php
/*
	[license info]
*/

function gwg_random_quote_generator() {

}</code></pre>
<p>I&#8217;ve used a descriptive name for the function to make it easier to find/modify later on, and prefixed the function with gwg_ to avoid naming clashes briefly mentioned earlier.</p>
<p>It&#8217;s worth noting at this point that if we wanted to create a WordPress shortcode via which we&#8217;d pass arguments, e.g. [foo id=#], we&#8217;d need to pass an array of attributes to the function. We don&#8217;t need this functionality, and as the shortcode will work without it, I&#8217;ve left it out for simplicity&#8217;s sake. Moving swiftly on&#8230;</p>
<p>Inside our new (currently empty) function we place the code which powers the functionality we wish to achieve when we use our shortcode; our random quote generator (you may recognise the code from an old tutorialtastic tutorial&#8230;)</p>
<pre><code>&lt;?php
/*
	[license info]
*/

function gwg_random_quote_generator() {
	// define our array 
	$quotes = array();
	
	// populate with quotes
	$quotes[] = "A superior man is modest in his speech, but exceeds in his actions.";
	$quotes[] = "Do not impose on others what you yourself do not desire.";
	$quotes[] = "An ounce of practice is worth more than tons of preaching.";
	
	// generate a random number between 0 and the total count of $quotes minus 1
	// we minus 1 from the total quotes because array indices start at 0 rather than 1 by default
	$r = rand(0,count($quotes)-1);
	
	// return the quote in the array with an indices of $r - our random number
	return $quotes[$r];
}</code></pre>
<p>Now that we have the meat of the plugin in place, we can use the WordPress add_shortcode to specify our custom shortcode: <code>add_shortcode( 'randomquotes', 'gwg_random_quote_generator');</code> This enables us to use Do not impose on others what you yourself do not desire. in posts and pages, which WordPress will apply the gwg_random_quote_generator function too.</p>
<p>Altogether now:</p>
<pre><code>&lt;?php
/*
	Plugin Name: gwg Random Quote Generator
	Plugin URI: http://girlswhogeek.com/?p=154
	Description: Basic custom WordPress plugin example: random quote generator
	Version: 1.0
	Author: Girls Who Geek
	Author URI: http://girlswhogeek.com
	License: GPL2

	Copyright 2011 GirlsWhoGeek  (email: jem@girlswhogeek.com)

	This program is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License, version 2, as 
	published by the Free Software Foundation.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program; if not, write to the Free Software
	Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

function gwg_random_quote_generator() {
	// define our array 
	$quotes = array();
	
	// populate with quotes
	$quotes[] = "A superior man is modest in his speech, but exceeds in his actions.";
	$quotes[] = "Do not impose on others what you yourself do not desire.";
	$quotes[] = "An ounce of practice is worth more than tons of preaching.";
	
	// generate a random number between 0 and the total count of $quotes minus 1
	// we minus 1 from the total quotes because array indices start at 0 rather than 1 by default
	$r = rand(0,count($quotes)-1);
	
	// return the quote in the array with an indices of $r - our random number
	return $quotes[$r];
}

add_shortcode( 'randomquotes', 'gwg_random_quote_generator');
?&gt;
</code></pre>
<p>Save to the <var>gwg_quote.php</var> file you created earlier and upload to /wp-content/plugins/. Once the plugin is enabled via your WordPress admin panel, test it out by popping &#091;randomquotes&#093; into a post or page, and Bob&#8217;s your uncle:</p>
<blockquote>Do not impose on others what you yourself do not desire.</blockquote>
<p> One basic WordPress plugin with shortcode.</p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/tutorials/2011/creating-custom-wordpress-shortcode">Creating a Custom WordPress Shortcode</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://girlswhogeek.com/tutorials/2011/creating-custom-wordpress-shortcode/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Build a Blog &#8211; Tips and Tricks</title>
		<link>http://girlswhogeek.com/tutorials/2011/tips-and-tricks</link>
		<pubDate>Wed, 23 Mar 2011 18:58:04 +0000</pubDate>
		<dc:creator><![CDATA[Amelie]]></dc:creator>
				<category><![CDATA[Build A Blog]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://girlswhogeek.com/?p=141</guid>
		<description><![CDATA[<p>A few tips and tricks shared by users on the old CodeGrrl forums over the years, to help you customise your blog. Includes archives by month, emoticons, bbcode, email notification and more.</p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/tutorials/2011/tips-and-tricks">Build a Blog &#8211; Tips and Tricks</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>A few tips and tricks shared by users on the old CodeGrrl forums over the years, to help you customise your blog.</p>
<p>Jump to:</p>
<ul>
<li><a href="#month">Archives by month</a></li>
<li><a href="#spam">Spam protection</a></li>
<li><a href="#redirect">Remove redirection after editing a post</a></li>
<li><a href="#email">Comment notification emails</a></li>
<li><a href="#excerpt">Show an excerpt of a post with read more link</a></li>
<li><a href="#emoticons">Emoticons and BBCode</a></li>
<li><a href="#rss">RSS Feed</a></li>
</ul>
<p><strong>Please note: The Build-A-Blog series is an introduction to creating a simple blog script using PHP. These tutorials are meant to help you to learn PHP and MySQL and to use these to fetch and store data and display it on a web page. These tutorials should not be used ‘as is’ on a production website – especially if you are new to PHP and do not understand what you are doing. We would recommend that you try the B-A-B series on a safe, development environment – such as an offline installation of PHP and MySQL – so you can learn how everything works.</strong></p>
<p><strong>GWG and its staffers accept no responsibility for anything that may (or may not) happen to your site or server as a result of you using these tutorials – you do so AT YOUR OWN RISK.</strong></p>
<h2 id="month">Archive by month</h2>
<p>Change this part in your archive list page:</p>
<pre>$result = mysql_query("SELECT FROM_UNIXTIME(timestamp, '%Y') AS get_year, COUNT(*) AS entries FROM php_blog GROUP BY get_year");</pre>
<p>To this:</p>
<pre>$result = mysql_query("SELECT FROM_UNIXTIME(timestamp, '%M %Y') AS get_month, COUNT(*) AS entries FROM php_blog GROUP BY get_month ORDER BY timestamp ASC"); </pre>
<p>(Note: If you want your most recent entries first, change ASC to DESC in the query above)</p>
<p>Next, change this:</p>
<pre>while ($row = mysql_fetch_array($result)) {
    $get_year = $row['get_year'];
    $entries = $row['entries'];

    echo "&lt;a href=\"archives.php?year=" . $get_year . "\"&gt;Entries from " . $get_year . "&lt;/a&gt; (" . $entries . ")&lt;br /&gt;";
}</pre>
<p>To this:</p>
<pre>while ($row = mysql_fetch_array($result)) {
	$get_month = $row['get_month'];
	$entries = $row['entries'];
	echo "&lt;a href=\"archives.php?month=" . $get_month . "\"&gt;Entries from " . $get_month . "&lt;/a&gt; (" . $entries . ")&lt;br /&gt;";
}</pre>
<p>Then, in your archive display page, change this:</p>
<pre>$result = mysql_query("SELECT timestamp, id, title FROM php_blog WHERE FROM_UNIXTIME(timestamp, '%Y') = '$year' ORDER BY id DESC");</pre>
<p>To this:</p>
<pre>$result = mysql_query("SELECT timestamp, id, title FROM php_blog WHERE FROM_UNIXTIME(`timestamp`, '%M %Y') = '" . mysql_real_escape_string($month) . "' ORDER BY id DESC")</pre>
<p>And this:</p>
<pre>if (!isset($_GET['year'])) {
    die("Invalid year specified.");
}
else {
    $year = (int)$_GET['year'];
}</pre>
<p>To this:</p>
<pre>if (!isset($_GET['month'])) {
    die("Invalid month specified.");
}
else {
    $month = htmlentities(strip_tags($_GET['month']));
}</pre>
<p>Remember to change any other parts that say $year in your page to $month too.</p>
<h2 id="spam">Spam protection</h2>
<p><strong>Tip 1: Based on Jem&#8217;s original BellaBook spam protection.</strong></p>
<p>In your individual entries page, put this just after the comment box, but before the submit button:</p>
<pre>&lt;script type="text/javascript"&gt;
&lt;!--
document.write('&lt;input type="hidden" name="spamtest" id="spamtest" value="SPAMWORD" /&gt;');
//--&gt;
&lt;/script&gt;</pre>
<p>Change SPAMWORD to something random, no one will have to remember this so make it as complicated as you like.</p>
<p>Then, in process.php, find this part (should be right at the top):</p>
<pre>&lt;?php
if (isset($_POST['submit_comment'])) {</pre>
<p>Add this underneath:</p>
<pre>if (!isset($_POST['spamtest']) || $_POST['spamtest'] != "SPAMWORD") {
   exit("&lt;p&gt;JavaScript must be enabled to comment here due to spam restrictions in place.&lt;/p&gt;");
}</pre>
<p>Again, replace SPAMWORD with the word you used earlier.</p>
<p><strong>Tip 2: Simple maths problem</strong></p>
<p>Add a new field to your comments form with a sum of your choice, e.g. 1+2.</p>
<pre>1+2 = &lt;input type="text" size="5" name="sumtest" id="sumtest" /&gt;</pre>
<p>Then, in process.php, add this in the same place as for tip 1 (under the first two lines):</p>
<pre>if (!isset($_POST['sumtest']) || $_POST['sumtest'] != 3) {
    exit('&lt;p&gt;Sorry, the answer to the maths problem was not correct.&lt;/p&gt;');
}</pre>
<p>You can change the sum whenever you want, just remember to change the answer (in this case 3) in process.php.</p>
<p>Note that these are extremely simple spam prevention measures and spammers may learn to get around them eventually. You can use both tips together &#8211; it doesn&#8217;t matter which bit comes first in process.php as long as they are both there.</p>
<h2 id="redirect">Remove redirection after updating a post</h2>
<p>If you would like to go back to the edit page after saving an entry, instead of to the entry itself, try the following:</p>
<p>Find this line:</p>
<pre>header("Location: journal.php?id=" . $id);</pre>
<p>Change it to:</p>
<pre>header("Location: update.php?id=" . $id);</pre>
<p>Where update.php is the name of your update page. Note: the page will appear to have just refreshed when you save your entry, but it will have been saved (check the contents of your entry to make sure!).</p>
<h2 id="email">Comment notification emails</h2>
<p>Find this line in process.php:</p>
<pre>$result = mysql_query("INSERT INTO php_blog_comments (entry, timestamp, name, email, url, comment) VALUES ('$entry','$timestamp','$name','$email','$url','$comment')");</pre>
<p>Add this underneath:</p>
<pre>    $youraddress = "YOU@YOURSITE.COM";
    $emailsubject = "New comment on entry #" . $entry;
    $bodyemail = "A new comment was posted on entry #" . $entry . " of your blog. The comment was made by " . $name . " (" . $email . "; " . $url. ") on " . date('d.m.y \a\\t H:i',$timestamp) . " and their message was &quot;" . $comment . "&quot;.";
    $extra = "From: YOUR SITE NAME &lt;" . $youraddress . "&gt;\r\n" . "X-Mailer: PHP/" . phpversion();
    mail($youraddress, $emailsubject, $bodyemail, $extra);</pre>
<p>Change items in uppercase, such as the email address and YOUR SITE NAME. If you would like to change the date/time format, change this part:</p>
<pre>date('d.m.y \a\\t H:i',$timestamp)</pre>
<p>Change the letters in the first part (i.e. d.m.y \a\\t H:i &#8211; leave the rest as it is or it won&#8217;t work) using the guide on <a href="http://php.net/date" title="PHP Date reference">php.net</a>.</p>
<h2 id="excerpt">Show an excerpt of a post with read more link</h2>
<p>Open up the main page of your blog, find the following code:</p>
<pre>    $title = stripslashes($row['title']);
    $entry = stripslashes($row['entry']);
    $password = $row['password'];
    $id = $row['id'];</pre>
<p>And beneath that paste this code:</p>
<pre>if (strlen($entry) &gt; 90) {
    $entry = substr($entry, 0, 90);
    $entry = "$entry... &lt;br /&gt;&lt;br /&gt;&lt;a href=\"journal.php?id=" . $id . "\"&gt;read more&lt;/a&gt;";
}</pre>
<p>This is set to show an excerpt of 90 characters of the post. If you would like to show more (or less), just change 90 to another number.</p>
<h2 id="emoticons">Emoticons and BBCode</h2>
<p>Note: this is for comments only.</p>
<p>Find this part in journal.php:</p>
<pre>$sql = "SELECT * FROM php_blog_comments WHERE entry='$id' ORDER BY timestamp";
$result = mysql_query ($sql) or print ("Can't select comments from table php_blog_comments.&lt;br /&gt;" . $sql . "&lt;br /&gt;" . mysql_error());
while($row = mysql_fetch_array($result)) {
    $timestamp = date("l F d Y", $row['timestamp']);
</pre>
<p>Add this below:</p>
<pre>$bbcode = array('[b]', '[i]', '[u]', '[/b]', '[/i]', '[/u]');
$bbcode_replace = array('&lt;b&gt;', '&lt;i&gt;', '&lt;u&gt;', '&lt;/b&gt;', '&lt;/i&gt;', '&lt;/u&gt;');

$emoticons = array(":)", ":(", ":'(", ";)", ":P", ":o", ":D");
$emoticons_replace = array(
    '&lt;img src="smile.gif" alt=":)" /&gt;',
    '&lt;img src="sad.gif" alt=":(" /&gt;',
    '&lt;img src="cry.gif" alt=":\'(" /&gt;',
    '&lt;img src="wink.gif" alt=";)" /&gt;',
    '&lt;img src="tongue.gif" alt=":P" /&gt;',
    '&lt;img src="shocked.gif" alt=":o" /&gt;',
    '&lt;img src="happy.gif" alt=":D" /&gt;'
);
$formatted_comment = str_replace($bbcode, $bbcode_replace, stripslashes($row['comment']));
$formatted_comment = str_replace($emoticons, $emoticons_replace, $formatted_comment);</pre>
<p>Replace the parts in the <code>&lt;img src=""&gt;</code> parts with the correct URLs to your images (note you will need to have images already, we can&#8217;t provide these for you!). Feel free to add more emoticons, just add more options to the $emoticons part (before the &#8216;);&#8217; &#8211; make sure to separate each one by commas and and enclose them in quotes). Add its corresponding image in a new line to the $emoticons_replace part, before the &#8216;);&#8217; at the bottom. Each line should have a comma at the end EXCEPT the last line, and each line should be surrounded by quotes (I have used single quotes so as not to interfere with the double quotes used in the HTML). Same goes for the BBCode &#8211; feel free to add more items you want to allow, such as [code] or &#91;quote]. Remember to add the closing tags as well, or your comments page will look very messy!</p>
<p>Note: it is very important that you specify the images and replacement HTML code in the same order that you specified the image and bbcode codes, otherwise you will get the wrong image/HTML replacement in your comments!</p>
<p>When you have done that, find this part in journal.php:</p>
<pre>print("&lt;p&gt;" . stripslashes($row['comment']) . "&lt;/p&gt;");</pre>
<p>Change it to:</p>
<pre>print("&lt;p&gt;" . $formatted_comment . "&lt;/p&gt;");</pre>
<h2 id="rss">RSS Feed</h2>
<p><a href="http://girlswhogeek.com/forums/topic/creating-an-rss-feed-for-build-a-blog-entries">See this forum post for details on how to create a feed for your blog</a>.</p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/tutorials/2011/tips-and-tricks">Build a Blog &#8211; Tips and Tricks</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></content:encoded>
			</item>
		<item>
		<title>Code Converter</title>
		<link>http://girlswhogeek.com/tools/2010/code-converter</link>
		<pubDate>Sat, 17 Jul 2010 08:40:31 +0000</pubDate>
		<dc:creator><![CDATA[Jem]]></dc:creator>
				<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://girlswhogeek.com/?p=87</guid>
		<description><![CDATA[<p>Enter your code below to convert it to &#8216;friendly&#8217; HTML entities, ready to display on web pages. Example: from &#60;head&#62; to &#38;lt;head&#38;gt;.</p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/tools/2010/code-converter">Code Converter</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Enter your code below to convert it to &#8216;friendly&#8217; HTML entities, ready to display on web pages. Example: from &lt;head&gt; to &amp;lt;head&amp;gt;.</p>
<form action="http://girlswhogeek.com/tools/2010/code-converter#codeconverter" method="post" id="codeconverter">
<p><textarea id="code" name="code" style="width: 80%;"></textarea></p>
<p><input type="submit" id="submit" name="submit" value="Convert" /></p>
</form>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/tools/2010/code-converter">Code Converter</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></content:encoded>
			</item>
		<item>
		<title>Writing Useful Error Pages</title>
		<link>http://girlswhogeek.com/articles/2010/writing-useful-error-pages</link>
		<comments>http://girlswhogeek.com/articles/2010/writing-useful-error-pages#respond</comments>
		<pubDate>Sat, 29 May 2010 12:14:21 +0000</pubDate>
		<dc:creator><![CDATA[Jem]]></dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[error-pages]]></category>
		<category><![CDATA[http]]></category>

		<guid isPermaLink="false">http://girlswhogeek.com/?p=51</guid>
		<description><![CDATA[<p>You and I know what 404 means &#8212; page not found &#8212; but to your average Internet user it could be the number for your favourite dish on the local Chinese takeaway menu. 404, and its friends 403 and 500 are the three most common error pages that you&#8217;re likely to come across while browsing. [&#8230;]</p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/articles/2010/writing-useful-error-pages">Writing Useful Error Pages</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>You and I know what 404 means &#8212; page not found &#8212; but to your average Internet user it could be the number for your favourite dish on the local Chinese takeaway menu. 404, and its friends 403 and 500 are the three most common error pages that you&#8217;re likely to come across while browsing. Despite your best efforts, perhaps, this is likely to occur on your website and more often than you think. So why risk confusing your visitor? Let&#8217;s make those error pages more useful&#8230;</p>
<ul>
<li><strong>Ditch unnecessary page elements</strong><br />Error pages shouldn&#8217;t have your full layout/navigation system on them. It simply adds clutter and confusion. Make sure, though, that you link to your home page so that users can start again if necessary.</li>
<li><strong>Make it clear in plain English what&#8217;s wrong</strong><br />You can keep the number 404/403/500 in there somewhere for uber geek friends, but &#8220;page not found&#8221;/&#8221;server currently unavailable&#8221; (or something similar) needs to be big, bold and obvious.</li>
<li><strong>Accept responsibility and try to fix it</strong><br />There&#8217;s nothing more annoying than coming across an error page when you&#8217;re looking for something important. Don&#8217;t make out that it&#8217;s the fault of the visitor (even if sometimes it is) simply accept that the problem is yours and offer ways out: a site map, a search box, a list of recent/most popular articles and if all else fails, a quick way to get in touch so that if they&#8217;re really lost you can show them the way.</li>
<li><strong>Don&#8217;t rely on the visitor to notify you</strong><br />Keep on track of your error pages so that you can pre-empt complaints and fix problems as they happen by regularly checking your logs or setting up error pages to auto-notify you when they&#8217;re loaded (include the referrer in case it&#8217;s a broken link on your site causing problems). Your visitors are not responsible for your site maintenance.</li>
</ul>
<p>If you have the time and inclination, you might also like to pop a little image or joke on your error page just to lighten the mood. However you decide to play it, just <strong>don&#8217;t rely on the default error pages</strong>: they&#8217;re confusing, boring and not in the slightest bit helpful!</p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/articles/2010/writing-useful-error-pages">Writing Useful Error Pages</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://girlswhogeek.com/articles/2010/writing-useful-error-pages/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Where can I find [..] script?</title>
		<link>http://girlswhogeek.com/faqs/2010/where-can-i-find-script</link>
		<pubDate>Thu, 07 Jan 2010 11:47:04 +0000</pubDate>
		<dc:creator><![CDATA[Jem]]></dc:creator>
				<category><![CDATA[FAQs]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[scripts]]></category>

		<guid isPermaLink="false">http://girlswhogeek.com/?p=49</guid>
		<description><![CDATA[<p>If you&#8217;re looking for a particular script for your website, checkout our Which script? forum for recommendations.</p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/faqs/2010/where-can-i-find-script">Where can I find [..] script?</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>If you&#8217;re looking for a particular script for your website, checkout our <a href="http://girlswhogeek.com/forums/forum/which-script">Which script? forum</a> for recommendations.</p>
<p>The post <a rel="nofollow" href="http://girlswhogeek.com/faqs/2010/where-can-i-find-script">Where can I find [..] script?</a> appeared first on <a rel="nofollow" href="http://girlswhogeek.com">girlswhogeek.com</a>.</p>
]]></content:encoded>
			</item>
	</channel>
</rss>
