<?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>Marenkay.com</title>
	<atom:link href="http://www.marenkay.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.marenkay.com</link>
	<description>developer, father, gamer, and nerd.</description>
	<lastBuildDate>Thu, 03 Jun 2010 10:19:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Porting legacy PHP apps: Rewrite, refactor, refine</title>
		<link>http://www.marenkay.com/featured/porting-legacy-php-apps-rewrite-refactor-refine/</link>
		<comments>http://www.marenkay.com/featured/porting-legacy-php-apps-rewrite-refactor-refine/#comments</comments>
		<pubDate>Mon, 04 May 2009 08:30:30 +0000</pubDate>
		<dc:creator>Daniel S. Reichenbach</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[PHP4]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Porting]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.marenkay.com/?p=284</guid>
		<description><![CDATA[This is the second article in the eight-part series &#8220;Porting legacy PHP apps&#8221;. In this session we will explore available options for breathing new life into our legacy application. Fasten your seat belts as we continue our journey after the jump. In the last article we have discovered that our application is at a dead [...]]]></description>
			<content:encoded><![CDATA[<p>This is the second article in the eight-part series &#8220;Porting legacy PHP apps&#8221;. In this session we will explore available options for breathing new life into our legacy application. Fasten your seat belts as we continue our journey after the jump.</p>

<p><span id="more-284"></span></p>

<p>In the last article we have discovered that our application is at a dead end: PHP 4 has <a href="http://www.php.net/archive/2008.php#2008-01-03-1">officially been declared dead</a>, we are facing an increasing number of issues with running our application and our code is cluttered. Maintaining &#8211; and probably extending &#8211; our application is becoming a task that wastes resources and decreases our teams&#8217; motivation to continue this piece of software.</p>

<p>Now we are facing a simple question: <strong>what are we supposed to do to keep our application running and our customer(s) happy?</strong></p>

<h2>Rewriting our application</h2>

<p>If you have been facing the above issues for a while it may seem appealing to start from scratch and rewrite your application. A fresh start, based upon current approaches, throwing away everything we have. There even is the chance to redefine the application specification.</p>

<p>While this may sound good from a developers&#8217; point of view (don&#8217;t developers love challenges), it does not smell good from a business point of view.</p>

<ul>
<li><strong>Rewrites are expensive</strong>: the teams&#8217; resources will be bound to rebuilding everything from zero, and this <em>is</em> expensive. Man-hours are not cheap these days, and it will be hardly possible to convince the boss(es) to invest more money compared to the current maintenance costs of your application.</li>
<li><strong>Rewrites are a waste of investments</strong>: if your application ran for a few years, there is a huge investment involved. Consider a team of three or four developers and a designer in charge for maintaining an application. It is quite an impressive number of man-hours invested, and the Euros or Dollars (or whatever you are paid in) are not earned easy. After all, throwing investments into the thrash is no Good Thing.</li>
<li><strong>Rewrites ignore existing achievements</strong>: over the years the code in your application will have matured, as you very likely faced most issues that could raise during the application lifetime. This is of value, and should not be left behind. After all it <em>is</em> knowledge you gained.</li>
</ul>

<h2>Refactoring your application</h2>

<p>Refacto-what? <a href="http://en.wikipedia.org/wiki/Code_refactoring">Code refactoring</a> describes the process of &#8220;cleaning up&#8221; your applications&#8217; code. By refactoring we refer to modifying our existing code without touching the functionality or any defined <a href="http://en.wikipedia.org/wiki/API">API</a>.</p>

<p>Refactoring an application comes with a few requirements for your teams&#8217; knowledge:</p>

<ul>
<li>refactoring usually is tied to test-driven development. This means for every functionality you refactor, there will have to be a test defined and executed in order to verify the functionality of the refactored code. It has to deliver identical results, even though coded with a different approach.</li>
<li>refactoring forces you to revisit all skeletons in the closet. All the pieces of code giving you goose bumps will make a return in your teams&#8217; code editor of choice.</li>
<li>refactoring code and authoring test cases is different. If your team is used to procedural development, test-driven development may scare your team. Probably they read about unit testing in Java, C++, C#, etc. but unit testing in PHP?</li>
</ul>

<h2>Refining your application</h2>

<p>Porting is the most lightweight process to refine your applications. While rewriting and refactoring will include lot of code changes, porting only comes with a few changes.</p>

<p>If your application has been developed with PHP 4 and MySQL 4, you might make the jump and switch to PHP 5 and MySQL 5. Both versions only require minor changes to your code, and the manuals of both applications contain hints:</p>

<ul>
<li>Migrating from PHP 4 to PHP 5: <a href="http://www.php.net/manual/en/migration5.php">the PHP 4 to 5 migration</a> will only require a few code changes. It is recommended to work through the list of backward incompatible changes first.</li>
<li>Upgrading MySQL to MySQL 5: <a href="http://dev.mysql.com/doc/refman/5.0/en/upgrading-from-4-1.html">upgrading from 4.x to 5.x</a> mostly consists of updates for table storage engines, and might require a change of engines, and rebuilding indexes.</li>
</ul>

<p>Making the changes listed in the manual will require low effort, and can keep your application running for a few more years but it will not give you any benefits if you do not use new features introduced in PHP 5 and MySQL 5.</p>

<h1>Summary</h1>

<p>As we have seen there are a few options and the difference in effort and cost is huge. Before you decide on an option you will have to evaluate carefully what works best for you. Which option you chose will be different for every application, as no application will evolve equal to another.</p>

<p>In part three of our series we will develop a project plan for breathing new life into your legacy app.</p>

<p>Stay tuned for upcoming articles in <a href="http://www.marenkay.com/features/porting-legacy-php-apps-the-series/">&#8220;Porting legacy PHP apps ~ The Series</a>.</p>

<p>Comments and feedback is more than welcome, of course.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marenkay.com/featured/porting-legacy-php-apps-rewrite-refactor-refine/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Reporting phpArmory issues</title>
		<link>http://www.marenkay.com/tipsresources/programming/reporting-phparmory-issues/</link>
		<comments>http://www.marenkay.com/tipsresources/programming/reporting-phparmory-issues/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 11:00:24 +0000</pubDate>
		<dc:creator>Daniel S. Reichenbach</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[phpArmory]]></category>

		<guid isPermaLink="false">http://www.marenkay.com/?p=293</guid>
		<description><![CDATA[While I have been working on the next update for phpArmory &#8211; which will be released as version 0.5.0 soon &#8211; I received a few mails with bug reports for the classes. People have been reporting issues via mail for a while now, and thanks to GitHub, you can now report issues over there. GitHub [...]]]></description>
			<content:encoded><![CDATA[<p>While I have been working on the next update for phpArmory &#8211; which will be released as version 0.5.0 soon &#8211; I received a few mails with bug reports for the classes. People have been reporting issues via mail for a while now, and thanks to GitHub, you can now report issues over there.</p>

<p>GitHub finally added issue handling to their service, and I&#8217;d like to say: <a href="http://github.com/danielsreichenbach/phparmory/issues">report your issues with phpArmory</a> at GitHub.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marenkay.com/tipsresources/programming/reporting-phparmory-issues/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Porting legacy PHP apps: Spotting legacy apps</title>
		<link>http://www.marenkay.com/featured/porting-legacy-php-apps-spotting-legacy-apps/</link>
		<comments>http://www.marenkay.com/featured/porting-legacy-php-apps-spotting-legacy-apps/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 15:37:48 +0000</pubDate>
		<dc:creator>Daniel S. Reichenbach</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[PHP4]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Porting]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.marenkay.com/?p=267</guid>
		<description><![CDATA[This is the first article in the eight-part series &#8220;Porting legacy PHP apps&#8221;. Throughout the duration of this series we will be speaking about PHP functions and language features, a little bit about XHTML and CSS, and also about client-side scripting. As you read through the series, you might see code that could be written [...]]]></description>
			<content:encoded><![CDATA[<p>This is the first article in the eight-part series &#8220;Porting legacy PHP apps&#8221;. Throughout the duration of this series we will be speaking about PHP functions and language features, a little bit about XHTML and CSS, and also about client-side scripting.</p>

<p><span id="more-267"></span></p>

<p>As you read through the series, you might see code that could be written differently or improved. At least I do expect you to do so and comment on the articles to refine what I wrote or just tell me that I suck. After all this is intended to help commercial PHP developers, and there are a lot of us out there who would all benefit from this.</p>

<h2>What actually is that thing you name &#8220;legacy app&#8221;?</h2>

<p>Speaking of &#8220;legacy applications&#8221; or &#8220;legacy code&#8221; as some might say, there comes <a href="http://en.wikipedia.org/wiki/Legacy_code">Wikipedia</a> to the rescue with a broad definition of what we can consider to be a legacy in terms of code:</p>

<blockquote>
  <p>Legacy code is source code that relates to a no-longer supported or manufactured operating system or other computer technology. The term can also mean code inserted into modern software for the purpose of maintaining an older or previously supported feature.</p>
</blockquote>

<p>Simply said, PHP is such a computer technology, and PHP scripts are source code after all, even though some may have considered PHP to be no <em>real</em> development language for commercial applications.</p>

<p>If you&#8217;re developing PHP application for a few years now, chances are good that you will have quite a few legacy applications in your companies portfolio and even a few that are still running on servers for your clients. As an example I have picked a PHP application developed for a commercial project which is dated back to mid-2000 when most of the PHP installations still were running a 3.x version of PHP and only a few early adopters made the switch to PHP4. The application is still running on a PHP 4.3.2 installation.</p>

<h2>What about your projects?</h2>

<p>If you are developing PHP applications for companies which sell services to consumers, chances are good that your application is still running. This is our first checkpoint for a legacy application.</p>

<h3>What is the lifetime of your application?</h3>

<p>Considering that PHP 4 was released in 2000, any PHP application older than five years can safely be stamped as <em>legacy code</em>. PHP 4.3.0 was released in December 2002, and it marked a point where the 4.x branch of PHP started to replace PHP3 installations in larger numbers.</p>

<h3>How large is your application?</h3>

<p>If you are using a Linux or Apple server, you can find out how many lines of code your application has pretty quickly. Open a console and enter</p>

<pre><code>wc -l `find . -name *.php4 -print`
</code></pre>

<p>Of course, adapt the line for the file extension you used. In my case we had to use <code>.php4</code> as <code>.php</code> still was pointing to an old PHP 3 installation. In my case this resulted in <em>312374</em> lines of code for an application that handles a few GB of user data, and ~300K users per month.</p>

<p>Now if I compare this with an application &#8211; written half a year ago &#8211; that comes with stuff like unit testing, UTF8 support, full i18n localization, separation of code and views and run the above command line again, I end up with whopping <em>116229</em> lines of code. This application does leverage what PHP 5 has to offer and leaves behind functions and language features from PHP 4 which have a replacement with a different approach in PHP 5.</p>

<p>They say, size does not matter. I say: <em>size matters</em>. It&#8217;s a combination of technique and size that wins the deal. After all size should be a sign for maintainability. Even if your code is well written, the larger the code, the larger the number of maintenance tasks will become as the years pass by.</p>

<h3>Do you see an increasing number of issue reports?</h3>

<p>As application get older, you may start to see strange errors happening, and the number of issue reports for errors that are hard or even impossible to track will rise. PHP has gone through quite an evolution since PHP 4 was released and with PHP 5 the number of errors may grow silently.</p>

<h3>Is your application documented?</h3>

<p>If your application is four or five years old, it is very unlikely that you will have documented your code in a style that will be helpful today. Documentation tools like <a href="http://www.phpdoc.org/">phpDoc</a> were not broadly used and while there may have been a specification for your application, commented code will be rather rare.</p>

<p>Missing documentation or aged documentation may be an issue, especially when you are tasked with updating the application.</p>

<h3>Does your application make use of libraries / frameworks?</h3>

<p>Most likely not. <a href="http://pear.php.net">PEAR</a> was not very popular back then, and for most applications there was no defined set of libraries used. From my own backlog it seems like the focus was more on which PHP extensions were used than what libraries one may use. E.g. extensions like GD and Freetype for dynamic image creation have been on the list.</p>

<p>This also may be a reason for large line counts for such an application. Code had to be written in multiple places even though it was identical. Personally the only &#8220;framework&#8221; I have seen in use back then was <a href="http://www.smarty.net/">Smarty</a> for templates.</p>

<h3>Does you application have style?</h3>

<p>Even in larger teams with source code control as part of the work-flow style guides for authoring PHP code have been a rare thing on the task list. It is very likely that the team was working on one large application, where each developer was assigned to a specific part of the application, e.g. one handled templates and views, the other one handled database usage, another one was assigned to the administration system.</p>

<p>While this may result in code styles being adapted and used, chances are good that there will be one code style for each part of the application. If you add team changes to this, code styles will start to turn into something that lacks style aka. <a href="http://en.wikipedia.org/wiki/Spagetti_code">spaghetti code</a>.</p>

<h3>Does your application separate code from views?</h3>

<p>In the early days of PHP 4 application used to mix code to implement functions with code to display output. While this may seem strange from todays&#8217; perspective it was perfectly fine back then. PHP development was mostly done in procedural fashion, and thus application logic and user interfaces were not isolated.</p>

<p>Today PHP and especially PHP 5 are used more in classical fashion of software engineering, applying architectural patterns like <a href="http://en.wikipedia.org/wiki/Model-view-controller">Model-View-Controller</a> to PHP projects.</p>

<h3>Deprecation and your application</h3>

<p>Within five years of time a lot of progress and evolution happens in Free Software, and PHP was no exception. Language features have changed, new features have been added, experimental PHP extensions turned into mainline extensions which are available by default. On top of that you will see a lot of PHP functions which are considered to be security risks, and have been replaced with safer functions in PHP 5.</p>

<p>If you are using PHP 5, there is a chapter available in the PHP manual which describes potential issues when <a href="http://www.php.net/manual/en/migration5.php">migrating from PHP 4</a>.</p>

<h2>Last but not least</h2>

<p>By now you should have an idea what the signs are to spot a legacy PHP application, and with by looking at your application&#8217;s code you should know if it is legacy or not.</p>

<p>In part two of our series we will continue with exploring available options for breathing new life into your legacy app.</p>

<p>Stay tuned for upcoming articles in <a href="http://www.marenkay.com/features/porting-legacy-php-apps-the-series/">&#8220;Porting legacy PHP apps ~ The Series</a>.</p>

<p>Comments and feedback is more than welcome, of course.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marenkay.com/featured/porting-legacy-php-apps-spotting-legacy-apps/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Porting legacy PHP apps ~ The Series</title>
		<link>http://www.marenkay.com/featured/porting-legacy-php-apps-the-series/</link>
		<comments>http://www.marenkay.com/featured/porting-legacy-php-apps-the-series/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 14:21:01 +0000</pubDate>
		<dc:creator>Daniel S. Reichenbach</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[PHP4]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Porting]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.marenkay.com/?p=258</guid>
		<description><![CDATA[While I have been blogging for a few years now with varying spare time, this is the first time that I feel the need to publish an article series. Introducing &#8220;Porting legacy PHP apps&#8221;, an eight part series of how-to&#8217;s, rules and recommendations, and a few bits and pieces of good advice to be published [...]]]></description>
			<content:encoded><![CDATA[<p>While I have been blogging for a few years now with varying spare time, this is the first time that I feel the need to publish an article series.</p>

<p>Introducing &#8220;Porting legacy PHP apps&#8221;, an eight part series of how-to&#8217;s, rules and recommendations, and a few bits and pieces of good advice to be published in the next weeks, with the first part of the series debuting this week. The term &#8220;legacy&#8221; in the title refers to code developed for PHP when PHP version 3 was common on most servers, and PHP4 was right around the corner, mostly used by &#8220;early adopters&#8221;. Wikipedia of course offers a definition of <a href="http://en.wikipedia.org/wiki/Legacy_code">legacy code</a> for us to read, and you will probably discover a few of those common criteria in this series.</p>

<p><span id="more-258"></span></p>

<p>Here is what you can expect to see:</p>

<ul>
<li><a href="http://www.marenkay.com/features/porting-legacy-php-apps-spotting-legacy-apps/">Part One: Spotting legacy apps</a>.
The first part of the series will briefly discuss what a legacy PHP application actually is, and how you can run a quick check on your own applications to see if they qualify for being &#8220;dinosaurs&#8221;.</li>
<li><a href="http://www.marenkay.com/features/porting-legacy-php-apps-rewrite-refactor-refine/">Part Two: Rewrite, refactor, refine</a>.
Since we identified what apps are considered legacy apps, it is time to consider the available options. What&#8217;s worth the effort, and what not? </li>
<li><strong>Part Three: How to move your app forward.</strong>
Now that we know more about the available options for making changes to our beloved app, we can take a close look at the type of code which needs to be updated.</li>
<li><strong>Part Four: It&#8217;s all in the process.</strong>
Making changes to your app should not be done without a plan. Part four will supply the tools and tasks for you to make your plan.</li>
<li><strong>Part Five: The foundation.</strong>
With PHP5 and future versions you do have the unique option to apply common development methods to your workflow. Test-driven, agile development is not restricted to Ruby and Ruby on Rails, it&#8217;s an option for PHP5, too. We&#8217;ll explore available options, both available frameworks, and building your own framework.</li>
<li><strong>Part Six: Breathing new life into the beast.</strong>
This is all about <a href="http://gettingreal.37signals.com/">Getting Real</a>. By now you should have a plan, and the tools to start refreshing you app, and we&#8217;ll make the initial steps together.</li>
<li><strong>Part Seven: Are you prepared?</strong>
Now that our app has made its&#8217; steps into the future, we will take a look at the tasks we will face, once PHP5 leaves the stage, and makes room for PHP6. of course, assuming your customers still love your refreshed app.</li>
<li><strong>Part Eight: Final thoughts.</strong>
This is it. The last part of the series will feature a few recommendations and probably wise words by me featuring insights gathered during my own endeavors with legacy PHP apps.</li>
</ul>

<p>Code examples of legacy code and new code will be supplied with each part, and some will probably be taken from a few legacy apps that I currently work on as part of my contracted work.</p>

<p>See you back in a couple of days for part one of our series.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marenkay.com/featured/porting-legacy-php-apps-the-series/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Multiboxing: Deciding what your goals are</title>
		<link>http://www.marenkay.com/featured/multiboxing-deciding-what-your-goals-are/</link>
		<comments>http://www.marenkay.com/featured/multiboxing-deciding-what-your-goals-are/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 11:27:59 +0000</pubDate>
		<dc:creator>Daniel S. Reichenbach</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Goals]]></category>
		<category><![CDATA[Multiboxing]]></category>

		<guid isPermaLink="false">http://www.marenkay.com/?p=205</guid>
		<description><![CDATA[At first glance, multiboxing may seem like a convenient option, to conquer World of Warcraft, and especially the endgame. But no option comes without a price tag, and multiboxing is no exception. Before you create your team, you will have to make a decision what kind of player you want to be. So you have [...]]]></description>
			<content:encoded><![CDATA[<p>At first glance, multiboxing may seem like a convenient option, to conquer <a href="http://www.worldofwarcraft.com/">World of Warcraft</a>, and especially the endgame. But no option comes without a price tag, and multiboxing is no exception. Before you create your team, you will have to make a decision what kind of player you want to be.</p>

<p><span id="more-205"></span></p>

<p>So you have decided that multiboxing is the path you want to conquer, and have decided to create five characters? But what kind of multiboxer are you? I am not referring to being a casual gamer or a hardcore player here. It is not your gaming style that matters, it is your goals and intentions which we are looking into.</p>

<p>When I started my team a few months ago, this was the first question that was bothering me. Reading through the <a href="http://www.dual-boxing.com/">multiboxing forums</a>, it was apparent that numerous intentions for becoming a multiboxer exist. Before starting to play my characters, it felt important to decide what I wanted to achieve in the endgame.</p>

<p>I basically had these options to chose from:</p>

<ul>
<li>Player vs. Player: there are quite a few battlegrounds to conquer and with Lake Wintergrasp, PvP in the world finally has become a <em>real</em> thing, too.</li>
<li>Arenas: Arena games limit PvP to a fixed setting, and might offer another choice. Titles, great rewards, and a challenge to overcome.</li>
<li>Achievements: a new addition with <em>Wrath of the Lich King</em> and one that leads to nice rewards, too. It seems like a giant world explorer book. Completing achievements definitely is a sign of exploring the world.</li>
<li>Quests: Have you ever browsed one of the various WoW databases looking for quests? There are thousands of them and achievements like those for completing 1k, 2k, or 3k quests look achievable.</li>
<li>Dungeons: Lore in World of Warcraft expands through quests, but just like it was from the very beginning of the game, most quests that continue game lore will lead you to dungeons. Most final quests will end in a dungeon. Prior to <em>The Burning Crusade</em> dungeons like Blackrock Depths, Lower Blackrock Spire, Upper Blackrock Spire, Stratholme, Scholomance, and Dire Maul presented a great amount of story lines, and this trend continued in the game addons.</li>
<li>Professions: Making money is a viable option, too. Professions have received a great amount of love from Blizzard and with <em>Wrath of the Lich King</em> there are quite a few dailies to complete for gold, and every profession now has recipes that can be crafted to sell them on the auction houses for profits.</li>
</ul>

<p>Looking at that list, I crossed PvP and arenas off the list. To be honest, I liked the old PvP system as it existed prior to the Burning Crusade, because engaging in a battleground had a result. Both titles and rewards did come with a meaning. It <em>was</em> fun. Now battlegrounds mostly feel like a grind for gear, and nobody really cares if battleground goals are achieved. I really miss the epic Alterac battles with people working to achieve quests for bonuses. Arena gaming does not really make a difference. It limits the amount of players and classes, and thus reduces everything to maths and gear.</p>

<p>This left me with achievements, quests, and dungeons. If you check <a href="http://www.wowhead.com/?achievements">WoWHead</a> there are close to 1k of achievements for almost anything you can do in World of Warcraft.</p>

<ul>
<li>General achievements: this includes mostly easy to achieve stuff like picking up various vanity pets, mounts, reaching specific levels, learning various skill levels, or owning items that only have been available for a limited time frame.</li>
<li>Quests: easy one. Reach a specific amount of quests per zone or continent for an achievement, and you&#8217;re done. Additional gimmicks include money owned through quests, and the number of quest. Personally I think the Loremaster achievements are tough but very tempting.</li>
<li>Exploration: discovering zones and all their sub-zones&#8230; does not sound like hard work? Well, try to log in to one of your first characters. If happen to have one from the release of WoW in 2005, you will notice how <em>many</em> sub-zones you missed.</li>
<li>PvP: this is one, where I am not sure if it&#8217;s for good or for bad. Some achievements are easy, just run arena or battleground matches over and over to get them done. Others&#8230; smell like a lot of luck and work.</li>
<li>Dungeons &amp; Raids: just run every available dungeon and raid in game. Some may need a normal and heroic run, and some even might need specific strategies. Not really hard but rather time consuming. At least you might get a chance to enter old world dungeons and raids like Blackwing Lair for the achievements. Those are still fun.</li>
<li>Professions: awesome! Wanted to see how many fish you caught? How often you consumed cooked food? Bandages, crafted gear, it&#8217;s all here. Most of these achievements will happen to appear as you continue to play your character. There is no chance to avoid those but to not learn any profession.</li>
<li>Reputation: <em>cough</em> prior to the first game expansion reputation was pure grind. With the Burning Crusade, this was eased, and with Wrath of the Lich King, there hardly is any grinding left. Except for a few old world reputations like the Timbermaw Furbolgs. If you want something hard, try getting as many reputations as possible up to exalted. This alone might take a few months.</li>
<li>World events: this one is a bit misleading. Probably &#8220;Seasonal events&#8221; would have been a more suitable title. You will only find achievements for recurring events in here.</li>
<li>Feats of Strength: yes, this is where world events appear. The Scourge Invasion, Ahn&#8217;Qiraj, etc. Plus various achievements for things that require a lot of work, or even money. Think of Collector&#8217;s Edition pets, Trading Card Game, and others.</li>
</ul>

<p>Once I had digged through the list, I decided to just focus on achievements. Getting as many as possible would naturally lead me to doing all quests, and stepping into all of those dungeons and raids.</p>

<p>So, what is your game? What part of WoW does entertain you the most? For me, I can clearly state that I love to explore the whole world with all that&#8217;s inside.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marenkay.com/featured/multiboxing-deciding-what-your-goals-are/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>phpArmory 0.4.2 &#8211; &#8220;Fishing Extravaganza&#8221; released</title>
		<link>http://www.marenkay.com/tipsresources/programming/phparmory-042-fishing-extravaganza-released/</link>
		<comments>http://www.marenkay.com/tipsresources/programming/phparmory-042-fishing-extravaganza-released/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 15:07:24 +0000</pubDate>
		<dc:creator>Daniel S. Reichenbach</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[phpArmory]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Release]]></category>

		<guid isPermaLink="false">http://www.marenkay.com/?p=207</guid>
		<description><![CDATA[This release should fix issues with character that could not be retrieved from the armory due to special characters in realm or character names, as reported by several users. There have been some minor tweaks to existing functions. Further details, the download it after the jump. 0.4.2 &#8211; &#8220;Fishing Extravaganza&#8221; &#8211; Dec 17, 2008 This [...]]]></description>
			<content:encoded><![CDATA[<p>This release should fix issues with character that could not be retrieved from the armory due to special characters in realm or character names, as reported by several users. There have been some minor tweaks to existing functions. Further details, the download it after the jump.</p>

<p><span id="more-207"></span></p>

<h2>0.4.2 &#8211; &#8220;Fishing Extravaganza&#8221; &#8211; Dec 17, 2008</h2>

<p>This release should fix issues with character that could not be retrieved from the armory due to special characters in realm or character names.</p>

<h3>Bugs squashed</h3>

<ul>
<li>phpArmory5Cache: the setCachedData(&#8230;) function was called without prior checks if there <em>was</em> any valid data to cache. This has been fixed.</li>
<li>phpArmory5: Strings used in URLs do not need a manual replacement of the space character. urlencode() handles this for us already.</li>
<li>phpArmory5: fixed an issue in __construct, where required PHP extension have not been checked properly. Thanks to Gizzmo for the hint.</li>
</ul>

<h3>Features added</h3>

<ul>
<li>phpArmory5: added getAnyData($searchType = NULL, $objectName = NULL, $filter = NULL). $searchType can be any of &#8220;arenateams&#8221;, &#8220;characters&#8221;, &#8220;guilds&#8221;, &#8220;items&#8221;. $filter needs to be an associative array of filter properties. For now, try out the armory item search page to see valid filter options.</li>
<li><p>phpArmory5: added a third parameter to getCharacterData for retrieving only the basic character data. Defaults to false. Use the following to get basic character data only:</p>

<pre><code class="php">$character = $phpArmory-&gt;getCharacterData($characterName = "Char", $realmName = "Realm", $onlyBasicData = true)
</code></pre></li>
</ul>

<h2>Download</h2>

<p>Enjoy the 0.4.2 release, and either grab <a href="http://www.marenkay.com/wp-content/uploads/2008/12/phparmory-042.zip">phparmory-0.4.2.zip</a> or <a href="http://www.marenkay.com/wp-content/uploads/2008/12/phparmory-042tar.gz">phparmory-0.4.2.tar.gz</a>. Please note that all PHP files are formatted with Unix line endings, as I am mostly a Linux / Mac geek.</p>

<p>Feel free to leave a comment if you should end up having trouble with the classes.
phparmory-042tar</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marenkay.com/tipsresources/programming/phparmory-042-fishing-extravaganza-released/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>A few more thoughts on the WoW database</title>
		<link>http://www.marenkay.com/tipsresources/application-development/a-few-more-thoughts-on-the-wow-database/</link>
		<comments>http://www.marenkay.com/tipsresources/application-development/a-few-more-thoughts-on-the-wow-database/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 12:53:01 +0000</pubDate>
		<dc:creator>Daniel S. Reichenbach</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Items]]></category>
		<category><![CDATA[NPCs]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Quests]]></category>
		<category><![CDATA[Spells]]></category>

		<guid isPermaLink="false">http://www.marenkay.com/?p=185</guid>
		<description><![CDATA[It seems like my post on an open source WoW database has received a bit more attention than I expected. Let me share a few additional thoughts with you. The database client While I am currently using .NET 2.0 / C# to prototype a client which takes care for downloading and updating the WoW addon [...]]]></description>
			<content:encoded><![CDATA[<p>It seems like <a href="http://www.marenkay.com/tipsresources/application-development/an-open-source-world-of-warcraft-database/">my post</a> on an open source WoW database has received a bit more <a href="http://www.wowinsider.com/2008/12/08/creating-an-open-source-wow-database/">attention</a> than I expected. Let me share a few additional thoughts with you.</p>

<p><span id="more-185"></span></p>

<h2>The database client</h2>

<p>While I am currently using .NET 2.0 / C# to prototype a client which takes care for downloading and updating the WoW addon for data gathering, I am of course aware that .NET 2.0 is not available on every platform where you can play World of Warcraft. There is Windows in various incarnations, and there is Mac OS X for us to play the game on, and some people even use Linux to play. I probably have not mentioned this, but I am using all of these platforms to play the game, and thus I am very interested in making the database client work on all of these platforms.</p>

<p>My current plan is to finish my .NET prototype, as I need some quick test tool, to define and build a proper web interface for managing the WoW addon, and to test the client updater. Once this is done, and the web interface works, I plan to turn the whole client functionality into a plain C++ library, which can be build and used on Windows, Mac OS X and Linux.</p>

<p>For now the library is supposed to contain the following features:</p>

<ul>
<li>Parsing the WDB cache: as many players know, the game client uses a simple data cache for books you have read, creatures you saw, game objects seen and used, items seen, and quests done. This data will be required for several reasons. E.g. if we want to display rendered views, we need the data from the WDB cache files.</li>
<li>Detecting WoW: of course, the library needs to find WoW on your system, and there are various different methods to do so. WoW is e.g. installed in different ways for 32-bit and 64-bit operating systems.</li>
<li>Parsing the addon <a href="http://www.lua.org/">Lua</a> data: while this is not necessary it would be beneficial to embed <a href="http://www.lua.org/">Lua</a> into the library. This would allow us to validate the saved <a href="http://www.lua.org/">Lua</a> data, and it might provide options for blocking invalid data, too. Why should we upload broken data?</li>
<li>Authentication: I would love to have the database site requiring a login. Why? Because it would be great to give credits where they are due. If someone contributes to the database, it should be recorded and visible in some place.</li>
<li>Update management: we need to keep up-to-date, and this includes both the database client, and our WoW addon. The game client changes with every release, and bugs are everywhere. There is no development method that results in zero bugs.</li>
</ul>

<p>On top of the library custom GUI clients can be used for each platform. On Windows, we could use plain C++ with MFC or a .NET GUI, on Mac OS X we can use <a href="https://developer.apple.com/referencelibrary/Carbon/">Carbon API</a> to integrate into the system.</p>

<p>Of course, suggestions are welcome.</p>

<h2>The database server</h2>

<p>Once of the things I have considered over the last few days was to turn the server into something that could run in a distributed fashion, much like the version control system <a href="http://git-scm.com/">Git</a> which I use for my own projects at <a href="http://github.com/danielsreichenbach/phparmory">home</a> and at work. Concerns have been raised that the current databases are commercial because you will have large hosting bills.</p>

<p>But what if the database server would have a central server somewhere, and all available installations would connect to this server for data sharing? Thus every installation (e.g. on guild sites) could contribute their data even without knowing the main server, and every installation would benefit from uploads.</p>

<p>Anyway, the only thing I have decided on yet is that the database server will be developed using a model-view-controller pattern. This may be done with <a href="http://www.asp.net/">ASP.NET</a>, on PHP using the <a href="http://framework.zend.com/">Zend Framework</a>, or on Python using <a href="http://djangoproject.com">Django</a>, or on Ruby using the famous <a href="http://www.rubyonrails.org/">Ruby on Rails</a>.</p>

<p>Personally I would prefer a Python or Ruby based solution. But still, for my prototyping I will stick to using PHP and the Zend Framework for one simple reason: this solution works on most hosted environments. You will not depend on owning a root server (which not everyone can afford).</p>

<h2>The code</h2>

<p>There already is a bit of code, and I am working hard to get this in a readable state and documented. It will appear in my <a href="http://github.com/danielsreichenbach/phparmory">GitHub account</a> in a few days.</p>

<p>Contributions are welcome, in the beginning I would be very interested to hear what addon developers need. E.g. what would systems like <a href="http://wow.curse.com/downloads/wow-addons/details/quest-helper.aspx">QuestHelper</a>, <a href="http://www.tekkub.net/addons/TourGuide">TourGuide</a>, or <a href="http://www.wowinterface.com/downloads/info7017-LightHeaded.html">LightHeaded</a> need? After all, quest guides are the simplest form of giving data back to the community, thus you would want to have it done right from the beginning.</p>

<p>For now, I am considering XML output in a format similar to the armory format, but would that work for addon developers?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marenkay.com/tipsresources/application-development/a-few-more-thoughts-on-the-wow-database/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>An Open Source World of Warcraft database?!</title>
		<link>http://www.marenkay.com/tipsresources/application-development/an-open-source-world-of-warcraft-database/</link>
		<comments>http://www.marenkay.com/tipsresources/application-development/an-open-source-world-of-warcraft-database/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 21:31:32 +0000</pubDate>
		<dc:creator>Daniel S. Reichenbach</dc:creator>
				<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Items]]></category>
		<category><![CDATA[NPCs]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Quests]]></category>
		<category><![CDATA[Spells]]></category>

		<guid isPermaLink="false">http://www.marenkay.com/?p=173</guid>
		<description><![CDATA[During my adventures with the phpArmory class I have taken a look at WoW databases out there. I browsed through loads of sites to see if any of them would be Open Source or at least under a free license. The database contestants Ever since World of Warcraft became public there have been websites out [...]]]></description>
			<content:encoded><![CDATA[<p>During my adventures with the phpArmory class I have taken a look at WoW databases out there. I browsed through loads of sites to see if any of them would be Open Source or at least under a free license.</p>

<p><span id="more-173"></span></p>

<h2>The database contestants</h2>

<p>Ever since World of Warcraft became public there have been websites out there, which gathered game data by using a <a href="http://www.lua.org/">Lua</a> addon and some sort of data uploader. In the beginning there was <a href="http://thottbot.com">one database site</a> and nowadays there are many.</p>

<ul>
<li><strong>Thottbot</strong>: Probably the father of all WoW database websites. <a href="http://thottbot.com/">Thottbot.com</a> started somewhere during the World of Warcraft Closed Beta and has been a primary source of information for many players. Quests, Items, Maps, NPCs, Spells, and more await the curious player, and closely coupled with Thottbot comes Cosmos, a User Interface modifcation pack, to which players were drawn in the early days of WoW aka. the days when World of Warcraft was not available in any localization.</li>
<li><strong>Allakhazam</strong>: Allakhazam entered the market of WoW databases a bit later. They already had experience with this thing, as they started with an Everquest database. Their <a href="http://wow.allakhazam.com/">WoW site</a> has gone through various iterations, and AFAIK was the first database site to offer support for the various localizations in which WoW was made available. Another feature spearheaded by them was the monitoring of Auction House prices for items. Yay for that!</li>
<li><strong>Wowguru</strong>: Another side project of an MMO database site, and one that initially had some success. <a href="http://www.woguru.com/">WoWguru.com</a> entered the scene in Summer 2005, and later spearheaded with features like honor tracking, and most prominently with monitoring the individual realm status during the <a href="http://www.wowwiki.com/Gates_of_Ahn'Qiraj">Ahn&#8217;Qiraj War Effort</a>.</li>
<li><strong>Wowhead</strong>: Here comes an impressive contestant. Ever since their launch <a href="http://www.wowhead.com/">Wowhead</a> impressed with an information-centred design that helped users in finding the information needed very quick. Wowhead comes with a well made <a href="http://www.lua.org/">Lua</a> addon, and a sleek uploader. Once of their primal bonusses was that they had been very active with making their <a href="http://www.lua.org/">Lua</a> addon work for the Public Test Realms, and soon this resulted in Wowhead leading the WoW databases. Features like a well-designed commenting system, their item and character preview, and others still remain on top of the list.</li>
<li><strong>WoWDB</strong>: The latest entry in the list of contestants. Made by the MMO portal site Curse (which alos provides hosting for most WoW <a href="http://www.lua.org/">Lua</a> addons), <a href="http://www.wowdb.com/">WoWDB</a> entered the scene with some features that Wowhead could not offer: item comparison, wishlists, and a look more oriented on the WoW look. AFAIK their character preview was first, and Wowhead added that a bit after them.</li>
</ul>

<h2>What do all these databases share?</h2>

<p>As it seems, the market for World of Warcraft databases is a hot one. Even four years after WoW made its&#8217; initial release. And as we can see by the release of new and different databases, none of the contestants listed above yet has managed to reach a state where WoW players are satisfied.</p>

<p>If we compare the features of all available WoW databases we can see that it&#8217;s not all about features, but about design and usability, too. Some features did not really make it into the market, as players did not seem to accept them.</p>

<ul>
<li>Auction House monitoring: Yes, it is there, and some people might use it, but apparently this is not interesting or good enough to be used anywhere else than on Allakhazam. Apparently using spreadsheets still is superior. Also, there is <a href="http://auctioneeraddon.com/">Auctioneer</a> which works in-game and automates a lot of the process.</li>
<li>Crafting requirements: Wowguru introduced this quite some time ago, and I thought it was a great feature. When displaying a crafted item, you could see all the items required to create it, summing up the total vendor price for all needed materials. Nice, but oviously not needed. Gold seems to be an irrelevant factor, and thus only material lists survived.</li>
</ul>

<p>This leaves us with a list of features that seem mandatory for a mature World of Warcraft content database.</p>

<ul>
<li><strong>Searching</strong>: Of course, searching is mandatory. Every site has it, and the only difference to be found is in the way search results are returned. Older sites just take an argument to look for and return an result page with any matching object, Wowhead and WoWDB sport a bit more elegance and make use of AJAX to return drop down lists with matching data instead of requiring you to wait for a result page.</li>
<li><strong>Filtering</strong>: Even though the official forums are full of people demanding more content because the existing content would not be sufficient, a look at a database of your choice proves the opposite. There <em>is</em> lots of game content, and there is much to be seen. Even after four years, I am sure you will find content that you have not seen yet, even if you started your character in February 2005. Thus most database allow you to filter for various parameters, and most important: you can apply multiple filters to <em>any</em> kind of data. Sleak and useful.</li>
</ul>

<h2>And why would you want that Open Source&#8217;d?</h2>

<p>It&#8217;s simple. Many people contribute data to these databases, and only with your or my contributions of data gathered while playing the game, those databases exist. It&#8217;s a community effort, just like the game itself is meant to be some sort of social community. But why are all of these databases closed, or commercial? Some even want you to buy premium subscriptions to access guides or more data.</p>

<p>Now what if there was an Open Source database for World of Warcraft? Where you could not only contribute data you gathered while playing, but also access that data or even download it to your computer and do something with it? Or where you could see what you have gathered while playing?</p>

<p>So I have decided to give myself a new pet project to work on, and it will become Open Source very soon, once I have ironed out the basic details. Work already begun, and a very basic implementation is there. The tools I have used are:</p>

<ul>
<li>Visual C# 2008 Express Edition to build a .NET 2.0 client application which handles uploads,</li>
<li><a href="http://www.lua.org/">Lua</a> to write a WoW addon which gathers data while you play,</li>
<li><a href="http://framework.zend.com/">Zend Framework</a> and <a href="http://www.doctrine-project.org/">Doctrine ORM</a> to write the server-side backend which accepts uploads.</li>
</ul>

<p>The process for now is very simple:</p>

<ul>
<li>the .NET client will parse the WoW data cache (which you will find in your WoW installation directory under WDB/<em>your-locale</em>/*.wdb),</li>
<li>it can show you the contents of your WDB files, e.g. you can see which NPCs you have seen, or what books you have read,</li>
<li>it will parse the saved <a href="http://www.lua.org/">Lua</a> data generated by the addon, and can show what data besides your WDB cache is there,</li>
<li>and it can convert both WDB and <a href="http://www.lua.org/">Lua</a> data to XML,</li>
<li>and finally it can upload the data to my server (GZipped of course, to reduce bandwidth usage).</li>
</ul>

<p>Parsing the data is something that will be done next. For now my server-side application only handles storing the uploaded data, and manages updates of the client. Not very much, but at least my data is stored. Parsing will be a bit more work since I have to make a modular parser that can deal e.g. with different data formats, as the data formats may and surely will change with every WoW client update.</p>

<p>What do you think? Would you use an Open Source World of Warcraft database, where you have full access to the data you contributed? Would you like to download contributed data in a parsed format, perhaps as XML files to reuse them on your guild website or your blog?</p>

<p>More on the project soon, after the finishing touches have been put on the data client. Screenshots coming soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marenkay.com/tipsresources/application-development/an-open-source-world-of-warcraft-database/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>phpArmory &#8211; What features do you want to see?</title>
		<link>http://www.marenkay.com/tipsresources/programming/phparmory-what-features-do-you-want-to-see/</link>
		<comments>http://www.marenkay.com/tipsresources/programming/phparmory-what-features-do-you-want-to-see/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 21:39:16 +0000</pubDate>
		<dc:creator>Daniel S. Reichenbach</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[phpArmory]]></category>
		<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.marenkay.com/?p=167</guid>
		<description><![CDATA[With phpArmory 0.4.1 released, I am currently investigating which features to add next. Thus it is your turn. Tell me what features you like, does the API work for you? Do you see anything that could be improved? First, let us check what we currently have in store: Characters: Retrieve full character details including stats, [...]]]></description>
			<content:encoded><![CDATA[<p>With <a href="http://www.marenkay.com/tipsresources/programming/phparmory-041-call-to-arms-released/">phpArmory 0.4.1</a> released, I am currently investigating which features to add next. Thus it is your turn. Tell me what features you like, does the API work for you? Do you see anything that could be improved?</p>

<p><span id="more-167"></span></p>

<p>First, let us check what we currently have in store:</p>

<ul>
<li><strong>Characters</strong>: Retrieve full character details including stats, equipped items, skills, reputation, buffs,</li>
<li><strong>Items</strong>: With complete stats, reagent details, related quests,</li>
<li><strong>Guilds</strong>: List of members,</li>
<li><strong>Caching</strong>: Caches results of requests to improve performance</li>
<li><strong>Localisation</strong>: Results returned in the armory&#8217;s supported languages from localised servers.</li>
</ul>

<p>This seems like the basics done. Personally I would love to add the following stuff:</p>

<ul>
<li><strong>Arena teams</strong>: it&#8217;s on the TODO list, and will be released after December 17th, 2008. Why? Because arena season 5 will start then, and only then I can get arena team data from the armory to test and implement this.</li>
<li><strong>Searching</strong>: Query the armory for any kind of data.</li>
<li><strong>Guild banks</strong> and <strong>calendars</strong>: You have guessed by the name, don&#8217;t you?</li>
</ul>

<p>Searching is pretty simple to implement, as we can base upon getXmlData( ..) and search for arena teams, characters, guilds, and items easily. We can even filter the results by any desired parameter.</p>

<p>Now when it comes to guild banks and calendars, things get a bit spooky. Both features can be implemented, but you would have to trust phpArmory to not do bad things with your account data, as the class would need to authenticate using your account data on the armory site in order to retrieve the guild bank contents, or your calendar.</p>

<p>Here is your chance, to influence future releases. Raise your voice, and share your thoughts.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marenkay.com/tipsresources/programming/phparmory-what-features-do-you-want-to-see/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>phpArmory 0.4.1 &#8211; &#8220;Call to Arms&#8221; released</title>
		<link>http://www.marenkay.com/tipsresources/programming/phparmory-041-call-to-arms-released/</link>
		<comments>http://www.marenkay.com/tipsresources/programming/phparmory-041-call-to-arms-released/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 17:53:24 +0000</pubDate>
		<dc:creator>Daniel S. Reichenbach</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[phpArmory]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Release]]></category>

		<guid isPermaLink="false">http://www.marenkay.com/?p=157</guid>
		<description><![CDATA[Today the World of Warcraft armory has been updated to reflect the new character features introduced with Patch 3.0.2 &#8211; &#8220;Echoes of Doom&#8221; &#8211; and the Wrath of the Lich King expansion. phpArmory 0.4.1 &#8211; &#8220;Call to Arms&#8221; (named after the Battleground holidays ) is out and supports the added character achievements and statistics. 0.4.1 [...]]]></description>
			<content:encoded><![CDATA[<p>Today the <a href="http://www.wowarmory.com/">World of Warcraft armory</a> has been updated to reflect the new character features introduced with Patch 3.0.2 &#8211; &#8220;Echoes of Doom&#8221; &#8211; and the <a href="http://www.worldofwarcraft.com/wrath/">Wrath of the Lich King</a> expansion. phpArmory 0.4.1 &#8211; &#8220;Call to Arms&#8221; (named after the <a href="http://www.wowwiki.com/Battlegrounds_Holiday">Battleground holidays</a> ) is out and supports the added character achievements and statistics.</p>

<p><span id="more-157"></span></p>

<h2>0.4.1 &#8211; &#8220;Call to Arms&#8221; &#8211; Nov 26, 2008</h2>

<p>The <a href="http://www.wowarmory.com/">World of Warcraft armory</a> has received quite a
few improvements, making it feature complete with the added character data from
the &#8220;Wrath of the Lich King&#8221; expansion.</p>

<h3>Features added</h3>

<ul>
<li><p>getCharacterData($characterName, $realmName) will now return an array which
contains character achievements and statistics.</p>

<pre><code class="php">$character = Array
(
    [characterinfo] =&gt; Array
        (
                ...
        )

    [reputationtab] =&gt; Array
        (
                ...
        )

    [skilltab] =&gt; Array
        (
                ...
        )

    [talenttab] =&gt; Array
        (
                ...
        )

    [achievements] =&gt; Array
        (
                ...
        )

    [statistics] =&gt; Array
        (
                ...
        )

    [armorypatchlevel] =&gt; 030003
)
</code></pre></li>
</ul>

<h3>Download</h3>

<p>Enjoy the 0.4.1 release, and either grab <a href="http://www.marenkay.com/wp-content/uploads/2008/11/phparmory-041.zip">phparmory-0.4.1.zip</a> or <a href="http://www.marenkay.com/wp-content/uploads/2008/11/phparmory-041tar.gz">phparmory-0.4.1.tar.gz</a>. Please note that all PHP files are formatted with Unix line endings, as I am mostly a Linux / Mac geek.</p>

<p>Feel free to leave a comment if you should end up having trouble with the classes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marenkay.com/tipsresources/programming/phparmory-041-call-to-arms-released/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
