<?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>rudi.me</title>
	<atom:link href="http://rudi.me/feed/" rel="self" type="application/rss+xml" />
	<link>http://rudi.me</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Mon, 01 Feb 2010 18:34:41 +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>Warcraft Characters: v2.0 and beyond</title>
		<link>http://rudi.me/2009/12/warcraft-characters-v2-0/</link>
		<comments>http://rudi.me/2009/12/warcraft-characters-v2-0/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 04:49:32 +0000</pubDate>
		<dc:creator>Rudi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://rudi.me/word/?p=75</guid>
		<description><![CDATA[Warcraft Characters was my first iPhone project, which let users see their character stats on the iPhone. This post focuses on the &#8220;golden age&#8221; that was the second version, and plans for the third. Here&#8217;s what happened in the previous episode&#8230; A mild-mannered, unassuming web developer attempts to break into Obj-C/Cocoa dev territory by making [...]]]></description>
			<content:encoded><![CDATA[<p>Warcraft Characters was my first iPhone project, which let users see their character stats on the iPhone. This post focuses on the &#8220;golden age&#8221; that was the second version, and plans for the third.</p>
<p><span id="more-75"></span></p>
<h3>Here&#8217;s what happened in the previous episode&#8230;</h3>
<p>A mild-mannered, unassuming web developer attempts to break into Obj-C/Cocoa dev territory by making an iPhone Warcraft Characters app. Also, JC Denton escapes, Babylon 5 is destroyed, and the princess ends up in another castle.</p>
<h3>Version-that-does-things-right-this-time</h3>
<div id="attachment_92" class="wp-caption alignleft" style="width: 210px"><a href="http://rudi.me/word/wp-content/uploads/2009/12/characters_v2_list.PNG"><img src="http://rudi.me/word/wp-content/uploads/2009/12/characters_v2_list-200x300.PNG" alt="Tabs on bottom and edit button were new additions." title="Characters list (v2)" width="200" height="300" class="size-medium wp-image-92" /></a><p class="wp-caption-text">Tabs on bottom and edit button were new additions.</p></div>
<p>After Characters v1.x was out for a few weeks and I enjoyed the high of having an application grow in popularity, I wanted to do another version to bring the product closer to what I felt it should be (you know, that original dream which made me make an app in the first place) as well as address features requested from users&#8230; And, *cough*, fix bugs.</p>
<p>The great thing about developing a second version is that you get to learn from previous experience: You see what could be done better, which patterns work, which should be rewritten, and what should be tossed out. Thanks to the first version, I was now a level 20 coder, instead of level 5.</p>
<p>I started the new version with a blank XCode project since I wanted to lay out structure differently.  And when I say differently, I really mean better and more maintainable. The new version wasn&#8217;t just about a different look and internal tweaks &#8211; it was a brand new project that benefited from the mis-steps of my first try.</p>
<p>Let me illustrate that with this example: The first version had simple download classes.  It would either successfully download a character, or it would fail. There were no options to notify the user how the download was progressing, more elegant handling of possible failure, or the ability to let the user browse around while different parts of their character info were being downloaded. </p>
<p>In the new version, Characters 2.x, these issues were addressed by adding a queue downloader class that handled prioritizing of approximately 40 downloadable items per character, notify views with progress so the user can still use the interface, and is much better equiped to handle and notify views of possible errors.</p>
<p>Hands down, my two favorite parts of making the second version were the improved code architecture, and tons of new additions to the user interface. More on this below.</p>
<h3>Character view &#8211; now twice the awesomeness</h3>
<p>The Character view was expanded with reputation and an items pane, and other panes were revamped. </p>
<p>This time, I used programmatically created progress bars, used for progressions, reputation, health, mana, and so on. This was officially the first time I dabbled into the CoreGraphics framework, and I got out of it alive. Every time I wanted to create a bar, I&#8217;d just call something like this:</p>
<pre class="brush: objc; gutter: false; toolbar: false;">
[self drawBarInsideView:cell.contentView
at:CGPointMake(110.0, 10.0)
withStyle:[factionDetail objectForKey:@&quot;barStyle&quot;]
withLabel:[factionDetail objectForKey:@&quot;barLabel&quot;]
withValueAsPercentage:[factionDetail objectForKey:@&quot;barValuePercentage&quot;]];
</pre>
<div id="attachment_95" class="wp-caption alignleft" style="width: 210px"><a href="http://rudi.me/word/wp-content/uploads/2009/12/characters_v2_sheet.PNG"><img src="http://rudi.me/word/wp-content/uploads/2009/12/characters_v2_sheet-200x300.PNG" alt="Character sheet was cleaned up in this version, but no radical changes happened." title="Character sheet" width="200" height="300" class="size-medium wp-image-95" /></a><p class="wp-caption-text">Character sheet was cleaned up in this version, but no radical changes happened.</p></div>
<p>Compare this to calling a photoshoped image each time I needed to draw a bar.  Yay for reusable code!</p>
<p>The Items pane brought the number of items needed to be download from 2 (portrait, stats) to at least 40! Each item download required the image, data file for name, and description window which I&#8217;d save as a local web page. Using web code from the Armory for item descrpitions cut development time to a few hours for the Items pane, which is huge time-saver.</p>
<p>Also, I couldn&#8217;t let the user wait for all items to download, so I set the download queue object to notify the item list every few seconds, leading to nice gradual population of list items.</p>
<h3>Outside character view &#8211; revamped as well</h3>
<div id="attachment_94" class="wp-caption alignleft" style="width: 210px"><a href="http://rudi.me/word/wp-content/uploads/2009/12/characters_v2_search.PNG"><img src="http://rudi.me/word/wp-content/uploads/2009/12/characters_v2_search-200x300.PNG" alt="New search feature took away the need to type in the server name." title="Characters search (v2)" width="200" height="300" class="size-medium wp-image-94" /></a><p class="wp-caption-text">New search feature took away the need to type in server name.</p></div>
<p>A character search used armory search page feature, which was a huge step ahead of having to type in a server name. I didn&#8217;t want to take too much time working on a prettier search list (such as class and race icons), so I pushed it to version 3. </p>
<p>Of course, I was much happier with this release. Feedback was mostly great, since I managed to add most of the features that were requested (items, rep, better stats, search). I said &#8220;mostly great&#8221; since I had requests for anything from talent trees (didn&#8217;t want to delay release for weeks just to make talent tree, as gorgeous they are) to 3D character model viewer (if I could make 3D model viewer at that time, I would be making an iPhone game instead).</p>
<h3>The iPhone App Store &#8211; The Smallest Middleman You Can Get</h3>
<div id="attachment_93" class="wp-caption alignleft" style="width: 210px"><a href="http://rudi.me/word/wp-content/uploads/2009/12/characters_v2_items.PNG"><img src="http://rudi.me/word/wp-content/uploads/2009/12/characters_v2_items-200x300.PNG" alt="Item list pulled info dynamically, so you could see it update real-time." title="Character items (v2)" width="200" height="300" class="size-medium wp-image-93" /></a><p class="wp-caption-text">Item list pulled info dynamically, so you could see it update real-time.</p></div>
<p>I love the iPhone App Store.  When you&#8217;re a hobby developer, it&#8217;s great that all the work of distributing and deploying an app is taken off your shoulders. It&#8217;s also interesting to see how the App Store is growing and evolving over time, and I can&#8217;t wait to see what it will be like in a few years. All this, of course, with faith that it *will* get better &#8211; currently, many developers complain that it&#8217;s a mixed bag.</p>
<p>I did, however, have a review process snafu with it at one point: I made a minor update that added support for Death Knights and level 80 portraits when Wrath of the Lich King came out. While the actual update was minor, it had to get out fast so the users wouldn&#8217;t have issues with missing DK talent labels or new lvl 80 portraits. This update was rejected on the basis of &#8216;not adhere[ing] to the iPhone Human Interface Guidelines&#8217; since the search view didn&#8217;t notify the user when a network connection was not available. Fair enough, but I wasn&#8217;t thrilled that this happened when a bug update needed to go out fast, especially when the previous 2 minor bug releases with exactly same search pane were approved.</p>
<h3>Version 3 &#8211; where did it go?</h3>
<p>Midway through developing version 3, I got the cease-and-desist letter from Blizzard, which signaled to me that their iPhone app was on the way. Oddly, this was a relief &#8211; it meant that a Warcraft app would come out with a *true* armory integration, and I was ready to work on something of my own. </p>
<p>Here are the few screenshots of the  work-in-progress for the v3&#8230;</p>
<div class="image_block">
<div id="attachment_97" class="wp-caption alignleft" style="width: 210px"><a href="http://rudi.me/word/wp-content/uploads/2009/12/characters_v3_search.PNG"><img src="http://rudi.me/word/wp-content/uploads/2009/12/characters_v3_search-200x300.PNG" alt="You can see placeholder icons for more rich search view." title="Characters search (v3)" width="200" height="300" class="size-medium wp-image-97" /></a><p class="wp-caption-text">You can see placeholder icons for more rich search view.</p></div>
<div id="attachment_96" class="wp-caption alignleft" style="width: 210px"><a href="http://rudi.me/word/wp-content/uploads/2009/12/characters_v3_list.PNG"><img src="http://rudi.me/word/wp-content/uploads/2009/12/characters_v3_list-200x300.PNG" alt="New favorites option allowed bookmarking of guilds and items, as well as visual update on download progress. Planned to add icons later as well." title="Favorite lists (v3)" width="200" height="300" class="size-medium wp-image-96" /></a><p class="wp-caption-text">New favorites option allowed bookmarking of guilds and items, as well as visual update on download progress. Planned to add icons later as well.</p></div>
<div id="attachment_98" class="wp-caption alignleft" style="width: 210px"><a href="http://rudi.me/word/wp-content/uploads/2009/12/characters_v3_sheet.PNG"><img src="http://rudi.me/word/wp-content/uploads/2009/12/characters_v3_sheet-200x300.PNG" alt="Point when C&amp;D letter came in: experimenting with horizontal swipes to give more information without tab jumping (note right arrow on last block)" title="Character sheet (v3)" width="200" height="300" class="size-medium wp-image-98" /></a><p class="wp-caption-text">Point when C&#038;D letter came in: experimenting with horizontal swipes to give more information without tab jumping (note right arrow on last block)</p></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://rudi.me/2009/12/warcraft-characters-v2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Warcraft Characters: v1.0</title>
		<link>http://rudi.me/2009/12/warcraft-characters-first-version/</link>
		<comments>http://rudi.me/2009/12/warcraft-characters-first-version/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 01:23:24 +0000</pubDate>
		<dc:creator>Rudi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://rudi.me/word/?p=48</guid>
		<description><![CDATA[Warcraft Characters was my first iPhone project, which let users see their character stats on the iPhone. This post focuses on how the first version came to be. Why Characters? The short version is that I wanted to: learn something new make something I&#8217;d use enjoy doing it &#8230; and I had: a shiny iPhone [...]]]></description>
			<content:encoded><![CDATA[<p>Warcraft Characters was my first iPhone project, which let users see their character stats on the iPhone. This post focuses on how the first version came to be.</p>
<p><span id="more-48"></span></p>
<h3>Why Characters?</h3>
<div id="attachment_81" class="wp-caption alignright" style="width: 210px"><a href="http://rudi.me/word/wp-content/uploads/2009/12/characters_v1_list.png"><img src="http://rudi.me/word/wp-content/uploads/2009/12/characters_v1_list-200x300.png" alt="Portraits were fetched and cached from Armory website. List of characters was also loaded from local cache - no network connection needed once saved." title="List of characters (v1)" width="200" height="300" class="size-medium wp-image-81" /></a><p class="wp-caption-text">Portraits were fetched and cached from Armory website. List of characters was also loaded from local cache - no network connection needed once saved.</p></div>
<p>The short version is that I wanted to:</p>
<ul>
<li>learn something new</li>
<li>make something I&#8217;d use</li>
<li>enjoy doing it</li>
</ul>
<p>&#8230; and I had:</p>
<ul>
<li>a shiny iPhone</li>
<li>zero experience with compiled languages</li>
<li>a Loremaster-aspiring druid healer (before being a Loremaster was possible)</li>
</ul>
<p>A Warcraft-related app was initially a suggestion of a friend of mine. I wasn&#8217;t too thrilled with the idea at first since I wanted to make something unique, and not piggyback on someone else&#8217;s creation. I warmed up to the idea eventually: It seemed simple enough for a first app, and I thought I&#8217;d get the opportunity to tackle quite a few things such as visual design, file storage and web requests to name a few&#8230; and nothing like it was on the app store.  At this point, I didn&#8217;t even consider app store publishing. Besides, I always loved well-done character sheets on pen-and-paper RPGs, and this would give me a chance to do something similar on the iPhone. What was not to like? And off I went&#8230;</p>
<h3>Firstborn iPhone app</h3>
<div id="attachment_82" class="wp-caption alignleft" style="width: 210px"><a href="http://rudi.me/word/wp-content/uploads/2009/12/characters_v1_sheet.png"><img src="http://rudi.me/word/wp-content/uploads/2009/12/characters_v1_sheet-200x300.png" alt="Health and mana bar were pregenerated images made with Photoshop, the rest are Cocoa (native iPhone) objects." title="Character sheet (v1)" width="200" height="300" class="size-medium wp-image-82" /></a><p class="wp-caption-text">Health and mana bar were pregenerated images made with Photoshop, the rest are Cocoa (native iPhone) objects.</p></div>
<p>Warcraft Characters was my first foray into Objective-C/Cocoa coding for the iPhone. My background is in Javascript (web dev, people), so the learning curve was steep &#8211; I was mostly banging my head against the wall for weeks almost every night. Bright side of this: I didn&#8217;t have to deal with Internet Explorer antiques.</p>
<p>Thankfully, I clicked with the Cocoa and Objective-C &#8211; most of my moments were &#8216;oooh, this makes so much sense!&#8217; and &#8216;sweeeet!&#8217;, and after a month, I had my very first Cocoa object displayed on the screen. Note: iPhone dev kit includes Interface Builder, but as a perfectionist I prefered to add objects manually by code. This paid off later, too.</p>
<p>The App itself was a simple combination of Cocoa objects (table view, labels, background images), which fetched armory data and saved it locally. &#8216;Saved it locally&#8217; was one of key points: I wanted character sheets to be viewable anywhere regardless of network connection.</p>
<h3>Design, if you can call it that</h3>
<div id="attachment_83" class="wp-caption alignright" style="width: 210px"><a href="http://rudi.me/word/wp-content/uploads/2009/12/characters_v1_find.png"><img src="http://rudi.me/word/wp-content/uploads/2009/12/characters_v1_find-200x300.png" alt="Background image was predrawn in Photoshop, and region picker was hastly added after users requested it. This part of the app was least polished." title="Fetch character (v1)" width="200" height="300" class="size-medium wp-image-83" /></a><p class="wp-caption-text">Background image was predrawn in Photoshop, and region picker was hastly added after users requested it. This part of the app was least polished.</p></div>
<p>I wasn&#8217;t fond of Characters&#8217; look in the first version, but then again, I rarely like what I did a few versions ago&#8230;</p>
<p>Here was my design process: </p>
<ul>
<li>draw mockup in Photoshop</li>
<li>place single image app on the iPhone</li>
<li>pretend the image is actual running Characters</li>
<li>repeat until &#8216;yea, this is it!&#8217; feeling appears</li>
</ul>
<p>Images, such as health and mana bars, were pre-generated in Photoshop. A more proper approach would be to generate gradient images programmatically and just apply color, but I didn&#8217;t get into CoreGraphics until the second version. The Photoshop solution was less elegant, but *much* faster.</p>
<p>Portrait images were fetched and saved directly from the armory server. It&#8217;s easy to figure out address for each once I got the naming pattern: gender id plus race id plus class id. So, male (id 0) tauren (id 6) druid (id 11) has image file named 0-6-11.gif. Since this character is level 80, file name is prefixed with /wow-80/ path.</p>
<h3>Biggest hurdle</h3>
<p>The most painful and almost deal-breaker issue? Getting character data off the Armory. Here&#8217;s a snippet of XML data when viewed with web browser:</p>
<pre class="brush: xml; gutter: false; toolbar: false;">
&lt;defenses&gt;
&lt;armor base=&quot;4877&quot; effective=&quot;4877&quot; percent=&quot;24.25&quot; petBonus=&quot;-1&quot;/&gt;
&lt;defense decreasePercent=&quot;0.00&quot; increasePercent=&quot;0.00&quot; plusDefense=&quot;0&quot; rating=&quot;0&quot; value=&quot;400.00&quot;/&gt;
&lt;dodge increasePercent=&quot;0.00&quot; percent=&quot;19.48&quot; rating=&quot;0&quot;/&gt;
&lt;parry increasePercent=&quot;0.00&quot; percent=&quot;0.00&quot; rating=&quot;0&quot;/&gt;
&lt;block increasePercent=&quot;0.00&quot; percent=&quot;0.00&quot; rating=&quot;0&quot;/&gt;
&lt;resilience damagePercent=&quot;0.00&quot; hitPercent=&quot;0.00&quot; value=&quot;0.00&quot;/&gt;
&lt;/defenses&gt;
&lt;/pre&gt;
</pre>
<p>Perfect, right? Even humans can read this! However, downloading this same exact URL with the iPhone resulted in this:</p>
<pre class="brush: xml; gutter: false; toolbar: false;">
&lt;li class=&quot;staticTip&quot; onmouseover=&quot;javascript: setTipText(&quot;&lt;span class='tooltipTitle'&gt;Defense 400&lt;/span&gt;&lt;span class = 'tooltipContentSpecial'&gt;Defense Rating 0 (+0 Defense)&lt;/span&gt;&lt;span class = 'tooltipContentSpecial'&gt;Increases chance to Dodge, Block and Parry by 0%&lt;/span&gt;&lt;span class = 'tooltipContentSpecial'&gt;Decreases chance to be hit and critically hit by 0%&lt;br/&gt;&lt;span class = 'myGray'&gt;(Before diminishing returns)&lt;/span&gt;&lt;/span&gt;&quot;);&quot;&gt;events={ mouseover=Object mouseout=Object }handle=function()
&lt;span&gt;Defense: &lt;/span&gt;
&lt;i&gt;400&lt;/i&gt;
&lt;/li&gt;
</pre>
<p>That was bad. I wanted clean readable data, not the garbled final page in HTML format! Why was XSLT tranformation applied already? Wasn&#8217;t iPhone just supposed to download raw data I saw in the browser?</p>
<p>A few weeks and 1,000 unsuccessful attempts to figure out the issue, I found the solution in this line of code:</p>
<pre class="brush: objc; gutter: false; toolbar: false;">
// fake that iPhone is Firefox browser to get XML file from the armory
[request setValue:@&quot;Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9) Gecko/2008061004 Firefox/3.0&quot; forHTTPHeaderField: @&quot;User-Agent&quot;];
</pre>
<p>You see, if the Armory server thinks you&#8217;re a Firefox browser, it will send you data as XML, which is what I needed. Faking that my calls were sent from Firefox saved the day.</p>
<h3>Cleared for launch</h3>
<div id="attachment_87" class="wp-caption alignleft" style="width: 111px"><a href="http://rudi.me/word/wp-content/uploads/2009/12/characters_v1_icon.png"><img src="http://rudi.me/word/wp-content/uploads/2009/12/characters_v1_icon.png" alt="Old icon in v1.Tried to get "W" in it with no success." title="Characters v1 Icon" width="101" height="101" class="size-full wp-image-87" /></a><p class="wp-caption-text">Old icon in v1. I spent most of the time trying to get W in with no success.</p></div>
<div id="attachment_88" class="wp-caption alignleft" style="width: 111px"><a href="http://rudi.me/word/wp-content/uploads/2009/12/characters_v2_icon.png"><img src="http://rudi.me/word/wp-content/uploads/2009/12/characters_v2_icon.png" alt="Icon for next version. Looks much better when I went with the flow rather than forcing W in it." title="Characters v2 Icon" width="101" height="101" class="size-full wp-image-88" /></a><p class="wp-caption-text">Icon for next version. Looks much better when I went with the flow rather than forcing W in it.</p></div>
<p>With the above combination of head-banging and &#8216;aha&#8217; moments, as well as a dash of Photoshop, Characters v1.0 was born.</p>
<p>When the app worked well enough, it was natural to post it on the App Store. I didn&#8217;t have high expectations for it &#8211; while I was thrilled to get something out that worked, it wasn&#8217;t nearly as good as I wanted it, and on top of that, I was wary of copyright issues that might reject Characters from the start. Still, I did it for two reasons: test the waters, and ship something that works. As a perfectionist, I could work on an app forever, so I started the project determined to actually have a finished version I could possibly improve on later. That&#8217;s well summarized in this quote: <a href="http://www.folklore.org/StoryView.py?story=Real_Artists_Ship.txt">&#8220;Real artists ship&#8221;</a>.</p>
<p>After waiting about two weeks for Apple to clear Characters for the app store, I woke up to find 40 emails in my inbox from people who downloaded the app; mostly about asking for Characters to support EU servers. I can&#8217;t describe how exhilarated I was to get feedback from users! </p>
<blockquote><p>For those of you working on your first apps and are unsure of yourselves, let me tell you that the learning experience and feeling of having your creation live is well worth the time and effort. You&#8217;ll have nights of frustration thinking &#8216;this #@!&#038; just isn&#8217;t working!&#8217;, and that&#8217;s fine &#8211; persist through it, and results will show.
</p></blockquote>
<p>I rushed off to make an update that supported all international servers, and submitted it a few days later.</p>
<h3>Extra credit for devs: Cocoa goodness</h3>
<p>Since Characters was my first contact with Obj-C/Cocoa, you won&#8217;t find any secret Cocoa tips, but what first coding for iPhone did for this web developer:</p>
<ul>
<li>great introduction to designs and patterns: With interpreted and loosely-typed Javascript, you can do things the right way or the wrong way, and it will usually work. Cocoa framework, on the other hand, almost forces you to follow certain patterns. For example, if you used UITableController object, you have used Model-View-Controller pattern. I could read about MVC forever, but actually using it is what made the light-bulb go on for me. This drastically affected how I wrote my future Javascript code in a positive way. </li>
<li>different ways to organize data: dictionaries, sets, arrays, Core Data. This was a good stepping stone from lenient Javascript to less forgiving C. I didn&#8217;t actually start to tackle pure C on this project, but Cocoa was a good crutch as I transitioned into it. </li>
<li>in the first version of Characters, my subclassing skills were less than ideal, and AppDelegate was overwhelmed with methods. I did better in the next version *grin*.</li>
<li>I simply love Cocoa method naming convention &#8211; it&#8217;s easy to read and is self-explanatory. Here&#8217;s what methods are called once Characters was initialized:
<pre class="brush: objc; gutter: false; toolbar: false;">
[self setupApplicationDataWhenLaunched];
[self updateCharacterListFromSavedXMLFiles];
[self setupApplicationUIWhenLaunched];
</pre>
<p>Quite readable, isn&#8217;t it?</li>
<li>Writing my own FileDownloader class was fun since url request API on iPhone didn&#8217;t support file downloads. It was my very first singleton class, too! I did away with singletons later, but it was fun experiment to make one.</li>
</ul>
<p>That&#8217;s all folks! Feel free to contact me if there&#8217;s anything else you&#8217;d like to read. More about Characters v2 in next installment&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://rudi.me/2009/12/warcraft-characters-first-version/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Site design iterations</title>
		<link>http://rudi.me/2009/11/site-design-iterations/</link>
		<comments>http://rudi.me/2009/11/site-design-iterations/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 04:05:50 +0000</pubDate>
		<dc:creator>Rudi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://rudi.me/word/?p=30</guid>
		<description><![CDATA[I took few screen-shots of site WordPress theme design to see how it evolved over time, and here are most significant ones. Fascinating and sometimes frustrating thing about design is that there is no one true answer. I can keep working on one template layout for days, just to come up with a better one [...]]]></description>
			<content:encoded><![CDATA[<p>I took few screen-shots of site WordPress theme design to see how it evolved over time, and here are most significant ones.</p>
<p><span id="more-30"></span></p>
<p>Fascinating and sometimes frustrating thing about design is that there is no one true answer. I can keep working on one template layout for days, just to come up with a better one in few minutes when inspiration hits. Thankfully, I&#8217;m quite happy with the way current WordPress theme has turned out.</p>
<div class="image_block">
<div id="attachment_31" class="wp-caption alignleft" style="width: 310px"><a href="http://rudi.me/word/wp-content/uploads/2009/11/blog_first_iteration.png"><img src="http://rudi.me/word/wp-content/uploads/2009/11/blog_first_iteration-300x186.png" title="First iteration" width="300" height="186" class="size-medium wp-image-31" /></a><p class="wp-caption-text">I started with yellow-to-blue ray header, but final result felt too bland.</p></div>
<div id="attachment_38" class="wp-caption alignleft" style="width: 310px"><a href="http://rudi.me/word/wp-content/uploads/2009/11/blog_second_iteration.jpg"><img src="http://rudi.me/word/wp-content/uploads/2009/11/blog_second_iteration-300x192.jpg"  title="blog_second_iteration" width="300" height="192" class="size-medium wp-image-38" /></a><p class="wp-caption-text">Clear header cut-off was progress, but now header looked too generic.</p></div>
<div id="attachment_40" class="wp-caption alignleft" style="width: 310px"><a href="http://rudi.me/word/wp-content/uploads/2009/11/blog_third_iteration.jpg"><img src="http://rudi.me/word/wp-content/uploads/2009/11/blog_third_iteration-300x192.jpg" alt="I really liked this nebula image, but overall site look was too dead." title="blog_third_iteration" width="300" height="192" class="size-medium wp-image-40" /></a><p class="wp-caption-text">I really liked this nebula image, but overall site look was too dead.</p></div>
<div id="attachment_43" class="wp-caption alignleft" style="width: 310px"><a href="http://rudi.me/word/wp-content/uploads/2009/11/blog_final_iteration.png"><img src="http://rudi.me/word/wp-content/uploads/2009/11/blog_final_iteration-300x201.png" alt="Finally! Bold header image, well defined body, orange-blue color scheme I like." title="Final iteration" width="300" height="201" class="size-medium wp-image-43" /></a><p class="wp-caption-text">Finally! Bold header image, well defined body, orange-blue color scheme I like.</p></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://rudi.me/2009/11/site-design-iterations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>And so it begins&#8230;</title>
		<link>http://rudi.me/2009/11/and-so-it-begins/</link>
		<comments>http://rudi.me/2009/11/and-so-it-begins/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 03:42:56 +0000</pubDate>
		<dc:creator>Rudi</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://rudi.me/word/?p=14</guid>
		<description><![CDATA[#include &#60;stdlib.h&#62; #include "blog.h" #include "iactuallypreferobjcinsteadofcplusplus.h" &#8220;Hello World&#8221;, and welcome to my blog. I&#8217;m Rudi, and I&#8217;m a &#8220;geek, JS/CSS acrobat, love to dabble into XCode, Photoshop, RPGs&#8221; (direct copy from current twitter bio). I intend to write mostly technical-related posts on this blog as I dive into them, whatever they might be at the [...]]]></description>
			<content:encoded><![CDATA[<pre style="color: #999;">
#include &lt;stdlib.h&gt;
#include "blog.h"
#include "iactuallypreferobjcinsteadofcplusplus.h"
</pre>
<p>&#8220;Hello World&#8221;, and welcome to my blog.</p>
<p><span id="more-14"></span></p>
<p>I&#8217;m Rudi, and I&#8217;m a  &#8220;geek, JS/CSS acrobat, love to dabble into XCode, Photoshop, RPGs&#8221; (direct copy from current twitter bio).</p>
<p>I intend to write mostly technical-related posts on this blog as I dive into them, whatever they might be at the time. As a very curious generalist (aka, I specialize in everything), I&#8217;m only sure that the thing/tech/concept I&#8217;ll obsess in the next few months will be new, interesting, and different than what I tried before. </p>
<p>This blog is fine example of that: you&#8217;re looking at my very own WordPress theme. If you&#8217;d like to use the theme, let me know, but please note: it&#8217;s ongoing work in progress.</p>
<div id="attachment_117" class="wp-caption alignleft" style="width: 660px"><a href="http://rudi.me/word/wp-content/uploads/2009/11/welcome.png"><img src="http://rudi.me/word/wp-content/uploads/2009/11/welcome.png" alt="My very own announcement image? Sure, why not..." title="Welcome!" width="650" height="250" class="size-full wp-image-117" /></a><p class="wp-caption-text">My very own announcement image? Sure, why not...</p></div>
<h3>Technicalities</h3>
<p>This <a href="http://wordpress.com">WordPress</a> theme was built from scratch, using <a href="http://elliotjaystocks.com/starkers/">the Starkers</a> nude theme as a guide of what role which PHP file has. Coding was done in <a href="http://www.barebones.com/products/bbedit/">BBEdit</a> and <a href="http://www.panic.com/coda/">Coda</a>, FTP file transfer via <a href="http://www.panic.com/transmit/">Transmit</a>, and graphics in <a href="http://www.adobe.com/products/photoshop">Photoshop</a>. Header image is from NASA. Site is hosted by <a href="http://www.webfaction.com/">webfaction.com</a>, which I highly recommend.</p>
<p>Finally, big thanks to people who were there for fantastic feedback, questions, or encouragement: Aaron, Chris, Dan, Mike, Pete, Rachel, Rale, Sam, Staša, Surajit, Zephyr.</p>
<p>Oh, and happy Thanksgiving to the US folks, and last weekend of November to the world!</p>
]]></content:encoded>
			<wfw:commentRss>http://rudi.me/2009/11/and-so-it-begins/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
