<?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"
	>

<channel>
	<title>Xavisys</title>
	<atom:link href="http://xavisys.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://xavisys.com</link>
	<description>Control Your Internet</description>
	<pubDate>Fri, 09 May 2008 00:07:38 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>How to Profit with the Open Source Community</title>
		<link>http://xavisys.com/how-to-profit-with-the-open-source-community/</link>
		<comments>http://xavisys.com/how-to-profit-with-the-open-source-community/#comments</comments>
		<pubDate>Mon, 05 May 2008 19:03:56 +0000</pubDate>
		<dc:creator>Aaron D. Campbell</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[business]]></category>

		<category><![CDATA[mysql]]></category>

		<category><![CDATA[opensource]]></category>

		<category><![CDATA[Wordpress]]></category>

		<category><![CDATA[zend]]></category>

		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://xavisys.com/?p=95</guid>
		<description><![CDATA[I love open source software.  I love the idea of open source software.  Involving people in the development process that would not otherwise get the chance.  Tapping into talent that would not normally be available to you.  Best of all, giving everyone the opportunity to benefit others as they benefit themselves. [...]]]></description>
			<content:encoded><![CDATA[<p>I love open source software.  I love the idea of open source software.  Involving people in the development process that would not otherwise get the chance.  Tapping into talent that would not normally be available to you.  Best of all, giving everyone the opportunity to benefit others as they benefit themselves.  I&#8217;m always interested in how I can benefit the communities that I&#8217;m a part of.</p>
<p>The question that I&#8217;m asked most often when I talk to people about open source software is &#8220;Who pays for all this?&#8221; as well as variants like &#8220;Then how do they make money?&#8221; or &#8220;Won&#8217;t people eventually stop working for free?&#8221;  We live in a capitalistic society, and people don&#8217;t understand why someone would work for free when they could be making money.  In this article, I&#8217;m not going to cling to ideals on why doing something for the community shows more worth than your bank account balance, instead I&#8217;m going to explain how open source developers (myself included) do in fact make money by developing quality software for free.  Hopefully in the process you will find a way to give back to the community and get your piece of the pie.<br />
<span id="more-95"></span></p>
<h2>How can I make money from Open Source Software?</h2>
<p>There&#8217;s more than one approach to making money from free software.  Companies like <a href="http://trolltech.com/" onclick="pageTracker._trackPageview('/outgoing/trolltech.com/?referer=');">Trolltech</a> and <a href="http://www.mysql.com/" onclick="pageTracker._trackPageview('/outgoing/www.mysql.com/?referer=');">MySQL AB</a> use a dual-license approach, where they retain ownership of their code and offer it with an open source GPL license and a more traditional license.  Why would someone pay for a product they can get for free?  The top reason is usually support.  Companies, especially the big ones, want to use software that has a company standing behind it.  A company they can go to with questions and even hold responsible if something breaks.  The second reason, one that is more specific to these companies that use the dual-license approach, is actually the license itself.  If a company wants to include the MySQL database into a traditional closed-source project, one they hope to sell, they can&#8217;t legally do that with the GPL&#8217;d version.  Instead they must purchase the alternative license.  These &#8220;second generation&#8221; open source companies are bridging the gap between open and closed source.  It&#8217;s a fine line to walk, and I&#8217;m not saying that either company i mentioned is a shining example of what this kind of company could be, but there is no ignoring the fact that these companies profit from open source software which also benefits the community.</p>
<p>Another way to make some profit from open source can clearly be seen in companies like <a href="http://www.zend.com/" onclick="pageTracker._trackPageview('/outgoing/www.zend.com/?referer=');">Zend Technologies</a>.  The company was founded by Zeev Suraski and Andi Gutmans, who are very well known for their contributions to the PHP programming language.  Zend Technologies develops products relating to the development, deployment and management of business critical PHP based web applications.  They have proprietary tools that they sell, such as Zend Platform, Zend Guard, and the amazing Zend Studio.  So how do they contribute to open source, and how does it benefit them?  Well, their company is built around PHP, an open source language.  It&#8217;s in their best interest to make sure PHP is the best it can be, and as such they contribute huge amounts of code to the PHP project, in turn helping the PHP community, even those that don&#8217;t use their products.  They also release things like the Zend Framework, a high quality open source PHP framework, which can drastically reduce project development time, increase portability of code, and ease the process of creating an MVC application in PHP.  Again, this helps to increase the number of programmers that use PHP, which increases their customer base.  No licensing strings attached, just a mutually beneficial relationship.</p>
<p>Then there are companies like <a href="http://automattic.com/" onclick="pageTracker._trackPageview('/outgoing/automattic.com/?referer=');">Automattic</a>.  Automattic is built around WordPress, an open source project that I happen to be quite interested in, since a decent portion of Xavisys&#8217;s work is done on WordPress.  They run WordPress.com, but have diversified their income, making money from <a rel="nofollow" href="http://wordpress.com/products/" onclick="pageTracker._trackPageview('/outgoing/wordpress.com/products/?referer=');">upgrades</a>, <a rel="nofollow" href="http://wordpress.com/vip-hosting/" onclick="pageTracker._trackPageview('/outgoing/wordpress.com/vip-hosting/?referer=');">VIP hosting</a>, <a rel="nofollow" href="http://wordpress.com/blog/2006/09/06/on-ads/" onclick="pageTracker._trackPageview('/outgoing/wordpress.com/blog/2006/09/06/on-ads/?referer=');">ads</a>, <a rel="nofollow" href="http://akismet.com/commercial/" onclick="pageTracker._trackPageview('/outgoing/akismet.com/commercial/?referer=');">Akismet licensing</a>, and <a rel="nofollow" href="http://automattic.com/services/" onclick="pageTracker._trackPageview('/outgoing/automattic.com/services/?referer=');">enterprise services</a>.  WordPress.com uses the WordPress software, so when Automattic&#8217;s developers commit code to WordPress, it helps their company, but also benefits the rest of us that use WordPress.  So why don&#8217;t they stop doing this, and keep the code to themselves?  Well, because while they help me, I also help them.  When I see a problem with WordPress, I submit a patch to fix it.  When I see a feature that I would like, I submit the code to add it.  In the end, they make my software better, and I make their software better.  It&#8217;s mutually beneficial.  I think a lot of other industries, and even other sections of this industry, should learn to embrace of this kind of symbiotic relationship.</p>
<p>So you see that large companies can turn open source into monetary gain, but what about you?  What about the smaller developer?   I&#8217;d like to respectfully submit my last case study, Xavisys.  A company that I happen to know quite well.  I don&#8217;t help the community for monetary gain, I do it because I think that community is extremely important to the well being of the human race.  I think that people who are involved in their community make the world a better place to be, and I want to be one of those people.  However, even though it&#8217;s not the reason I contribute to the community, I do reap the benefits.  One of the difficulties of being a development company is that there is so much competition, it can be hard to be noticed.  You might be twice as good as the next guy, but if no one knows about your company and the services it offers, you&#8217;re out of luck.  Not too long ago, I started releasing <a href="http://xavisys.com/tag/wordpress+plugin/">all my WordPress plugins</a> into the <a href="http://wordpress.org/extend/plugins/profile/aaroncampbell" onclick="pageTracker._trackPageview('/outgoing/wordpress.org/extend/plugins/profile/aaroncampbell?referer=');">WordPress.org repository</a>.  I gave a bunch of code away for free.  The most popular one (WP Google Analytics) has only been up for 19 days, and has been downloaded 2,635 times.  It feels good that so many people are benefiting from something I wrote, but how am I benefiting?  Well, since I started releasing my plugins, traffic to my site has tripled.  I don&#8217;t run any ads, so I&#8217;m not making anything off the traffic itself, but I&#8217;m getting more paid jobs from people who are already confident in my abilities because they use some of my plugins.  These people are easier to sell my services to, because they are already convinced that I&#8217;m up to the task.</p>
<p>What does this mean?  Look for something mutually beneficial.  A way that you can help others and in turn they help you.  No exploitation, a symbiotic give and take.  Now that you know it&#8217;s possible, wouldn&#8217;t you rather make money that way?</p>
]]></content:encoded>
			<wfw:commentRss>http://xavisys.com/how-to-profit-with-the-open-source-community/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Marketing Strategy You Can Believe In</title>
		<link>http://xavisys.com/a-marketing-strategy-you-can-believe-in/</link>
		<comments>http://xavisys.com/a-marketing-strategy-you-can-believe-in/#comments</comments>
		<pubDate>Wed, 30 Apr 2008 06:30:17 +0000</pubDate>
		<dc:creator>Aaron D. Campbell</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[business]]></category>

		<category><![CDATA[marketing]]></category>

		<category><![CDATA[xavisys]]></category>

		<guid isPermaLink="false">http://xavisys.com/?p=93</guid>
		<description><![CDATA[Do you remember in the good old days, when you went to the market down the street because you knew the owner, John, and his kids went to school with yours?  When you went to the mechanic across town, because you new that Dave wouldn&#8217;t ever charge you for something you didn&#8217;t need?  [...]]]></description>
			<content:encoded><![CDATA[<p>Do you remember in the good old days, when you went to the market down the street because you knew the owner, John, and his kids went to school with yours?  When you went to the mechanic across town, because you new that Dave wouldn&#8217;t ever charge you for something you didn&#8217;t need?  I don&#8217;t, I&#8217;m only 26 after all, but I wish I did.  I&#8217;m tired of choosing a company based on impersonal tv commercials, that the owner of the company may or may not have even seen.  I don&#8217;t want the cheapest, I want the best value, and I don&#8217;t necessarily want whatever the latest celebrity wants.</p>
<p>Building a company is hard work, but I&#8217;ve decided to draw a line in the sand.  Xavisys is going to be a great company because I stand behind it, and I&#8217;m an upstanding, honest person that you can get to know.<br />
<span id="more-93"></span><br />
The term &#8220;Marketing strategy&#8221; sounds like a group of people in a back room, devising ways to fool you, the consumer, into buying whatever they offer.  It gives the impression that trickery or underhanded tactics are being used.  I want to blow that out of the water.  There are plenty of great businesses out there that have great people standing behind them.  <a href="http://rackspace.com/" onclick="pageTracker._trackPageview('/outgoing/rackspace.com/?referer=');">Rackspace</a> gives me an account representative that actually answers the phone when I call, and works to get any issue (even the minor ones) resolved as quickly as possible.  Not exactly status quo with hosting companies, but it should be.  My good friend James Pearson has a socially proactive business called <a href="http://acholibeads.com" onclick="pageTracker._trackPageview('/outgoing/acholibeads.com?referer=');">Acholi Beads</a>, and I would be able to guarantee it was great even if I knew nothing about it except that he stands behind it.  That&#8217;s the kind of business I like to deal with, and that&#8217;s the kind of business Xavisys is, and will continue to be.</p>
<p>There are other places out there where you can take your web development work.  There are other places that have a thorough knowledge of WordPress customization and plugin development.  There are even other people out there with years of real world experience.  While I have all that, and am confident that Xavisys can stand on technical merit alone, that&#8217;s not why you should use Xavisys.  You should use it because I&#8217;m active in my community (online and off), and have people who will speak to my character.  You should use it because it&#8217;s a family owned and operated company, and my wife Christen and I personally guarantee you will never be charged more hours than were really worked, and that corners won&#8217;t be cut that will cost you in the long run.  You should use it because you know that it&#8217;s named after my son Xavier, and I want it to be an example of how he should live, not how much he should make.</p>
<p>That&#8217;s my commitment, not at the expense of quality work, but in addition to it.  It&#8217;s a high standard, and if you ever think I&#8217;m not living up to it, <a href="/contact-us/">let me know</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://xavisys.com/a-marketing-strategy-you-can-believe-in/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Creative Brainstorming Meeting</title>
		<link>http://xavisys.com/creative-brainstorming-meeting/</link>
		<comments>http://xavisys.com/creative-brainstorming-meeting/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 00:17:06 +0000</pubDate>
		<dc:creator>Aaron D. Campbell</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[creative]]></category>

		<category><![CDATA[xavisys]]></category>

		<guid isPermaLink="false">http://xavisys.com/?p=88</guid>
		<description><![CDATA[Over the weekend I had James Pearson (of Surviving America and Acholi Beads) and Steven Homestead staying at my house.  I couldn&#8217;t help but take advantage of this abundance of creativity I suddenly found at my disposal.  As a developer rather than a designer, I find the creative process to be mysterious, possibly [...]]]></description>
			<content:encoded><![CDATA[<p>Over the weekend I had James Pearson (of <a href="http://jamestravels.com/" onclick="pageTracker._trackPageview('/outgoing/jamestravels.com/?referer=');">Surviving America</a> and <a href="http://acholibeads.com" onclick="pageTracker._trackPageview('/outgoing/acholibeads.com?referer=');">Acholi Beads</a>) and <a href="http://profile.myspace.com/index.cfm?fuseaction=user.viewprofile&#038;friendid=72285522" onclick="pageTracker._trackPageview('/outgoing/profile.myspace.com/index.cfm?fuseaction=user.viewprofile_038_friendid=72285522&referer=');">Steven Homestead</a> staying at my house.  I couldn&#8217;t help but take advantage of this abundance of creativity I suddenly found at my disposal.  As a developer rather than a designer, I find the creative process to be mysterious, possibly even magical.  Seeing phrases like &#8220;Enslave the Internet&#8221; written on the windows of my home, I was far from disappointed as I was treated to a rare opportunity to take a peek inside the creative mind.<br />
<span id="more-88"></span><br />
People constantly tell me that as a programmer, I have to be creative to find solutions to more complex problems.  However, it seems to be a different kind of creativity, because what I experienced this weekend was as foreign to me as nearly anything I&#8217;ve experienced.</p>
<p><a href='http://xavisys.com/wp-content/uploads/2008/04/brainstorming_meeting_windows_readable.jpg'><img src="http://xavisys.com/wp-content/uploads/2008/04/brainstorming_meeting_windows_readable-150x100.jpg" alt="brainstorming meeting windows" title="Windows from the brainstorming meeting" width="150" height="100" class="alignright size-thumbnail wp-image-92" /></a><a href='http://xavisys.com/wp-content/uploads/2008/04/brainstorming_meeting_windows.jpg'><img src="http://xavisys.com/wp-content/uploads/2008/04/brainstorming_meeting_windows-150x100.jpg" alt="brainstorming meeting windows" title="Windows from the brainstorming meeting" width="150" height="100" class="alignright size-thumbnail wp-image-91" /></a>I asked James if he might help me with work out a marketing strategy for Xavisys, and the first thing he asked for was a white board (preferably a few).  I may not be creative, but I know the advantages of having space to scribble as you work out problems.  Along the way however, I&#8217;ve gotten rid of the white board, in favor of my glass desk.  I keep a collection of dry erase markers and Vis-A-Vis markers at my desk, and whenever I need to write something down, I grab one and write it right on my desk.  Dry erase markers are for very short-term things, since moving things around on the desk can often erase what you&#8217;ve written.  The Vis-A-Vis markers on the other hand stay just fine, until they get wet, which is perfect, because they can be cleaned off with a damp paper towel.  Since it&#8217;s not very cool to cram a bunch of people around my desk in my office, I got out the markers, and we started marking up some windows in my house.</p>
<p>We started by talking about what Xavisys does, the mundane list of services rendered.  Soon we were talking about what made Xavisys stand apart from other companies.  Then, as we wrapped up the boring summation, things really stared to happen.  James and Steve started spouting ideas at break neck speed.  Nothing was thrown out or ignored, only built upon.  I enjoy improv comedy and used to be part of a group that performed and I&#8217;ve even taught improv techniques.  We had an exercise called &#8220;yes and&#8221; which taught players how to take ideas and run with them, rather than ignore them.  Basically, you could not say no, or turn down any idea offered, instead you answered &#8220;yes and ____,&#8221; adding your own twist to the scene in progress.  This was that game.</p>
<p>This method produces plenty of bad ideas.  Among the tag lines that were later thrown out were phrases like &#8220;Enslave the Internet&#8221;, &#8220;Funk Shun&#8221; and &#8220;Make the internet your pool boy!&#8221;  What amazed me, was that after a relatively short time, small nuggets of gold began to emerge from the dross, phrases like &#8220;Interface with the world&#8221; and &#8220;Take control of the internet.&#8221;  All leading to the one diamond in the rough, &#8220;Control Your Internet.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://xavisys.com/creative-brainstorming-meeting/feed/</wfw:commentRss>
		</item>
		<item>
		<title>WordPress 2.5 Shortcodes</title>
		<link>http://xavisys.com/wordpress-25-shortcodes/</link>
		<comments>http://xavisys.com/wordpress-25-shortcodes/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 18:57:52 +0000</pubDate>
		<dc:creator>Aaron D. Campbell</dc:creator>
		
		<category><![CDATA[Wordpress]]></category>

		<category><![CDATA[jquery]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[shortcodes]]></category>

		<guid isPermaLink="false">http://xavisys.com/?p=84</guid>
		<description><![CDATA[Warning: Shortcodes are affected by Trac ticket 6444, which was fixed in WordPress 2.5.1.
First I touched on the topic in my first impressions of WordPress 2.5.  Then I whined a little about the tickets relating to them, and eventually I released my Google Maps Plugin that uses them.  In the end, WordPress&#8217;s new [...]]]></description>
			<content:encoded><![CDATA[<p style="font-weight: bold; text-align: center;" class="message">Warning: Shortcodes are affected by <a href="http://trac.wordpress.org/ticket/6444" onclick="pageTracker._trackPageview('/outgoing/trac.wordpress.org/ticket/6444?referer=');">Trac ticket 6444</a>, which was fixed in WordPress 2.5.1.</p>
<p>First I touched on the topic in my <a href="http://xavisys.com/wordpress-25-first-impressions/">first impressions of WordPress 2.5</a>.  Then I <a href="http://twitter.com/aaroncampbell/statuses/785219794" onclick="pageTracker._trackPageview('/outgoing/twitter.com/aaroncampbell/statuses/785219794?referer=');">whined a little about the tickets</a> relating to them, and eventually I released my <a href="http://xavisys.com/google-maps-for-wordpress/">Google Maps Plugin</a> that uses them.  In the end, <a href="http://codex.wordpress.org/Shortcode_API" onclick="pageTracker._trackPageview('/outgoing/codex.wordpress.org/Shortcode_API?referer=');">WordPress&#8217;s new shortcodes</a> are really nice.</p>
<h2>What are they?</h2>
<p>First of all, a shortcode called &#8220;mycode&#8221; can look like any of these:<br />
<pre class="html4strict">[mycode]
[mycode foo=&quot;bar&quot; id=&quot;123&quot; color=&quot;red&quot; something=&quot;data&quot;]
[mycode]Some Content[/mycode]
[mycode]<span style="color: #009900;"><a href="http://december.com/html/4/element/p.html" onclick="pageTracker._trackPageview('/outgoing/december.com/html/4/element/p.html?referer=');"><span style="color: #000000; font-weight: bold;">&lt;p&gt;</span></a></span><span style="color: #009900;"><a href="http://december.com/html/4/element/a.html" onclick="pageTracker._trackPageview('/outgoing/december.com/html/4/element/a.html?referer=');"><span style="color: #000000; font-weight: bold;">&lt;a</span></a> <span style="color: #000066;">href</span>=<span style="color: #ff0000;">&quot;http://example.com/&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>HTML Content<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/a&gt;</span></span><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/p&gt;</span></span>[/mycode]
[mycode]Content [another-shotcode] more content[/mycode]
[mycode foo=&quot;bar&quot; id=&quot;123&quot;]Some Content[/mycode]
&nbsp;</pre><br />
As you can see, shortcodes allow a user to put a code into a post or page, and a plugin can then easily handle those codes.  They can be nested, contain content (including HTML), attributes, etc.  Sounds great, but how can you leverage shortcodes for your benefit?</p>
<h2>How can I use them?</h2>
<p>You want to leverage the new, powerful shortcode system in WordPress 2.5, but where do you start?<br />
<span id="more-84"></span><br />
First of all, you need to add your shortcode:<br />
<pre class="php">add_shortcode<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'mycode'</span>, <span style="color: #ff0000;">'yourFunction'</span><span style="color: #66cc66;">&#41;</span>;</pre><br />
Your function should take two arguments and return the content that you want to replace the shortcode with.  The first argument will be an associative array of attributes (keys will be the attribute names, and the value will be the corresponding attribute value), and the second will be the content between the tags.</p>
<p>To handle default attributes, you can use shortcode_atts($defaultsArray, $attributesArray):<br />
<pre class="php">&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> yourFunction <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$attr</span>, <span style="color: #0000ff;">$content</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #0000ff;">$attr</span> = shortcode_atts<span style="color: #66cc66;">&#40;</span><a href="http://www.php.net/array" onclick="pageTracker._trackPageview('/outgoing/www.php.net/array?referer=');"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'foo'</span>   =&gt; <span style="color: #ff0000;">'bar'</span>,
                                 <span style="color: #ff0000;">'id'</span>    =&gt; <span style="color: #ff0000;">''</span>,
                                 <span style="color: #ff0000;">'color'</span> =&gt; <span style="color: #ff0000;">'blue'</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #0000ff;">$attr</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #b1b100;">return</span> <span style="color: #ff0000;">'&lt;h2&gt;Attributes&lt;/h2&gt;&lt;pre&gt;'</span> . <a href="http://www.php.net/print_r" onclick="pageTracker._trackPageview('/outgoing/www.php.net/print_r?referer=');"><span style="color: #000066;">print_r</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$attr</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span> . <span style="color: #ff0000;">'&lt;/pre&gt;&lt;h2&gt;content&lt;/h2&gt;'</span> . <span style="color: #0000ff;">$content</span>;
<span style="color: #66cc66;">&#125;</span></pre></p>
<p>That&#8217;s it!  That&#8217;s why they are so great, it takes next to nothing to handle!  However, maybe you&#8217;re thinking about a relatively complex way to use these, and you want to take it to the next level.</p>
<h2>The Next Level</h2>
<p>Maybe you&#8217;re worried that you&#8217;re users won&#8217;t grasp the intricacies of your shortcodes, or will be plagued by typos.  It&#8217;s a valid concern.  For example, I don&#8217;t want to assume that my users will be able to create a Google map by flawlessly entering:<br />
<pre class="html4strict">[googleMap width=&quot;100%&quot; height=&quot;400&quot; name=&quot;Aero Rental - Phoenix&quot; directions_to=&quot;true&quot; directions_from=&quot;true&quot;]3432 W. Clarendon, 85017[/googleMap]</pre></p>
<p>The solution is to create a way for your users to generate the shortcodes and have them sent to the editor, but where to start?  First, you need to add a meta box to the writing/editing pages (these are the dropdown boxes below the editor, such as Tags, Categories, etc).  To do this, create a function that you will use to display the form used to generate your shortcode (I&#8217;m going to call it &#8220;insertForm&#8221;).  Then you need to hook into the admin_menu action, and use it to create the metaboxes:</p>
<p><pre class="php">&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">function</span> handleAdminMenu<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #808080; font-style: italic;">// You have to add one to the &quot;post&quot; writing/editing page, and one to the &quot;page&quot; writing/editing page</span>
    add_meta_box<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'yourMetaBoxID'</span>, <span style="color: #ff0000;">'Your Meta Box Title'</span>, <span style="color: #ff0000;">'insertForm'</span>, <span style="color: #ff0000;">'post'</span>, <span style="color: #ff0000;">'normal'</span><span style="color: #66cc66;">&#41;</span>;
    add_meta_box<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'yourMetaBoxID'</span>, <span style="color: #ff0000;">'Your Meta Box Title'</span>, <span style="color: #ff0000;">'insertForm'</span>, <span style="color: #ff0000;">'page'</span>, <span style="color: #ff0000;">'normal'</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> insertForm<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>
        &lt;table <span style="color: #000000; font-weight: bold;">class</span>=<span style="color: #ff0000;">&quot;form-table&quot;</span>&gt;
            &lt;tr valign=<span style="color: #ff0000;">&quot;top&quot;</span>&gt;
                &lt;th scope=<span style="color: #ff0000;">&quot;row&quot;</span>&gt;&lt;label <span style="color: #b1b100;">for</span>=<span style="color: #ff0000;">&quot;wpYourPluginName_content&quot;</span>&gt;&lt;?php _e<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Tag Content:'</span><span style="color: #66cc66;">&#41;</span>?&gt;&lt;/label&gt;&lt;/th&gt;
                &lt;td&gt;
                    &lt;input type=<span style="color: #ff0000;">&quot;text&quot;</span> size=<span style="color: #ff0000;">&quot;40&quot;</span> style=<span style="color: #ff0000;">&quot;width:95%;&quot;</span> name=<span style="color: #ff0000;">&quot;wpYourPluginName[content]&quot;</span> id=<span style="color: #ff0000;">&quot;wpYourPluginName_content&quot;</span> /&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr valign=<span style="color: #ff0000;">&quot;top&quot;</span>&gt;
                &lt;th scope=<span style="color: #ff0000;">&quot;row&quot;</span>&gt;&lt;label <span style="color: #b1b100;">for</span>=<span style="color: #ff0000;">&quot;wpYourPluginName_foo&quot;</span>&gt;&lt;?php _e<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Foo Attribute:'</span><span style="color: #66cc66;">&#41;</span>?&gt;&lt;/label&gt;&lt;/th&gt;
                &lt;td&gt;
                    &lt;input type=<span style="color: #ff0000;">&quot;text&quot;</span> size=<span style="color: #ff0000;">&quot;40&quot;</span> style=<span style="color: #ff0000;">&quot;width:95%;&quot;</span> name=<span style="color: #ff0000;">&quot;wpYourPluginName[foo]&quot;</span> id=<span style="color: #ff0000;">&quot;wpYourPluginName_foo&quot;</span> /&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
            &lt;tr valign=<span style="color: #ff0000;">&quot;top&quot;</span>&gt;
                &lt;th scope=<span style="color: #ff0000;">&quot;row&quot;</span>&gt;&lt;label <span style="color: #b1b100;">for</span>=<span style="color: #ff0000;">&quot;wpYourPluginName_bar&quot;</span>&gt;&lt;?php _e<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'Bar Attribute:'</span><span style="color: #66cc66;">&#41;</span>?&gt;&lt;/label&gt;&lt;/th&gt;
                &lt;td&gt;
                    &lt;input type=<span style="color: #ff0000;">&quot;text&quot;</span> size=<span style="color: #ff0000;">&quot;40&quot;</span> style=<span style="color: #ff0000;">&quot;width:95%;&quot;</span> name=<span style="color: #ff0000;">&quot;wpYourPluginName[bar]&quot;</span> id=<span style="color: #ff0000;">&quot;wpYourPluginName_bar&quot;</span> /&gt;
                &lt;/td&gt;
            &lt;/tr&gt;
        &lt;/table&gt;
        &lt;p <span style="color: #000000; font-weight: bold;">class</span>=<span style="color: #ff0000;">&quot;submit&quot;</span>&gt;
            &lt;input type=<span style="color: #ff0000;">&quot;button&quot;</span> onclick=<span style="color: #ff0000;">&quot;return wpYourPluginAdmin.sendToEditor(this.form);&quot;</span> value=<span style="color: #ff0000;">&quot;&lt;?php _e('Send Map to Editor &amp;raquo;'); ?&gt;&quot;</span> /&gt;
        &lt;/p&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> adminHead <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span><span style="color: #0000ff;">$GLOBALS</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'editing'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        wp_enqueue_script<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'wpYourPluginNameAdmin'</span>, <span style="color: #ff0000;">'path/to/yourJsFile.js'</span>, <a href="http://www.php.net/array" onclick="pageTracker._trackPageview('/outgoing/www.php.net/array?referer=');"><span style="color: #000066;">array</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'jquery'</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #ff0000;">'1.0.0'</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
add_action<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'admin_menu'</span>, <span style="color: #ff0000;">'handleAdminMenu'</span><span style="color: #66cc66;">&#41;</span>;
add_filter<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'admin_print_scripts'</span>, <span style="color: #ff0000;">'adminHead'</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;</pre><br />
The specifics:<br />
yourMetaBoxID becomes the id of the metabox div.<br />
&#8220;Your Meta Box Title&#8221; will be the displayed title for the metabox.</p>
<p>You may have noticed that the submit button calls some javascript (specifically wpYourPluginAdmin.sendToEditor(this.form)), and we enqueue a JavaScript file.  Here is that file:<br />
<pre class="javascript"><span style="color: #009900; font-style: italic;">/**
 * Handle: wpYourPluginNameAdmin
 * Version: 0.0.1
 * Deps: jquery
 * Enqueue: true
 */</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> wpYourPluginNameAdmin = <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span>
&nbsp;
wpYourPluginNameAdmin.<span style="color: #006600;">prototype</span> = <span style="color: #66cc66;">&#123;</span>
    options           : <span style="color: #66cc66;">&#123;</span><span style="color: #66cc66;">&#125;</span>,
    generateShortCode : <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> content = <span style="color: #000066; font-weight: bold;">this</span><span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'options'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'content'</span><span style="color: #66cc66;">&#93;</span>;
        <span style="color: #000066; font-weight: bold;">delete</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'options'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'content'</span><span style="color: #66cc66;">&#93;</span>;
&nbsp;
        <span style="color: #003366; font-weight: bold;">var</span> attrs = <span style="color: #3366CC;">''</span>;
        jQuery.<span style="color: #006600;">each</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'options'</span><span style="color: #66cc66;">&#93;</span>, <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066;">name</span>, value<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span>value != <span style="color: #3366CC;">''</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
                attrs += <span style="color: #3366CC;">' '</span> + <span style="color: #000066;">name</span> + <span style="color: #3366CC;">'=&quot;'</span> + value + <span style="color: #3366CC;">'&quot;'</span>;
            <span style="color: #66cc66;">&#125;</span>
        <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #3366CC;">'[googleMap'</span> + attrs + <span style="color: #3366CC;">']'</span> + content + <span style="color: #3366CC;">'[/googleMap]'</span>
    <span style="color: #66cc66;">&#125;</span>,
    sendToEditor      : <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>f<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> collection = jQuery<span style="color: #66cc66;">&#40;</span>f<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">find</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">&quot;input[id^=wpYourPluginName]:not(input:checkbox),input[id^=wpYourPluginName]:checkbox:checked&quot;</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #003366; font-weight: bold;">var</span> $this = <span style="color: #000066; font-weight: bold;">this</span>;
        collection.<span style="color: #006600;">each</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
            <span style="color: #003366; font-weight: bold;">var</span> <span style="color: #000066;">name</span> = <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #000066;">name</span>.<span style="color: #006600;">substring</span><span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">13</span>, <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #000066;">name</span>.<span style="color: #006600;">length</span><span style="color: #CC0000;">-1</span><span style="color: #66cc66;">&#41;</span>;
            $this<span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'options'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span><span style="color: #000066;">name</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">value</span>;
        <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
        send_to_editor<span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">generateShortCode</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span>;
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> wpYourPluginAdmin = <span style="color: #003366; font-weight: bold;">new</span> wpYourPluginNameAdmin<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></p>
<p>This JavaScript parses items from the form, formats a shortcode, and sends it to the editor!  Now you can create an interface for your user, to allow to easily generate VALID shortcodes for you to parse.</p>
]]></content:encoded>
			<wfw:commentRss>http://xavisys.com/wordpress-25-shortcodes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google Maps for Wordpress</title>
		<link>http://xavisys.com/google-maps-for-wordpress/</link>
		<comments>http://xavisys.com/google-maps-for-wordpress/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 03:17:32 +0000</pubDate>
		<dc:creator>Aaron D. Campbell</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[Google Maps]]></category>

		<category><![CDATA[plugin]]></category>

		<category><![CDATA[shortcodes]]></category>

		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://xavisys.com/?p=80</guid>
		<description><![CDATA[Download from wordpress.org
Warning: This plugin was affected by Trac ticket 6444, which was fixed in WordPress 2.5.1, so get 2.5.1!
The Google Maps for WordPress plugin allows you to easily insert Google maps into your blog, making use of the new shortCode system in WordPress 2.5.  The maps can be configured to offer directions to [...]]]></description>
			<content:encoded><![CDATA[<p class="message"><a href="http://wordpress.org/extend/plugins/google-maps-for-wordpress/" onclick="pageTracker._trackPageview('/outgoing/wordpress.org/extend/plugins/google-maps-for-wordpress/?referer=');">Download from wordpress.org</a></p>
<p class="message" style="font-weight: bold; text-align: center;">Warning: This plugin was affected by <a href="http://trac.wordpress.org/ticket/6444" onclick="pageTracker._trackPageview('/outgoing/trac.wordpress.org/ticket/6444?referer=');">Trac ticket 6444</a>, which was fixed in WordPress 2.5.1, so get 2.5.1!</p>
<p>The Google Maps for WordPress plugin allows you to easily insert Google maps into your blog, making use of the new shortCode system in WordPress 2.5.  The maps can be configured to offer directions to or from the location, show or hide the zoom/pan controls, show/hide map type, activate zoom using mouse wheel, and more.</p>
<p>It requires a Google Maps API key, and then gives you a nice interface near your editor to help you build the map and send it to the editor.</p>
]]></content:encoded>
			<wfw:commentRss>http://xavisys.com/google-maps-for-wordpress/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Wordpress Twitter Widget</title>
		<link>http://xavisys.com/wordpress-twitter-widget/</link>
		<comments>http://xavisys.com/wordpress-twitter-widget/#comments</comments>
		<pubDate>Mon, 14 Apr 2008 17:09:13 +0000</pubDate>
		<dc:creator>Aaron D. Campbell</dc:creator>
		
		<category><![CDATA[Wordpress]]></category>

		<category><![CDATA[plugin]]></category>

		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://xavisys.com/?p=77</guid>
		<description><![CDATA[Download from wordpress.org
My latest plugin is a sidebar widget that handles Twitter feeds.  It&#8217;s true that you could just point and RSS widget at one of the Twitter feeds, but you end up with the whole tweet (I honestly don&#8217;t know what they are called) as a link, @replies don&#8217;t function, etc.  Twitter [...]]]></description>
			<content:encoded><![CDATA[<p class="message"><a href="http://wordpress.org/extend/plugins/twitter-widget-pro/" onclick="pageTracker._trackPageview('/outgoing/wordpress.org/extend/plugins/twitter-widget-pro/?referer=');">Download from wordpress.org</a></p>
<p>My latest plugin is a sidebar widget that handles Twitter feeds.  It&#8217;s true that you could just point and RSS widget at one of the Twitter feeds, but you end up with the whole tweet (I honestly don&#8217;t know what they are called) as a link, @replies don&#8217;t function, etc.  Twitter Widget Pro properly handles twitter feeds, including @username and link parsing, feeds that include friends or just one user, and can even display profile images for the users.  It&#8217;s set up like the RSS widgets, so you can have as many of as you want on your sidebars.</p>
<p>I currently have my twitter feed in the right sidebar, showing the last five tweets, and Kevin Rose&#8217;s feed (with friends) in the left sidebar, showing profile images along with each of the last 10 tweets.</p>
<p>I tried to make everything easily styled, so there are no built-in styles.  If you don&#8217;t know exactly what you need, here is what I&#8217;m using on this site:<br />
<pre class="css"><span style="color: #808080; font-style: italic;">/**
 * Twitter Widget
 */</span>
.widget_twitter li <span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">clear</span>:<span style="color: #993333;">both</span>;
<span style="color: #66cc66;">&#125;</span>
.widget_twitter li img <span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">float</span>:<span style="color: #000000; font-weight: bold;">left</span>;
	<span style="color: #000000; font-weight: bold;">margin-right</span>:.5em;
<span style="color: #66cc66;">&#125;</span>
.widget_twitter li <span style="color: #6666ff;">.<span style="color: #000000; font-weight: bold;">clear</span> </span><span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">clear</span>:<span style="color: #993333;">both</span>;
<span style="color: #66cc66;">&#125;</span></pre><br />
<span id="more-77"></span></p>
<h3>Changelog</h3>
<dl>
<dt>04/23/2008: 1.1.0</dt>
<dd>
<ul>
<li>Most major fix is the inclusion of json_decode.php for users that don&#8217;t have json_decode() which was added in PHP 5.2.0</li>
<li>Fixed problem with displaying a useless li when profile images aren&#8217;t displayed on a single user widget</li>
<li>Default title is now set to &#8220;Twitter: UserName&#8221;</li>
</ul>
</dd>
<dt>04/17/2008: 1.0.0</dt>
<dd>
<ul>
<li>Released to wordpress.org repository</li>
</ul>
</dd>
<dt>04/14/2008: 0.0.3</dt>
<dd>
<ul>
<li>Fixed some of the settings used with Snoopy</li>
<li>Set a read timeout for fetching the files</li>
</ul>
</dd>
<dt>04/14/2008: Version 0.0.2</dt>
<dd>
<ul>
<li>Changed some function names</li>
<li>Moved form display to a separate function (_showForm)</li>
<li>Now uses wp_parse_args to handle defaults</li>
<li>Added comments to the code</li>
<li>Added seconds to the _timeSince function so you can have something like &#8220;about 25 seconds ago&#8221;</li>
</ul>
</dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://xavisys.com/wordpress-twitter-widget/feed/</wfw:commentRss>
		</item>
		<item>
		<title>J!nx</title>
		<link>http://xavisys.com/jinx/</link>
		<comments>http://xavisys.com/jinx/#comments</comments>
		<pubDate>Sat, 05 Apr 2008 16:36:39 +0000</pubDate>
		<dc:creator>Aaron D. Campbell</dc:creator>
		
		<category><![CDATA[News]]></category>

		<category><![CDATA[geek]]></category>

		<guid isPermaLink="false">http://xavisys.com/?p=76</guid>
		<description><![CDATA[I don&#8217;t often post on things like this, but J!nx clothing is great, so I had to take a minute to talk about it.  If you are a true geek, you have to check them out, it&#8217;s like the holy grail of clothing stores for us!  They also carry a clothing for a [...]]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t often post on things like this, but J!nx clothing is great, so I had to take a minute to talk about it.  If you are a true geek, you have to check them out, it&#8217;s like the holy grail of clothing stores for us!  They also carry a clothing for a lot of revision 3 shows such as Diggnation.<br />
<a href="http://www.jinx.com/member/aaroncampbell?bid=6" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.jinx.com/member/aaroncampbell?bid=6&referer=');"><img src="http://www.jinx.com/Content/Banner/468x60chogun_embrace.jpg" width="468" height="60" border="0" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://xavisys.com/jinx/feed/</wfw:commentRss>
		</item>
		<item>
		<title>WordPress 2.5: First Impressions</title>
		<link>http://xavisys.com/wordpress-25-first-impressions/</link>
		<comments>http://xavisys.com/wordpress-25-first-impressions/#comments</comments>
		<pubDate>Wed, 02 Apr 2008 19:23:44 +0000</pubDate>
		<dc:creator>Aaron D. Campbell</dc:creator>
		
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://xavisys.com/?p=74</guid>
		<description><![CDATA[WordPress 2.5 was recently released.  I&#8217;m not your average WordPress user, I develop plugins, test the upcoming releases, and even contribute to the core when I can.  Why do I say all this?  I hope it will give you an idea where I&#8217;m coming from, as I share my first impressions of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wordpress.org/" onclick="pageTracker._trackPageview('/outgoing/wordpress.org/?referer=');">WordPress 2.5</a> was recently released.  I&#8217;m not your average WordPress user, I <a href="http://xavisys.com/tag/plugin+wordpress/">develop plugins</a>, test the upcoming releases, and even contribute to the core when I can.  Why do I say all this?  I hope it will give you an idea where I&#8217;m coming from, as I share my first impressions of WordPress 2.5.</p>
<h2>Writing Posts</h2>
<p>The first thing that stuck out to me (and that I had been waiting for) was the tag suggest feature.  Simply start typing a tag, and an auto-suggest feature will give you a dropdown of existing tags to choose from.  Before, it was too easy to end up with tags like &#8220;web development&#8221; and &#8220;webdevelopment&#8221; since you had to remember them (no one actually looks them up).<br />
<img class="alignnone size-full wp-image-75" title="Wordpress 2.5 tags" src="http://xavisys.com/wp-content/uploads/2008/04/tags.png" alt="Wordpress 2.5 tags" width="733" height="159" /></p>
<p>This brings me to the new way media is managed/added.  I haven&#8217;t had the need to add videos or sounds to my site, so I&#8217;ll stick to the images.  In the end, I like the new way it works.  The Flash uploader is nice, and the addition of a medium option for each image (thumbnail, medium, full size) is a welcome change.  However, nice as it is, there is one thing about it that is REALLY annoying.  Full size isn&#8217;t actually full size.  It&#8217;s 500px wide!  What&#8217;s the point of calling it &#8220;full size&#8221; and then not making it &#8220;full size!&#8221;  If they want small, medium, and large, they should call it that (although I still think there should be a full size option).  There <strong>is</strong> however a simple solution.  You can set $content_width inside your theme&#8217;s functions.php file, and it will use that instead of 500 for the max width.  I set mine to 1024:<br />
<pre class="php"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #0000ff;">$content_width</span> = <span style="color: #cc66cc;">1024</span>; <span style="color: #000000; font-weight: bold;">?&gt;</span></pre><br />
Unfortunately, this isn&#8217;t a standard that was in place, so themes do not have this.  It&#8217;s a hack, and it&#8217;s shouldn&#8217;t be needed.</p>
<p>The last thing I wanted to mention, which is very minor, but annoyed me, is that you can&#8217;t resize the editor window when in HTML mode.  I almost always use HTML mode, and I thought they had removed the ability to resize the text area.  as it turns out, you need to switch to the visual editor, resize it, and switch back.</p>
<h2>Admin Layout</h2>
<p>I don&#8217;t like static width layouts.  Have dual screens that both run at 1680&#215;1050, and I run my browser full-screen because that&#8217;s the way I like it.  My laptop runs at 1920&#215;1200, and I even run full-screen on that.  Instead of having more room to work, I am rewarded with more than 40% of my screen wasted as blank white space.  Having said this, I&#8217;ve seen far worse layouts, and it&#8217;s fairly intuitive.  You can expect plenty of plugins to fix this.  Right now (as I&#8217;m typing this), what I have done is use firebug to inspect the HTML, found div#wrap, and altered the style by removing max-width:980px;.  This seems to work fine for me.</p>
<h2>Plugin API</h2>
<p>For me, this is the most exciting change.  I love the new shortCodes.  They are a <a href="http://trac.wordpress.org/ticket/6444" onclick="pageTracker._trackPageview('/outgoing/trac.wordpress.org/ticket/6444?referer=');">little rough around the edges</a>, but they are extremely handy.  As a matter of fact, I just finished a Google Maps Plugin that uses the shortCodes.  It generates a shortCode based on the settings a user chooses, and insert it into the editor.  It later handles those shortCodes by changing them out for a Google Map.  Unfortunately it relies on the ticket referenced above, so I&#8217;ll release it once that gets figured out.</p>
<h2>Summary</h2>
<p>WordPress 2.5 is definitely a big step forward.  It has some small inconsistencies, which I expect to be easily fixed in upcoming minor releases, but nothing that should keep you from upgrading.  Go try it and tell me what you think.</p>
]]></content:encoded>
			<wfw:commentRss>http://xavisys.com/wordpress-25-first-impressions/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google Maps API</title>
		<link>http://xavisys.com/google-maps-api/</link>
		<comments>http://xavisys.com/google-maps-api/#comments</comments>
		<pubDate>Fri, 28 Mar 2008 16:42:04 +0000</pubDate>
		<dc:creator>Aaron D. Campbell</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[Google Maps]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[xavisys]]></category>

		<guid isPermaLink="false">http://xavisys.com/google-maps-api/</guid>
		<description><![CDATA[I started working some with the Google Maps API, and it&#8217;s pretty nice.  The documentation is decent, the examples are good, etc.  I realized that I&#8217;ve come to expect this from Google, so I wanted to take the time instead to point out that this is an exceptional product.  For example, I [...]]]></description>
			<content:encoded><![CDATA[<p>I started working some with the <a href="http://code.google.com/apis/maps/" onclick="pageTracker._trackPageview('/outgoing/code.google.com/apis/maps/?referer=');">Google Maps API</a>, and it&#8217;s pretty nice.  The documentation is decent, the examples are good, etc.  I realized that I&#8217;ve come to expect this from Google, so I wanted to take the time instead to point out that this is an exceptional product.  For example, I began to look into making the scroll wheel zoom on my maps like they do on the Google Maps site.  What does it entail?  One line: <pre class="javascript">map.<span style="color: #006600;">enableScrollWheelZoom</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></p>
<p>However, as great of a product as it is, it seems to be lacking some things.  For example, if I want an info window that gives the options to get directions to or from that location, I have to do all that myself.  I have to generate the links, and make them replace the content of the info window with a form that <em>I</em> have to make, and I have to make that form run some JavaScript when executed to get the directions.  Why?  This has GOT to be a common task.  Why not build it into the API?  However, in the end, that pales in comparison to the real problem.  There is no way to validate a Google Maps API key!  Instead, you have to load JavaScript using that key, and it uses an <em>alert</em> to announce that the key was bad!  No one wants a JavaScript alert to pop up on their page!  Since I&#8217;m making a WordPress plugin out of this (teaser!), I needed to make sure that the users of my plugin wouldn&#8217;t have this issue.  I ended up having to override the alert function on the options page for my plugin like this:<br />
<pre class="javascript"><span style="color: #003366; font-weight: bold;">var</span> KillAlerts = <span style="color: #003366; font-weight: bold;">true</span>;
<span style="color: #003366; font-weight: bold;">var</span> realAlert = <span style="color: #000066;">alert</span>;
<span style="color: #003366; font-weight: bold;">var</span> <span style="color: #000066;">alert</span> = <span style="color: #003366; font-weight: bold;">new</span> <span style="color: #003366; font-weight: bold;">Function</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'a'</span>, <span style="color: #3366CC;">'if(!KillAlerts){realAlert(a)}'</span><span style="color: #66cc66;">&#41;</span>;</pre><br />
Then I added a function that runs on page load, re-enables the alerts, and checks if the key was valid:<br />
<pre class="javascript"><span style="color: #003366; font-weight: bold;">function</span> load<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #009900; font-style: italic;">// Re-anable alerts</span>
    KillAlerts = <span style="color: #003366; font-weight: bold;">false</span>;
&nbsp;
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span>GBrowserIsCompatible<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #009900; font-style: italic;">// Key is valid</span>
    <span style="color: #66cc66;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span>G_INCOMPAT<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
            <span style="color: #009900; font-style: italic;">// Key is NOT valid.</span>
        <span style="color: #66cc66;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #66cc66;">&#123;</span>
            <span style="color: #009900; font-style: italic;">// Can't tell if the Google API Key is valid, due to the browser not being compatible with the Google Maps API.</span>
        <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre><br />
There is no reason that it should be that complicated.  They should have a web service where I can send a request to verify a key, or their script should set a global variable rather than send an ugly alert!  In the end, it&#8217;s a great product, but I would have expected that these kind of rough edges would have been taken care of by now.  Google, you make me sad.</p>
]]></content:encoded>
			<wfw:commentRss>http://xavisys.com/google-maps-api/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Free Template: Minimalist</title>
		<link>http://xavisys.com/free-template-minimalist/</link>
		<comments>http://xavisys.com/free-template-minimalist/#comments</comments>
		<pubDate>Mon, 28 Jan 2008 14:49:29 +0000</pubDate>
		<dc:creator>Aaron D. Campbell</dc:creator>
		
		<category><![CDATA[Web Design]]></category>

		<category><![CDATA[free]]></category>

		<category><![CDATA[Free Template]]></category>

		<category><![CDATA[opendesigns]]></category>

		<category><![CDATA[webdesign]]></category>

		<category><![CDATA[Wordpress]]></category>

		<category><![CDATA[wordpress theme]]></category>

		<guid isPermaLink="false">http://xavisys.com/free-template-minimalist/</guid>
		<description><![CDATA[Minimalist is an extremely light weight, configurable template, with no images at all!  It&#8217;s completely fluid, so no matter what the user&#8217;s screen width, you don&#8217;t waste any space, browser font resizing is completely supported, and it is source-ordered.  It includes stylesheets to display main content on the left or right, as well [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.opendesigns.org/preview/?template=1261" title="Minimalist" onclick="pageTracker._trackPageview('/outgoing/www.opendesigns.org/preview/?template=1261&referer=');"><img src="http://xavisys.com/wp-content/uploads/2008/01/thumbnail1.jpg" alt="Minimalist" style="margin: 1em" align="left" /></a>Minimalist is an extremely light weight, configurable template, with no images at all!  It&#8217;s completely fluid, so no matter what the user&#8217;s screen width, you don&#8217;t waste any space, browser font resizing is completely supported, and it is source-ordered.  It includes stylesheets to display main content on the left or right, as well as many alternative colors including grey, green, blue, purple, red, and brown!  It validates as XHTML Strict 1.0, and is released as Public Domain.  It is <a href="http://www.opendesigns.org/preview/?template=1261" title="Download Minimalist" onclick="pageTracker._trackPageview('/outgoing/www.opendesigns.org/preview/?template=1261&referer=');">available for download</a> over at <a href="http://www.opendesigns.org" onclick="pageTracker._trackPageview('/outgoing/www.opendesigns.org?referer=');">OpenDesigns.org</a>.</p>
<p>I just converted Minimalist to a <a href="http://wordpress.org/" onclick="pageTracker._trackPageview('/outgoing/wordpress.org/?referer=');">WordPress</a> theme, and uploaded it here for anyone that wants it.  I was lazy, so it defaults to green/grey with content to the left.  If you want to use a different combination, edit the header.php file to use whatever css files you want (all are included).  I also included a contact page template, but again was a little lazy, so you will need to edit contact.php and put your contact info on lines 73-75, as well as your E-Mail address on line 17.  The only other real changes that were made was styling for comments (as well as unique styling for admin comments), and I added a pencil icon to use for &#8220;editing&#8221; (it&#8217;s still image free for your users).</p>
]]></content:encoded>
			<wfw:commentRss>http://xavisys.com/free-template-minimalist/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
