<?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/"
	
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Ziray Studio Labs &#187; advice</title>
	<atom:link href="http://www.mikeziray.com/category/advice/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mikeziray.com</link>
	<description>Life, Logged Through Light</description>
	<lastBuildDate>Sun, 18 Dec 2011 21:49:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>iOS Development Code Kitchen</title>
		<link>http://www.mikeziray.com/2010/12/06/ios-development-code-kitchen/?utm_campaign=feed&#038;utm_medium=feed&#038;utm_source=blog&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.mikeziray.com/2010/12/06/ios-development-code-kitchen/#comments</comments>
		<pubDate>Mon, 06 Dec 2010 18:53:34 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[advice]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[blacksburg]]></category>
		<category><![CDATA[code kitchen]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[ltz]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[mobile development]]></category>
		<category><![CDATA[nrv]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[virginia]]></category>
		<category><![CDATA[virginia tech]]></category>

		<guid isPermaLink="false">http://www.mikeziray.com/?p=1214</guid>
		<description><![CDATA[I&#8217;ll be putting on a workshop on iOS and iPhone development this Saturday from 9AM to 5PM on the Virginia Tech campus. The event is free so if you&#8217;re in the area feel free to sign up: http://www.ltzllc.com/2010/11/ios-development-code-kitchen/ The event will run all day and will be hands-on programming, but all levels of experience are [...]<p><a href="http://www.mikeziray.com/2010/12/06/ios-development-code-kitchen/">iOS Development Code Kitchen</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>

Related posts:<ol>
<li><a href='http://www.mikeziray.com/2010/07/01/why-your-code-sucks-naming-conventions/' rel='bookmark' title='Naming Conventions &#8211; Why Your Code Sucks'>Naming Conventions &#8211; Why Your Code Sucks</a></li>
<li><a href='http://www.mikeziray.com/2011/02/22/mobile-application-development/' rel='bookmark' title='Mobile Application Development'>Mobile Application Development</a></li>
<li><a href='http://www.mikeziray.com/2010/01/27/handling-your-initial-view-controllers-for-iphone/' rel='bookmark' title='Handling Your Initial View Controllers for iPhone'>Handling Your Initial View Controllers for iPhone</a></li>
<li><a href='http://www.mikeziray.com/2007/06/23/temporary-apartment/' rel='bookmark' title='Temporary Apartment'>Temporary Apartment</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll be putting on a workshop on iOS and iPhone development this Saturday from 9AM to 5PM on the Virginia Tech campus. The event is free so if you&#8217;re in the area feel free to sign up:</p>
<p><a href="http://www.ltzllc.com/2010/11/ios-development-code-kitchen/" target="_blank">http://www.ltzllc.com/2010/11/ios-development-code-kitchen/</a></p>
<p>The event will run all day and will be hands-on programming, but all levels of experience are welcome and encouraged to come.</p>
<p><a href="http://www.mikeziray.com/2010/12/06/ios-development-code-kitchen/">iOS Development Code Kitchen</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>
<p>Related posts:<ol>
<li><a href='http://www.mikeziray.com/2010/07/01/why-your-code-sucks-naming-conventions/' rel='bookmark' title='Naming Conventions &#8211; Why Your Code Sucks'>Naming Conventions &#8211; Why Your Code Sucks</a></li>
<li><a href='http://www.mikeziray.com/2011/02/22/mobile-application-development/' rel='bookmark' title='Mobile Application Development'>Mobile Application Development</a></li>
<li><a href='http://www.mikeziray.com/2010/01/27/handling-your-initial-view-controllers-for-iphone/' rel='bookmark' title='Handling Your Initial View Controllers for iPhone'>Handling Your Initial View Controllers for iPhone</a></li>
<li><a href='http://www.mikeziray.com/2007/06/23/temporary-apartment/' rel='bookmark' title='Temporary Apartment'>Temporary Apartment</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.mikeziray.com/2010/12/06/ios-development-code-kitchen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
	</item>
		<item>
		<title>Learn Spanish, or any other language</title>
		<link>http://www.mikeziray.com/2010/10/14/learn-spanish-or-any-other-language/?utm_campaign=feed&#038;utm_medium=feed&#038;utm_source=blog&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.mikeziray.com/2010/10/14/learn-spanish-or-any-other-language/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 15:05:54 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[advice]]></category>
		<category><![CDATA[goals]]></category>
		<category><![CDATA[travel]]></category>
		<category><![CDATA[blacksburg]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[colombia]]></category>
		<category><![CDATA[colombian]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[podcasts]]></category>
		<category><![CDATA[spanish]]></category>

		<guid isPermaLink="false">http://www.mikeziray.com/?p=850</guid>
		<description><![CDATA[If you have a library card to the local Blacksburg library, across the street from Rocket Music and the police station, you can access a pretty good online tutor called Mango Languages. Just search for Mango on this page. Both the card and the subscription to Mango Languages are free. Also, here&#8217;s a list of [...]<p><a href="http://www.mikeziray.com/2010/10/14/learn-spanish-or-any-other-language/">Learn Spanish, or any other language</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>

Related posts:<ol>
<li><a href='http://www.mikeziray.com/2009/02/04/working-with-people-better-than-you/' rel='bookmark' title='Working With People Better Than You'>Working With People Better Than You</a></li>
<li><a href='http://www.mikeziray.com/2010/07/01/why-your-code-sucks-naming-conventions/' rel='bookmark' title='Naming Conventions &#8211; Why Your Code Sucks'>Naming Conventions &#8211; Why Your Code Sucks</a></li>
<li><a href='http://www.mikeziray.com/2010/04/11/what-ive-been-up-to/' rel='bookmark' title='What I&#8217;ve Been Up To'>What I&#8217;ve Been Up To</a></li>
<li><a href='http://www.mikeziray.com/2010/01/16/how-to-program-for-the-iphone-a-plan/' rel='bookmark' title='How to Program for the iPhone &#8211; A Plan'>How to Program for the iPhone &#8211; A Plan</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>If you have a library card to the local Blacksburg library, across the street from <a href="http://rocketmusic.net/" target="_blank">Rocket Music</a> and the police station, you can access a pretty good online tutor called <a href="http://mangolanguages.com/" target="_blank">Mango Languages</a>. Just search for Mango <a href=" http://www.mfrl.org/" target="_blank">on this page</a>. Both the card and the subscription to Mango Languages are free.</p>
<p>Also, <a href="http://www.makeuseof.com/tag/18-great-sites-to-learn-a-new-language/" target="_blank">here&#8217;s a list of some websites to learn Spanish and other languages</a>. Don&#8217;t pay for anything online. They&#8217;re all a waste of money. There&#8217;s a lot of great content online for free and most people don&#8217;t follow through long enough for it to be worth it.</p>
<h2>Language Podcasts</h2>
<p>Podcasts are also a great, free option. Go to the iTunes store, and search for Spanish or which ever language you want to learn and subscribe to as many teaching podcasts as you can handle. For Spanish, I recommend:</p>
<p><a href="http://itunes.apple.com/us/podcast/learn-to-speak-spanish-discover/id264318446" target="_blank">Learn to Speak Spanish with Discover Spanish</a><br />
<a href="http://itunes.apple.com/us/podcast/coffee-break-spanish/id201598403" target="_blank"> Coffee Break Spanish</a></p>
<p>Some language podcasts are taught by English speakers who have horrible accents, but they&#8217;re worth a listen, but don&#8217;t put much effort into replicating their pronunciation.</p>
<h2>Books</h2>
<p>After you go through those for a while, you should get a book if you decide to continue learning it, otherwise I&#8217;d stick with the online content until you&#8217;re positive you want to learn it. I personally have a good reason to try to learn these languages, but if it&#8217;s just for fun you might find yourself getting tired of it.</p>
<p>Books provide a level of intensity and authority that you&#8217;ll need, but only after you&#8217;re sure you want to get that far into it. Almost any book with an accompanying CD should be good, but make sure to look through the book to see if it matches up with the way you learn. By going through the free content first, you should understand which technique best suites you.</p>
<p><a href="http://www.mikeziray.com/2010/10/14/learn-spanish-or-any-other-language/">Learn Spanish, or any other language</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>
<p>Related posts:<ol>
<li><a href='http://www.mikeziray.com/2009/02/04/working-with-people-better-than-you/' rel='bookmark' title='Working With People Better Than You'>Working With People Better Than You</a></li>
<li><a href='http://www.mikeziray.com/2010/07/01/why-your-code-sucks-naming-conventions/' rel='bookmark' title='Naming Conventions &#8211; Why Your Code Sucks'>Naming Conventions &#8211; Why Your Code Sucks</a></li>
<li><a href='http://www.mikeziray.com/2010/04/11/what-ive-been-up-to/' rel='bookmark' title='What I&#8217;ve Been Up To'>What I&#8217;ve Been Up To</a></li>
<li><a href='http://www.mikeziray.com/2010/01/16/how-to-program-for-the-iphone-a-plan/' rel='bookmark' title='How to Program for the iPhone &#8211; A Plan'>How to Program for the iPhone &#8211; A Plan</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.mikeziray.com/2010/10/14/learn-spanish-or-any-other-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
	</item>
		<item>
		<title>Naming Conventions &#8211; Why Your Code Sucks</title>
		<link>http://www.mikeziray.com/2010/07/01/why-your-code-sucks-naming-conventions/?utm_campaign=feed&#038;utm_medium=feed&#038;utm_source=blog&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.mikeziray.com/2010/07/01/why-your-code-sucks-naming-conventions/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 19:38:04 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[advice]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[blacksburg]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[virginia]]></category>

		<guid isPermaLink="false">http://www.mikeziray.com/?p=1071</guid>
		<description><![CDATA[I&#8217;ve seen a lot of poorly written and ugly looking code in my time. That&#8217;s not even considering the undocumented and uncommented code. We all know we should comment our code but how many of us do it consistently? I admit, when I&#8217;m in a coding frenzy, stopping to write comments just gets in the [...]<p><a href="http://www.mikeziray.com/2010/07/01/why-your-code-sucks-naming-conventions/">Naming Conventions &#8211; Why Your Code Sucks</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>

Related posts:<ol>
<li><a href='http://www.mikeziray.com/2010/12/06/ios-development-code-kitchen/' rel='bookmark' title='iOS Development Code Kitchen'>iOS Development Code Kitchen</a></li>
<li><a href='http://www.mikeziray.com/2010/06/27/corona-game-template-in-lua/' rel='bookmark' title='Corona Game Template in Lua'>Corona Game Template in Lua</a></li>
<li><a href='http://www.mikeziray.com/2010/01/27/handling-your-initial-view-controllers-for-iphone/' rel='bookmark' title='Handling Your Initial View Controllers for iPhone'>Handling Your Initial View Controllers for iPhone</a></li>
<li><a href='http://www.mikeziray.com/2009/05/30/custom-mouse-cursor-for-actionscript-3/' rel='bookmark' title='Custom Mouse Cursor for ActionScript 3'>Custom Mouse Cursor for ActionScript 3</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve seen a lot of poorly written and ugly looking code in my time. That&#8217;s not even considering the undocumented and uncommented code. We all know we should comment our code but how many of us do it consistently? I admit, when I&#8217;m in a coding frenzy, stopping to write comments just gets in the way of my thought process and can be distracting. I will however write a bunch of comments before I write the code, of the operations I think I need, in order to give me an outline of where I need to get to. For example:</p>
<div class="codesnip-container" >// Get URL string for video file<br />
// Load video file from URL request<br />
// Load video file into video player<br />
// Set up video player<br />
// Play video</div>
<p>I may not know all the APIs to load and play the video just yet, but at least I&#8217;ve given myself an outline and as I fill in the code below each comment, I can see exactly what I&#8217;m doing and where I need to go.</p>
<h2>Why Your Code Sucks</h2>
<p>The point of this article is not to talk about comments, but how to avoid writing them in the first place within your functions and still be clear for everyone else, for the most part. This is your code:</p>
<div class="codesnip-container" >newPlPt = crt2pl( nmc.x, nmc.y );</div>
<p>Not even a comment could concisely convey the meaning of that hideous statement. Instead, why not:</p>
<div class="codesnip-container" >newPolarPoint = cartesianToPolar( newMediaContext.x, newMediaContext.y );</div>
<p>Well written code is self documenting. Let me restate that: if you can write code so that someone can jump to any point of that code and understand what&#8217;s going on at that point, read it like a sentence, and not have to decipher minute details like what each variable means, then you don&#8217;t have to comment most of your code.</p>
<p>There&#8217;s no reason you need to shorten the names in your code. Most programmers have never had file size limitations to deal with, so there&#8217;s no reason for it. Stop pretending you live in the 1960s and embrace nearly infinite file storage. To save keystrokes perhaps? Please, use a real IDE with code completion and stop doing stupid things like:</p>
<div class="codesnip-container" >public function updateP( p:Player, d:MovieClip, b:MovieClip, t:Textfield);</div>
<h2>Function Names</h2>
<p>Also, because your functions are essentially actions, they need to reflect that in the name, so put a verb in the beginning of your function such as: getData(), setStatus(), enableWiFi(), hideControls(), handleGraphicException(), launchBall(), etc.</p>
<h2>Class Variables</h2>
<p>Get rid of the underscores in front of your class variables. For example: _dg; _myNumber;. All class variables should be private anyway, so why do you need that ridiculous convention? It&#8217;s a hold over from C where there was no &#8220;private&#8221; keyword, so you&#8217;re using it and you have no idea why.</p>
<p>Also, what&#8217;s with the &#8220;my&#8221; naming convention? You sound stupid when you have those: myInstanceName, myMovieClip, myGraphicsContext. Of course it&#8217;s yours, whose would it be, if not yours? If you&#8217;re programming with a colleague, do you refer to his variable references as yourInstanceName? Or hisVideoFileURL? Of course not. Don&#8217;t be that stupid; you&#8217;re reading too many stupid online tutorials by uncreative people who only code because they have nothing else better to do while living in their parent&#8217;s basement.</p>
<p>In the very least, be consistent with your naming conventions.</p>
<h2>Hungarian vs. Polish notation</h2>
<p>Depending on which language you&#8217;re coding in,  you may need to use a notation to help you with type casting. Let me rephrase that: if you&#8217;re using a loosely typed language, use Hungarian notation. You should probably use this with strongly typed languages anyway because with abstract types, you never know what you could get into and it&#8217;s just generally less confusing.</p>
<p><strong>Hungarian Notation</strong>: vendorNameTextField or vendorName_txt</p>
<p><strong>Polish Notation</strong>: txtVendorName or textFieldVendorName</p>
<p>Why not Polish notation? Not only is it ugly, but why would I sort on variable type instead of the variable name like I can do in Hungarian notation? The notation names come from how the speakers of those languages modify their verbs and nouns. To say: &#8220;My ball&#8221; in Hungarian is:  &#8221;labd<em>á</em>m&#8221; where &#8220;labda&#8221; is the root word and the &#8216;m&#8217; singifies a first person possessive. Hence the ending of the word shows the crucial information. It&#8217;s the opposite in Polish notation where the beginning of the word is modified. In the interest of full disclosure, I love the Polish, but I am Hungarian, but I promise that&#8217;s not why I prefer one over the other.</p>
<h2>Final Thoughts</h2>
<p>In the end, be consistent, be clear and spell out your variable and function names.</p>
<p><a href="http://www.mikeziray.com/2010/07/01/why-your-code-sucks-naming-conventions/">Naming Conventions &#8211; Why Your Code Sucks</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>
<p>Related posts:<ol>
<li><a href='http://www.mikeziray.com/2010/12/06/ios-development-code-kitchen/' rel='bookmark' title='iOS Development Code Kitchen'>iOS Development Code Kitchen</a></li>
<li><a href='http://www.mikeziray.com/2010/06/27/corona-game-template-in-lua/' rel='bookmark' title='Corona Game Template in Lua'>Corona Game Template in Lua</a></li>
<li><a href='http://www.mikeziray.com/2010/01/27/handling-your-initial-view-controllers-for-iphone/' rel='bookmark' title='Handling Your Initial View Controllers for iPhone'>Handling Your Initial View Controllers for iPhone</a></li>
<li><a href='http://www.mikeziray.com/2009/05/30/custom-mouse-cursor-for-actionscript-3/' rel='bookmark' title='Custom Mouse Cursor for ActionScript 3'>Custom Mouse Cursor for ActionScript 3</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.mikeziray.com/2010/07/01/why-your-code-sucks-naming-conventions/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
	</item>
		<item>
		<title>Immigration</title>
		<link>http://www.mikeziray.com/2010/05/19/immigration/?utm_campaign=feed&#038;utm_medium=feed&#038;utm_source=blog&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.mikeziray.com/2010/05/19/immigration/#comments</comments>
		<pubDate>Wed, 19 May 2010 14:20:06 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[advice]]></category>
		<category><![CDATA[goals]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[colombia]]></category>
		<category><![CDATA[immigracion]]></category>
		<category><![CDATA[immigration]]></category>
		<category><![CDATA[marriage]]></category>

		<guid isPermaLink="false">http://www.mikeziray.com/?p=1008</guid>
		<description><![CDATA[This is no way intended to be a guide to immigration through marriage, just an account of the work process and work we did to accomplish this. Petition for a Family Member It&#8217;s kind of strange to call someone you&#8217;re going to be married to a relative, but that&#8217;s what it&#8217;s referred to. Any legal [...]<p><a href="http://www.mikeziray.com/2010/05/19/immigration/">Immigration</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>

Related posts:<ol>
<li><a href='http://www.mikeziray.com/2011/02/08/colombia/' rel='bookmark' title='Colombia'>Colombia</a></li>
<li><a href='http://www.mikeziray.com/2008/07/14/bike-training-with-the-garmin-edge-705-gps/' rel='bookmark' title='Bike Training with the Garmin Edge 705 GPS'>Bike Training with the Garmin Edge 705 GPS</a></li>
<li><a href='http://www.mikeziray.com/2010/04/10/iphone-pricing/' rel='bookmark' title='iPhone Pricing'>iPhone Pricing</a></li>
<li><a href='http://www.mikeziray.com/2010/07/01/why-your-code-sucks-naming-conventions/' rel='bookmark' title='Naming Conventions &#8211; Why Your Code Sucks'>Naming Conventions &#8211; Why Your Code Sucks</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>This is no way intended to be a guide to immigration through marriage, just an account of the work process and work we did to accomplish this.</p>
<h2><strong>Petition for a Family Member</strong></h2>
<p>It&#8217;s kind of strange to call someone you&#8217;re going to be married to a relative, but that&#8217;s what it&#8217;s referred to. Any legal resident can petition the government to allow immediate family to join them in the United States. This is the case if you&#8217;re an immigrant or a citizen. Upon marrying someone, a citizen can request that the government allow the spouse to enter, live and work within the US. The spouse, if already in the US, can update their visa from, in our case, an F1 student visa, to permanent resident status. The law gets really tricky if you enter the US on a non-immigration visa, in other words not intending to immigrate, after having filed a Petition for Alien Relative. And yes, they call them aliens.</p>
<p>The form, I-130, is just a form stating who I am, how I&#8217;m legally in this country (through birth), and what my relation is to the person for whom I&#8217;m petitioning. Pretty straight forward.</p>
<h2>Changing Visa Status</h2>
<p>At the same time, we file an Application to Register Permanent Residence or Adjust Status, form I-485. This allows Ana to update her F1 visa to a Permanent Resident visa. After having filed this, she can not leave the country and return on her F1 visa. The reason is, upon entering the US under an F1 student visa, she is stating that by entering on a non-immigration visa, she is not intending to stay in the country, which would be false, since she has filed for permanent residency. It makes sense, but is something people need to be aware of. To get around this, there is another form I-131, Application for Travel Document, that we would need to file until she&#8217;s approved for a green card so that she can travel to Colombia or somewhere else on our honeymoon.</p>
<h2>Additional Forms</h2>
<p>There are a few more forms to file, such as an Application for Employment Authorization, form I-765, biographic information, form G-325A and my favorite, form G-1145, E-Notification of Application/Petition Acceptance, which will send me an email and/or text message when my application has changed status.</p>
<p>The process is pretty straight forward, but we consulted with a lawyer first to know what we were getting ourselves into. The tough part is understanding each form that needs to be filed, how to file it, what you need to file it properly and gathering all the other information and supporting documents that are needed. We can hire a lawyer to do all of this for us after we get married, but we don&#8217;t have the money right now. But we&#8217;re confidant we can properly do all of this. The trick is just taking a bit at a time and a lot of reading. Each government form has accompanying instructions to follow so it makes the process a lot less daunting.</p>
<p><a href="http://www.mikeziray.com/2010/05/19/immigration/">Immigration</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>
<p>Related posts:<ol>
<li><a href='http://www.mikeziray.com/2011/02/08/colombia/' rel='bookmark' title='Colombia'>Colombia</a></li>
<li><a href='http://www.mikeziray.com/2008/07/14/bike-training-with-the-garmin-edge-705-gps/' rel='bookmark' title='Bike Training with the Garmin Edge 705 GPS'>Bike Training with the Garmin Edge 705 GPS</a></li>
<li><a href='http://www.mikeziray.com/2010/04/10/iphone-pricing/' rel='bookmark' title='iPhone Pricing'>iPhone Pricing</a></li>
<li><a href='http://www.mikeziray.com/2010/07/01/why-your-code-sucks-naming-conventions/' rel='bookmark' title='Naming Conventions &#8211; Why Your Code Sucks'>Naming Conventions &#8211; Why Your Code Sucks</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.mikeziray.com/2010/05/19/immigration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
	</item>
		<item>
		<title>iPhone Pricing</title>
		<link>http://www.mikeziray.com/2010/04/10/iphone-pricing/?utm_campaign=feed&#038;utm_medium=feed&#038;utm_source=blog&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.mikeziray.com/2010/04/10/iphone-pricing/#comments</comments>
		<pubDate>Sat, 10 Apr 2010 23:06:10 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[advice]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[ipod]]></category>
		<category><![CDATA[itunes]]></category>
		<category><![CDATA[marketing]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.mikeziray.com/?p=847</guid>
		<description><![CDATA[As with any product or service, the question of pricing is always one of the many challenges of selling a product or service. Many price their products or services low in an attempt to under cut their competition or initially sell a lot and get their name out there. Others charge way more than a [...]<p><a href="http://www.mikeziray.com/2010/04/10/iphone-pricing/">iPhone Pricing</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>

Related posts:<ol>
<li><a href='http://www.mikeziray.com/2010/01/16/how-to-program-for-the-iphone-a-plan/' rel='bookmark' title='How to Program for the iPhone &#8211; A Plan'>How to Program for the iPhone &#8211; A Plan</a></li>
<li><a href='http://www.mikeziray.com/2010/01/27/handling-your-initial-view-controllers-for-iphone/' rel='bookmark' title='Handling Your Initial View Controllers for iPhone'>Handling Your Initial View Controllers for iPhone</a></li>
<li><a href='http://www.mikeziray.com/2010/04/14/barninja-an-iphone-app-postmortem/' rel='bookmark' title='BarNinja &#8211; An iPhone App Postmortem'>BarNinja &#8211; An iPhone App Postmortem</a></li>
<li><a href='http://www.mikeziray.com/2010/10/07/i-am-not-an-entrepreneur/' rel='bookmark' title='I Am Not an Entrepreneur'>I Am Not an Entrepreneur</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>As with any product or service, the question of pricing is always one of the many challenges of selling a product or service. Many price their products or services low in an attempt to under cut their competition or initially sell a lot and get their name out there. Others charge way more than a person is willing to pay for such a product.</p>
<p>With iPhone development, more often than not, you&#8217;re selling a product as opposed to a service, which may be a compliment to your physical or web based service. If your iPhone app is a complimentary product to a service that you already offer and charge for, your iPhone app should probably be free (depending on complexity). Look at it as a value-added feature to put you above your competition and make using your service more convenient and enjoyable. By creating more ways to access your service, you provide more opportunity for your customers to use it more often and really benefit from what you&#8217;re trying to offer them.</p>
<p>So what&#8217;s the sweet spot for a price for your iPhone app? It obviously depends, but there are some guidelines we came up with.</p>
<h2>Be Unique with Your iPhone App</h2>
<p>The more unique your application is, the more you can sell it for. By being unique, you have less competition and thus a higher demand.</p>
<h2>Complexity of Your iPhone App</h2>
<p>If your application can be easily reproduced by a 16 year old kid on a weekend, you either shouldn&#8217;t charge for your application, or if you do, don&#8217;t charge more than a dollar because that 16 year old kid won&#8217;t.</p>
<h2>Proprietary</h2>
<p>If your application uses proprietary information, software, APIs or other technologies that aren&#8217;t easily implemented or obtained, you can charge more for your application. This relates to complexity, but be aware that people will often create equivalent systems if it&#8217;s popular enough so proprietary systems and information require a lot of maintenance to keep them relevant.</p>
<h2>Usefulness of Your Application</h2>
<p>How often will someone use your app? Is it just a novelty or something someone will only use for a certain chore that they rarely do? If so, the demand for the app diminishes and so should your price.</p>
<p>No application should be more than $10 with few exceptions. Remember that you&#8217;re developing for a mobile platform and the software is limited and your price should be limited too.</p>
<p>If it&#8217;s a game, how is the quality and length of game play? The quality, the game play and the fun factor all play a part in your price. Obviously, people much prefer spending money on entertainment than on a new fancy laundry list application. Games are usually unique (to the App Store at least), are complex and provide a greater satisfaction to buyers, which allows them to enjoy a higher price tag.</p>
<h2>Perspective</h2>
<p>Having a higher price on the App Store shows more confidence in your application. Giving your app away usually means you don&#8217;t think people would be even willing to spend the price of a soda on your application. These applications are fine, but for some of us, we need to make a living.</p>
<p>Making your app a dollar usually means, I want to make some money, but I don&#8217;t think people will pay any more for it. But charging a dollar can also be good if your app has a wide appeal. What you lack in big numbers, you make up with bulk sales. So, if it&#8217;s a game, you could potentially have a larger market as opposed to a utility application that the user spends 30 seconds on. So you really need to look hard at your application and keep several factors in mind before you price your app. You can always change it later, so one approach is to start low and see how sales go.</p>
<p><a href="http://www.mikeziray.com/2010/04/10/iphone-pricing/">iPhone Pricing</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>
<p>Related posts:<ol>
<li><a href='http://www.mikeziray.com/2010/01/16/how-to-program-for-the-iphone-a-plan/' rel='bookmark' title='How to Program for the iPhone &#8211; A Plan'>How to Program for the iPhone &#8211; A Plan</a></li>
<li><a href='http://www.mikeziray.com/2010/01/27/handling-your-initial-view-controllers-for-iphone/' rel='bookmark' title='Handling Your Initial View Controllers for iPhone'>Handling Your Initial View Controllers for iPhone</a></li>
<li><a href='http://www.mikeziray.com/2010/04/14/barninja-an-iphone-app-postmortem/' rel='bookmark' title='BarNinja &#8211; An iPhone App Postmortem'>BarNinja &#8211; An iPhone App Postmortem</a></li>
<li><a href='http://www.mikeziray.com/2010/10/07/i-am-not-an-entrepreneur/' rel='bookmark' title='I Am Not an Entrepreneur'>I Am Not an Entrepreneur</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.mikeziray.com/2010/04/10/iphone-pricing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
	</item>
		<item>
		<title>Handling Your Initial View Controllers for iPhone</title>
		<link>http://www.mikeziray.com/2010/01/27/handling-your-initial-view-controllers-for-iphone/?utm_campaign=feed&#038;utm_medium=feed&#038;utm_source=blog&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.mikeziray.com/2010/01/27/handling-your-initial-view-controllers-for-iphone/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 16:50:54 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[advice]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[appdelegate]]></category>
		<category><![CDATA[class diagram]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[program]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[singleton]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[tabbed bar controller]]></category>
		<category><![CDATA[viewcontrollers]]></category>

		<guid isPermaLink="false">http://www.mikeziray.com/?p=884</guid>
		<description><![CDATA[Programming starts with a design A lot of webpages and articles talk about how to program, but they don&#8217;t talk about how to design a program. Good program design separates the weekend programmers from the professionals. Sure, anyone can piece together a working application but a good design allows a power and flexibility of adding [...]<p><a href="http://www.mikeziray.com/2010/01/27/handling-your-initial-view-controllers-for-iphone/">Handling Your Initial View Controllers for iPhone</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>

Related posts:<ol>
<li><a href='http://www.mikeziray.com/2010/01/16/how-to-program-for-the-iphone-a-plan/' rel='bookmark' title='How to Program for the iPhone &#8211; A Plan'>How to Program for the iPhone &#8211; A Plan</a></li>
<li><a href='http://www.mikeziray.com/2010/12/06/ios-development-code-kitchen/' rel='bookmark' title='iOS Development Code Kitchen'>iOS Development Code Kitchen</a></li>
<li><a href='http://www.mikeziray.com/2010/07/01/why-your-code-sucks-naming-conventions/' rel='bookmark' title='Naming Conventions &#8211; Why Your Code Sucks'>Naming Conventions &#8211; Why Your Code Sucks</a></li>
<li><a href='http://www.mikeziray.com/2010/06/27/corona-game-template-in-lua/' rel='bookmark' title='Corona Game Template in Lua'>Corona Game Template in Lua</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h1>Programming starts with a</h1>
<h1>design</h1>
<p>A lot of webpages and articles talk about how to program, but they don&#8217;t talk about how to design a program. Good program design separates the weekend programmers from the professionals. Sure, anyone can piece together a working application but a good design allows a power and flexibility of adding new features, for example, without having to recode half of your application.</p>
<p>Here, we&#8217;ll talk about handling your initial views when your iPhone application loads. This might be a simple task if your application is simple, but take the case of having a welcome screen followed by a login screen followed by a tabbed view controller. You might set it up so that one activates the other upon being dismissed itself.</p>
<p>Here&#8217;s an example of how the process might look:</p>
<p>Program loads AppDelegate</p>
<p>Load Welcome view from AppDelegate</p>
<p>Dismiss Welcome view -&gt; Tell Welcome view to load Login view</p>
<p>Dismiss Login view -&gt; Tell Login view to load Tabbed view</p>
<p>What if you had to add a view or remove one, say if the login was no longer needed if you gave your users the option to save their credentials. You&#8217;d have to rewrite two different view controllers at least. And this is just a simple example so you can see how complicated this chain of views would get once your application grows. For most programmers this way is fine, and sadly enough most of the time, this is the way it&#8217;s done. But true programmers are lazy. Lazy programmers are good programmers. So be lazy and write good code so that when (not if) you go back and edit your code, it&#8217;ll be a snap.</p>
<h1>A design starts on paper</h1>
<p>Your programs should be conceived on paper. Even with applications that attempt to do this, I still find paper the ultimate programming tool (even though I did the one below on a computer).</p>
<div id="attachment_895" class="wp-caption aligncenter" style="width: 512px"><a href="http://www.mikeziray.com/blog/wp-content/uploads/2010/01/MultiViewExample.png?utm_campaign=feed&utm_medium=feed&utm_source=blog"><img class="size-full wp-image-895" title="Class Diagram" src="http://www.mikeziray.com/blog/wp-content/uploads/2010/01/MultiViewExample.png" alt="Class Diagram" width="502" height="426" /></a><p class="wp-caption-text">Class Diagram</p></div>
<p>First off, your controllers should be logically separated based on their tasks that they need to accomplish (not based on how the user will view them). So, you should have a controller or controllers to handle logging in and session creation and have appropriate UIViews and UIViewControllers to get and display info to your user. This may not be a one-to-one relationship though. For example, you may not have a UIViewController that&#8217;s associated with creating your sessions at all.</p>
<p>Next you will have your application&#8217;s business logic view controllers, controllers and all that jazz. The controllers sit independently to the view controllers except, of course, where there&#8217;s coupling or interaction. They are not tied directly, or rely upon any particular view. You illustrate those connections on paper (or in this case in the example diagram above). So if your &#8220;Add New Event&#8221; feature, let&#8217;s say, needs access to the session data, draw a line from your SessionController to your EventsController with an arrow pointing in the direction of the flow (from EventsController to SessionController in our case since the Events controller needs to know about the SessionController but not vise versa).</p>
<h1>Abstraction solves everything</h1>
<p>Since your controller code should be independent of how your views are laid out, you won&#8217;t have your AddNewEventViewController (the view that lets the user add an event) handling the actual creation and saving of events but will instead gathering and packaging the information taken from the user and given to an EventsController to handle the manipulation. Who knows, you may have several views that edit an Event in one way or another and if you change something in how the Event is saved, you&#8217;ll have to go into the code of each one that touches Event and rewrite code &#8212; exactly what we&#8217;re trying to avoid.</p>
<p>Abstracting the data in this way is called indirection and &#8220;<em>All problems in computer science can be solved by another level of indirection</em>;&#8221; &#8212; <a title="David Wheeler (computer scientist)" href="http://en.wikipedia.org/wiki/David_Wheeler_(computer_scientist)">David Wheeler</a>, except as <a title="Kevlin Henney" href="http://en.wikipedia.org/wiki/Kevlin_Henney">Kevlin Henney</a> says, <em>&#8220;&#8230;except for the problem of too many layers of indirection.&#8221;</em></p>
<h1>Singletons, under used</h1>
<h1>and under appreciated</h1>
<p>So, you should have a session controller that sits somewhere ready to be called by who ever needs to validate a session or login (those views that would need access could be your tabbed views, could be your app delegate when your app starts, or could be in your settings views where you type your login info or when you log out). This is usually accomplished with a <a href="http://en.wikipedia.org/wiki/Singleton_pattern" target="_blank">singleton </a>class where any controller can access that one (and only) instance of your controller without having to pass around references to that controller. It not only cleans up your code, but also helps data integrity by not allowing multiple objects to edit the same data.</p>
<h1>Handling your initial views</h1>
<p>You should really have a separate controller handle organizing your views rather than the app delegate since the app delegate should really only be used to initialize your app and handle delegation of your application, not controlling business logic. So the structure should look like:</p>
<p>AppDelegate -&gt; MainViewController -&gt; LoginViewController</p>
<p>I like to have an overall MainViewController that handles all the subviews, be it a tab bar view controller, a table view controller, or whatever your main view is going to be. This level of indirection allows you to easily change what your main view controller is later, should your requirements or ideas change. Having said that, the MainViewController is going to need to get and maintain a reference to the application&#8217;s window.</p>
<p>To actually add the views, stack them on top of each other. Add the Tab Bar Controller&#8217;s view to the Window&#8217;s view first, then if needed, add your login views after that to stack them on top, and then remove them as needed when you&#8217;re done with them. By removing them from the top, it reveals the bottom view.</p>
<p>In MainViewController&#8217;s implementation file, your viewDidLoad: will look like:</p>
<div class="codesnip-container" >
<div class="objc codesnip" style="font-family:monospace;"><span class="sy0">-</span> <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>viewDidLoad<br />
<span class="br0">&#123;</span><br />
<span class="br0">&#91;</span>super viewDidLoad<span class="br0">&#93;</span>;<br />
<span class="br0">&#91;</span>mainWindow addSubview<span class="sy0">:</span> tabBarController.view<span class="br0">&#93;</span>;<br />
<span class="br0">&#91;</span>mainWindow addSubview<span class="sy0">:</span> loginViewController.view<span class="br0">&#93;</span>;<br />
<span class="br0">&#91;</span>mainWindow addSubview<span class="sy0">:</span> welcomeViewController.view<span class="br0">&#93;</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p>Where mainWindow is an IBOutlet to your Window in your MainWindow.xib file (or you could get it programatically if you prefer). Also, loginViewController is a pointer to your view controller that you put on top of the tab bar controller. On top of your login view, put a welcome view displaying any text, graphics or video to show after your application loads; note that this is different from your Default.png initial image. Then when you&#8217;re done with your login view, call removeFromSuperview on them to remove them from the view stack. So something like this in your MainViewController (since it handles all manipulation of your main views):</p>
<div class="codesnip-container" >
<div class="objc codesnip" style="font-family:monospace;"><span class="sy0">-</span> <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>removeWelcomeView<br />
<span class="br0">&#123;</span><br />
<span class="br0">&#91;</span>welcomeViewController.view removeFromSuperview<span class="br0">&#93;</span>;<br />
<span class="co2">// Any other code you need to clean up after your welcome view is removed</span><br />
<span class="br0">&#125;</span><br />
<span class="sy0">-</span> <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>removeLoginView<br />
<span class="br0">&#123;</span><br />
<span class="br0">&#91;</span>loginViewController.view removeFromSuperview<span class="br0">&#93;</span>;<br />
<span class="co2">// Any other code you need to clean up after your login view is removed</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Obviously, when you remove the welcome screen view, under it (since you added it on the stack before the welcome view) is your login view. Then, removing the login view will show the tab bar view since that was added first in your view stack:</p>
<p>(Top)</p>
<p>Welcome View</p>
<p>Login View</p>
<p>Tab Bar View</p>
<p>This way we&#8217;re loading all of our views at once and stacking them so the one on top hides the one below. This has a slight overhead since you&#8217;re adding all your views when your applications starts but you can always delay adding the tab bar controller to the Window&#8217;s view until all the initial views are removed, for example. Then, if you&#8217;d like, using the MainViewController, you can add views on top of the tab bar view during execution, for example if you need to login again.</p>
<p>There are a few different ways to handle multiple views and each case is different. This is just one idea, with a few general guidelines. Feel free to ask any questions in the comments if anything wasn&#8217;t clear enough.</p>
<h2>Sample Code</h2>
<p>The following sample code is provided as is for educational and demonstration purposes. I threw it together really quickly and is only used to demonstrate the use of a MainViewController. Normally, you&#8217;ll want to make your MainViewController a singleton class, but in this example I passed the MainViewController instance to the subviews in order for them to call different methods on MainViewController to change the current views. By using a singleton design, you can avoid passing around this reference since there is only ever one MainViewController.</p>
<p>Also, this code demonstrates how to create a tab bar programmatically. It needs to be the root view of your window, but that doesn&#8217;t mean it needs to be the root view controller. We are still allowed to use a MainViewController as our root to handle all subviews and their controllers.</p>
<p><a href="http://www.mikeziray.com/blog/wp-content/uploads/2010/01/2010-02-11_TabBarTest.zip?utm_campaign=feed&utm_medium=feed&utm_source=blog">Download sample code (2010-02-11_TabBarTest.zip)</a></p>
<p><a href="http://www.mikeziray.com/2010/01/27/handling-your-initial-view-controllers-for-iphone/">Handling Your Initial View Controllers for iPhone</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>
<p>Related posts:<ol>
<li><a href='http://www.mikeziray.com/2010/01/16/how-to-program-for-the-iphone-a-plan/' rel='bookmark' title='How to Program for the iPhone &#8211; A Plan'>How to Program for the iPhone &#8211; A Plan</a></li>
<li><a href='http://www.mikeziray.com/2010/12/06/ios-development-code-kitchen/' rel='bookmark' title='iOS Development Code Kitchen'>iOS Development Code Kitchen</a></li>
<li><a href='http://www.mikeziray.com/2010/07/01/why-your-code-sucks-naming-conventions/' rel='bookmark' title='Naming Conventions &#8211; Why Your Code Sucks'>Naming Conventions &#8211; Why Your Code Sucks</a></li>
<li><a href='http://www.mikeziray.com/2010/06/27/corona-game-template-in-lua/' rel='bookmark' title='Corona Game Template in Lua'>Corona Game Template in Lua</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.mikeziray.com/2010/01/27/handling-your-initial-view-controllers-for-iphone/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
	
		<media:thumbnail url="http://www.mikeziray.com/blog/wp-content/uploads/2010/01/MultiViewExample-150x150.png" />
		<media:content url="http://www.mikeziray.com/blog/wp-content/uploads/2010/01/MultiViewExample.png" medium="image">
			<media:title type="html">Class Diagram</media:title>
			<media:description type="html">Class Diagram</media:description>
			<media:thumbnail url="http://www.mikeziray.com/blog/wp-content/uploads/2010/01/MultiViewExample-150x150.png" />
		</media:content>
	</item>
		<item>
		<title>How to Program for the iPhone &#8211; A Plan</title>
		<link>http://www.mikeziray.com/2010/01/16/how-to-program-for-the-iphone-a-plan/?utm_campaign=feed&#038;utm_medium=feed&#038;utm_source=blog&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.mikeziray.com/2010/01/16/how-to-program-for-the-iphone-a-plan/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 22:58:45 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[advice]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[article]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[core data]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[ipod]]></category>
		<category><![CDATA[itouch]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[objc]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[tableview]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.mikeziray.com/?p=813</guid>
		<description><![CDATA[This is not so much how to make applications for the iPhone, since there are so many on of those on the web already. This is more a syllabus on how to get started with the vast amount of information already out there and where to start from to quickly become proficient at iPhone development [...]<p><a href="http://www.mikeziray.com/2010/01/16/how-to-program-for-the-iphone-a-plan/">How to Program for the iPhone &#8211; A Plan</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>

Related posts:<ol>
<li><a href='http://www.mikeziray.com/2010/04/10/iphone-pricing/' rel='bookmark' title='iPhone Pricing'>iPhone Pricing</a></li>
<li><a href='http://www.mikeziray.com/2010/01/27/handling-your-initial-view-controllers-for-iphone/' rel='bookmark' title='Handling Your Initial View Controllers for iPhone'>Handling Your Initial View Controllers for iPhone</a></li>
<li><a href='http://www.mikeziray.com/2010/12/06/ios-development-code-kitchen/' rel='bookmark' title='iOS Development Code Kitchen'>iOS Development Code Kitchen</a></li>
<li><a href='http://www.mikeziray.com/2010/04/14/barninja-an-iphone-app-postmortem/' rel='bookmark' title='BarNinja &#8211; An iPhone App Postmortem'>BarNinja &#8211; An iPhone App Postmortem</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mikeziray.com/blog/wp-content/uploads/2010/01/iphone_views.png?utm_campaign=feed&utm_medium=feed&utm_source=blog"><img class="aligncenter size-full wp-image-862" title="iphone" src="http://www.mikeziray.com/blog/wp-content/uploads/2010/01/iphone_views.png" alt="" width="360" height="192" /></a></p>
<p>This is not so much how to make applications for the iPhone, since there are so many on of those on the web already. This is more a syllabus on how to get started with the vast amount of information already out there and where to start from to quickly become proficient at iPhone development without getting frustrated or discouraged.</p>
<h2>Development Requirements</h2>
<p>An Intel-based Apple Mac<br />
$99 (optional &#8211; if you want to actually publish your app)<br />
That&#8217;s all!</p>
<h2>Apple Developer Account</h2>
<p>Development for the iPhone is initially free. So feel free to head over to <a href="http://developer.apple.com" target="_blank">http://developer.apple.com</a> and sign up for a developer account if you don&#8217;t already have one. This will give you access to the Integrated Development Environment (IDE) called XCode, which is required to develop applications for the iPhone and iPod Touch. It also serves as a treasure chest of free information, sample code, tutorials, how-to videos and news, all of which I&#8217;ll talk about how to use later.</p>
<p>Once you&#8217;ve signed up for a developer account, you&#8217;ll need to download XCode and install it on your Mac. PC users are, as they always are, out of luck since a Mac is required for development. Once that&#8217;s done, put it aside as you won&#8217;t need it for a bit.</p>
<h2>Learn to Program</h2>
<h3>An Important Design Pattern: Model View Controller</h3>
<p>If you already know how to program a little bit, but haven&#8217;t gone through the rigors of a four year university Computer Science degree or something similar, start with learning an important design patterns, namely one called <a href="http://developer.apple.com/iphone/library/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html" target="_blank">Model View Controller</a> (MVC). Of course, a 4-year degree is not necessary, but you need to understand basic software engineering principles, design patterns and basic usability practices, which practically none of the programming tutorials, books and online articles teach. Also, a lot of practice helps as you&#8217;ll learn how to fix non-obvious compiler and runtime errors, how to structure your code, and pitfalls of each language you use.</p>
<h3>Objective-C: The Language of Choice</h3>
<p>After you understand the basic principle of MVC, you can then move on to learning the language of choice, Objective-C. Why Objective-C? Why didn&#8217;t Apple just choose a common language like C++ or Java? The reasons will become obvious as you learn about the language, it&#8217;s power, and how it fits into the MVC methodology better than any other language you&#8217;ve likely seen before. So here&#8217;s a nice tutorial on <a href="http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html" target="_blank">how to program in Objective-C</a>.</p>
<p>If you already have a great understanding of programming and know a C-based langauge, skip the lengthy tutorial and <a href="http://developer.apple.com/iphone/library/referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/" target="_blank">take a look at this primer</a> to get a sense of the additions to C that Objective-C brings to the table. For most people who are familiar with a C-based language, this will be all you need to get started.</p>
<p><span id="more-813"></span></p>
<h3>The Cocoa Framework: Because Reinventing the Wheel is for Marketing Types</h3>
<p>Ok, great. Now you speak the language, but you need to know the framework and how the language leverages this technology so you don&#8217;t have to reinvent the wheel. Take a look at <a href="http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CocoaFundamentals/Introduction/Introduction.html" target="_blank">Cocoa Fundamentals</a> to learn how the fundamentals of Cocoa work. The Cocoa framework is a superset of the Cocoa Touch framework that is specialized to fit the paradigm and requirements of the iPhone and iPod Touch devices. Knowledge of the Cocoa framework is essential to understanding how to use such things as data structures and containers, user interface (UI) elements and the rich built-in functionality that all these components offer you for free. Many of the Cocoa framework elements carry over into Cocoa Touch, such as strings, CoreData, CoreAudio, CoreAnimation and concepts such as delegation, protocols, interfaces and application bundles.</p>
<h3>XCode Tools: The Real Workers</h3>
<p>Once you know how to speak the language and use the technology, you need to know how to use the tools to make it all happen. Here&#8217;s another Apple document that explains <a href="http://developer.apple.com/iphone/library/documentation/DeveloperTools/Conceptual/A_Tour_of_Xcode/000-Introduction/qt_intro.html" target="_blank">what XCode is and how to use it</a>. Even if you&#8217;ve worked in XCode before, it&#8217;s worth checking out as XCode is a powerful code editor, debugger and provides a host of other tools and features. If you&#8217;re interested in what else XCode has to offer, there&#8217;s a more detailed explanation of <a href="http://developer.apple.com/iphone/library/documentation/DeveloperTools/Conceptual/XcodeWorkspace/000-Introduction/Introduction.html" target="_blank">the other tools that come with XCode</a>.</p>
<h3>Your First iPhone Application</h3>
<p>You need to keep in mind that even though this is a lot of information to process, if you&#8217;re unfamiliar with the platform, it&#8217;s all very intuitive and will become second nature with a little practice and time. Just keep looking at a little bit every day and re-read some of the things you read early on. No one can learn a foreign language in a week, so don&#8217;t expect to be fluent in everything Objective-C and Cocoa in less than that. Spend a little time with it every day, go through sample code that interests you, read developer forums to see what other people are having trouble with and come up with a few of your own app ideas just to put all this theory to work. You never truly learn something until you have to use it in the real world.</p>
<p>So now that you have made all the theory, concepts and language familiar to you, you can cement it in your brain with <a href="http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhone101/Articles/01_Overview.html" target="_blank">your first iPhone application</a>. This tutorial will cover most of the concepts you already learned (repetition is the key to really cementing that knowledge) but it will also show how they all tie together, which is the most important part. Don&#8217;t just copy and paste the code. You don&#8217;t have to memorize it, but typing it out really helps you recognize the code later when you have to use it on your own.</p>
<h2>Beyond the Basics</h2>
<p>This is where most tutorials stop. They pat you on the back, call you an iPhone developer and send you on your way to flail your way through haphazard development. All you really know however is how to put a few buttons on the screen and make them do something stupid (which admittedly is most of the apps that are available on the app store). There&#8217;s a lot more you need to know to be truly dangerous.</p>
<h3>Usabilty on the iPhone: The Apple Human Interface Guidelines (HIG)</h3>
<p>Take an afternoon and sit down and read <a href="http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/MobileHIG/Introduction/Introduction.html" target="_blank">the Apple Human Interface Guidelines</a>. This will give you a slew of iPhone capabilities, but more importantly, it&#8217;ll give you a sense of how to properly use the interface elements of the iPhone. Nothing shows an amateur or know-nothing developer than an improper use of an interface element or using a certain interface element because it looks or acts cool (anyone remember the drawer?).</p>
<h2>Developing iPhone Apps:</h2>
<h2>Gather those Building Blocks</h2>
<h3>Create an iPhone Utility Application</h3>
<p>iPhone utility applications are the easiest to understand. They have two views, a front side and a back side. This type of app is great for learning how two views can communicate without worrying about complex data structures, implementing confusing protocols or dealing with the frustration when your code compiles, but doesn&#8217;t work. You can also experiment with new technologies such as CoreData, CoreAnimation, CoreAudio, WebViews, playing music or anything else you&#8217;re interested in without the overhead of managing views and other complexities like that. Keep it simple and think of a few ideas that fit the paradigm of an iPhone utility application.</p>
<h3>Navigation Controller: Controlling Presentation</h3>
<p>After you&#8217;ve successfully completed a working iPhone utility application, the next and most common interface technology is <a href="http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/CombiningViewControllers/CombiningViewControllers.html" target="_blank">the Navigation Controller</a>. This is the controller that allows you to hit a button and have a new view slide in from the right. I love this controller because it adds a lot of functionality to your app without a lot of work. Simply allocate a new view, push it onto the navigation controller and release it because the navigation controller does the rest.</p>
<h3>Tab Bar Controller: Multiple Sections in One App</h3>
<p><a href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITabBarController_Class/Reference/Reference.html" target="_blank">The Tab Bar Controller</a> is a great way to segment your applications into features. It&#8217;s a bit trickier to set up, but once you know how it works it&#8217;s intuitive and flexible. For example, you can use the views that Interface Builder gives you to drop your UI elements onto, or you can tell Interface Builder to load a particular View Controller of your choice. It greatly extends your application&#8217;s functionality with minimal work.</p>
<h3>Tableview Controller Class: Displaying Your Data</h3>
<p><a href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITableViewController_Class/Reference/Reference.html" target="_blank">Table views</a> are a bit more complex and involve a bit more understanding but it&#8217;s hard to get far in iPhone development without using a tableview. <a href="http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/TableView_iPhone/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007451-CH1-SW1" target="_blank">Invest the time to understand these creatures</a> and it&#8217;ll give you a nice return on your investment. Take a look at the <a href="http://developer.apple.com/iphone/library/samplecode/TableViewSuite/index.html" target="_blank">TableViewSuite sample code</a> to learn how to do everything you ever wanted to with table views.</p>
<h3>Tool Bar: Making Your App Accomplish Something Useful</h3>
<p>Applications need to do something useful besides editing data. Sometimes you may want to do something a little bit different and adding <a href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIToolbar_Class/Reference/Reference.html" target="_blank">a tool bar</a> to your application is a great way to add a different kind of functionality. It&#8217;s simple to use and gives you a standard way to manipulate data in your application.</p>
<h3>Core Data: Handling Lots of Data Without Too Much Real Work</h3>
<p>A lot of your app ideas are going to be based on having lots of useful data that needs to be displayed and manipulated and <a href="http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/CoreData_ObjC/" target="_blank">Core Data</a> is the easiest, most flexible and optimized way to do that. So spend some time and read <a href="http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreData/cdProgrammingGuide.html" target="_blank">the Core Data Programming Guide</a>. Secondly, it&#8217;s important to learn how to use a <a href="http://developer.apple.com/iphone/library/documentation/CoreData/Reference/NSFetchedResultsControllerDelegate_Protocol/Reference/Reference.html" target="_blank">fetch results controller</a> as it will allow you to display your data in a tableview in a simpler way than straight out of the fetch request. It will also give you the functionality of indexed tableviews for free (as seen in the Contacts application).</p>
<p><a href="http://www.mikeziray.com/blog/wp-content/uploads/2010/01/iPhone_font_back.png?utm_campaign=feed&utm_medium=feed&utm_source=blog"><img class="aligncenter size-full wp-image-865" title="iPhone font and back" src="http://www.mikeziray.com/blog/wp-content/uploads/2010/01/iPhone_font_back.png" alt="" width="309" height="360" /></a></p>
<h2>More Programming for iPhone</h2>
<p>This is the one of the best paths to picking up programming for the iPhone. It starts you off with the most useful items without overwhelming you. However, it does take a lot of time to read and a little more than that to understand, but take it slowly, look at it over a course of several weeks and soon you&#8217;ll be able to add anything to your application by only reading the API references.</p>
<p>There are a ton of things that you&#8217;ll need to learn in order to be an effective developer, so in future articles I&#8217;ll take what I&#8217;ve learned, some pitfalls and neat tricks and show you some of the basic stuff that you can&#8217;t find in the Apple developer documentation such as handling common problems, design patterns and usability pitfalls.</p>
<p>After all of this, you&#8217;re still not done. You&#8217;ve only grasped the basics, but at this point, the real challenge is not understanding the technologies, it&#8217;s figuring out where to go from here: what should you learn next, how can you get started programming a real app, and most importantly how you can make a lot of money. All of this will be covered in future articles as this one is too long already, but I will leave you with some of my favorite links. In the mean time, subscribe via RSS or email to get future articles on iPhone and everything else I do. Finally, frequent the Apple developer forums and try to answer some of the questions there. You won&#8217;t always know the answer, but a little research and you will be able to figure it out and learn in the process.</p>
<h2>Additional Links</h2>
<p><a href="http://stackoverflow.com/questions/tagged/iphone" target="_blank">Stack Overflow</a> &#8211; A great site for asking programming questions of all kinds.</p>
<p><a href="http://www.iphonedevsdk.com/" target="_blank">iPhone Dev SDK</a> &#8211; Forum-based site for asking and answering everything iPhone related.</p>
<p><a href="http://www.iphonesdkarticles.com/" target="_blank">iPhone SDK Articles</a> &#8211; Blog-based site with lots of useful and informative examples on iPhone development.</p>
<h2>My Apple Background</h2>
<p>I&#8217;ve been developing Mac applications since 2003, attending WWDC 2004 and 2005. I&#8217;m the author of several small Mac applications including a Terminal GUI tool that&#8217;s been quite popular in the past. I have taught Code Kitchens at Virginia Tech on Cocoa through the Mac Users Group and I use to sell, support, demonstrate and evangelize Apple products to college kids as an Apple Campus Rep. I&#8217;m now an independent developer, working in partnership with LTZ, a company started to give independent developers and free thinkers a platform and voice from which to launch their apps or app ideas.</p>
<p><a href="http://www.mikeziray.com/2010/01/16/how-to-program-for-the-iphone-a-plan/">How to Program for the iPhone &#8211; A Plan</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>
<p>Related posts:<ol>
<li><a href='http://www.mikeziray.com/2010/04/10/iphone-pricing/' rel='bookmark' title='iPhone Pricing'>iPhone Pricing</a></li>
<li><a href='http://www.mikeziray.com/2010/01/27/handling-your-initial-view-controllers-for-iphone/' rel='bookmark' title='Handling Your Initial View Controllers for iPhone'>Handling Your Initial View Controllers for iPhone</a></li>
<li><a href='http://www.mikeziray.com/2010/12/06/ios-development-code-kitchen/' rel='bookmark' title='iOS Development Code Kitchen'>iOS Development Code Kitchen</a></li>
<li><a href='http://www.mikeziray.com/2010/04/14/barninja-an-iphone-app-postmortem/' rel='bookmark' title='BarNinja &#8211; An iPhone App Postmortem'>BarNinja &#8211; An iPhone App Postmortem</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.mikeziray.com/2010/01/16/how-to-program-for-the-iphone-a-plan/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:thumbnail url="http://www.mikeziray.com/blog/wp-content/uploads/2010/01/iphone_views-150x150.png" />
		<media:content url="http://www.mikeziray.com/blog/wp-content/uploads/2010/01/iphone_views.png" medium="image">
			<media:title type="html">iphone</media:title>
			<media:thumbnail url="http://www.mikeziray.com/blog/wp-content/uploads/2010/01/iphone_views-150x150.png" />
		</media:content>
		<media:content url="http://www.mikeziray.com/blog/wp-content/uploads/2010/01/iPhone_font_back.png" medium="image">
			<media:title type="html">iPhone font and back</media:title>
			<media:thumbnail url="http://www.mikeziray.com/blog/wp-content/uploads/2010/01/iPhone_font_back-150x150.png" />
		</media:content>
	</item>
		<item>
		<title>Dynamic Textfields in Flash AS3 and Their Bugs</title>
		<link>http://www.mikeziray.com/2009/10/19/dynamic-textfields-in-flash-as3-and-their-bugs/?utm_campaign=feed&#038;utm_medium=feed&#038;utm_source=blog&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.mikeziray.com/2009/10/19/dynamic-textfields-in-flash-as3-and-their-bugs/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 13:47:42 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[advice]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[Action Script]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[fonts]]></category>
		<category><![CDATA[foreign]]></category>
		<category><![CDATA[localization]]></category>
		<category><![CDATA[localize]]></category>
		<category><![CDATA[macromedia]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[text field]]></category>
		<category><![CDATA[translate]]></category>
		<category><![CDATA[translation]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.mikeziray.com/?p=716</guid>
		<description><![CDATA[I do a ton of localizations for web-based media (over 30 countries) and have run across several bugs in Flash where the characters don&#8217;t show up for certain fonts, especially for translations with non-latin characters (such as Russian, Chinese, Japanese and even Hungarian and German). I always complain about them, and instead of just complaining, [...]<p><a href="http://www.mikeziray.com/2009/10/19/dynamic-textfields-in-flash-as3-and-their-bugs/">Dynamic Textfields in Flash AS3 and Their Bugs</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>

Related posts:<ol>
<li><a href='http://www.mikeziray.com/2008/03/10/tech-update/' rel='bookmark' title='Tech Update'>Tech Update</a></li>
<li><a href='http://www.mikeziray.com/2009/05/30/custom-mouse-cursor-for-actionscript-3/' rel='bookmark' title='Custom Mouse Cursor for ActionScript 3'>Custom Mouse Cursor for ActionScript 3</a></li>
<li><a href='http://www.mikeziray.com/2009/01/29/fixing-whats-not-broken-a-user-centric-perspective/' rel='bookmark' title='Fixing What&#8217;s Not Broken: A User-Centric Perspective'>Fixing What&#8217;s Not Broken: A User-Centric Perspective</a></li>
<li><a href='http://www.mikeziray.com/2009/07/31/whats-wrong-with-this-scuba-diver/' rel='bookmark' title='What&#8217;s Wrong with this Scuba Diver?'>What&#8217;s Wrong with this Scuba Diver?</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I do a ton of localizations for web-based media (over 30 countries) and have run across several bugs in Flash where the characters don&#8217;t show up for certain fonts, especially for translations with non-latin characters (such as Russian, Chinese, Japanese and even Hungarian and German). I always complain about them, and instead of just complaining, I figured I&#8217;d share some of the solutions since they&#8217;re bugs in Flash and may not have obvious solutions.</p>
<h2>Obvious Solutions</h2>
<p>The obvious solution when you have a dynamic text field, that is either driven from XML, RSS, or other external document or data source, is to embed the font&#8217;s character sets. Obviously if you are going to be using Korean in your Flash application, you want to embed the Korean character sets so the Korean characters show up in the font you have chosen. However, with so much emphasis on branding these days, not all specialized fonts have characters in Korean.</p>
<p>For example, the Star Wars Jedi font that I once worked with has absolutely no other characters beyond A-Z, a-z and numerals. Forget Spanish and it&#8217;s tildes, forget German and its umlauts, but Russian?! Ha! Everyone knows there were no Russian Jedis! So, what to do?<br />
<span id="more-716"></span></p>
<h2>Dynamic Font Swap!</h2>
<p>There are several nuances to Flash character embedding (ok, there&#8217;s probably a few hundred as I find at least one new one a week). Unfortunately Star Wars applications with the Jedi font won&#8217;t work in any language but High Schooler English since they don&#8217;t use punctuation either. So we have to change the font to something more appropriate if we want to use another language. Here&#8217;s the ActionScript 3 (AS3) code, which I&#8217;ll explain a bit after:</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="co1">// Get previous text format from text field to save other settings</span><br />
<span class="kw2">var</span> newTextFormat:<span class="kw3">TextFormat</span> = theTextField_txt.<span class="kw3">getTextFormat</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</div>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="co1">// Change font size if applicable</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span> fontSize_num <span class="sy0">!</span>= 0 <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
newTextFormat.<span class="kw3">size</span> = fontSize_num;<br />
<span class="br0">&#125;</span><br />
<span class="co1">// If we need to replace the font, do that here</span><br />
<span class="kw1">if</span><span class="br0">&#40;</span> isSpecialCharacterSet_bool <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
newTextFormat.<span class="kw3">font</span> = defaultFont_str; <span class="co1">// set font</span><br />
newTextFormat.<span class="kw3">bold</span> = <span class="kw2">false</span>;<br />
newTextFormat.<span class="me1">kerning</span> = <span class="kw2">false</span>;</p>
<p>theTextField_txt.<span class="kw3">embedFonts</span> = <span class="kw2">false</span>; &nbsp;<span class="co1">// kill the embedded font</span><br />
theTextField_txt.<span class="me1">rotation</span> = <span class="nu0">0</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;">theTextField_txt.<span class="kw3">setTextFormat</span><span class="br0">&#40;</span> newTextFormat <span class="br0">&#41;</span>; <span class="co1">// Apply altered text format</span></div>
</div>
<p>Ok, so what does that all mean? We take the textfield&#8217;s font properties (say, Jedi Font, size 14pt, embedded characters, etc) and alter some of the properties we need to so that our application can speak to our Russian Jedi friends. This particular code will accept a fontsize_num variable in case you want to alter the font size of the text so that it will fit within the given textbox because we all know Russian Jedi Masters are sometimes really wordy!</p>
<p>Next, we have a variable isSpecialCharacterSet_bool, that if true, will execute the font swap that we need. You can set this variable via XML to control, on a per language basis (having a separate XML file per language), if you want to swap fonts. After that is the defaultFont_str variable, which we can also set via XML to determine which font we want to use as a replacement of our Star Wars Jedi font. Recommended fonts are _sans, _serif, Arial and Helvetica as those are fonts that include almost every character known to modern languages.</p>
<p>Then, we turn off bold because, believe it or not, a bolded font is an entirely different character set and causes all sorts of other problems. We also turn off kerning because it&#8217;s a ridiculous feature that doesn&#8217;t work and I guarantee will mess up your dynamic text fields, foreign or otherwise.</p>
<p>The next two lines are super important:</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;">theTextField_txt.<span class="kw3">embedFonts</span> = <span class="kw2">false</span>; &nbsp;<span class="co1">// kill the embedded font</span><br />
theTextField_txt.<span class="me1">rotation</span> = <span class="nu0">0</span>;</div>
</div>
<p>Unless you embed ALL the font characters that Flash will let you, you won&#8217;t have your foreign language characters, which I don&#8217;t recommend anyway due to a huge increase in file size and also for the fact that it still won&#8217;t work (I&#8217;ve tried, trust me on this one). So, even though everyone has _sans, _serif, Arial and Helvetica on their computer (which allows us to display the characters without embedding them), if you DO embed some character sets, it won&#8217;t show up. Go ahead, create a dynamic text field in Arial, embed A-Z, a-z, numerals and punctuation and watch it NOT show up when you assign a string in Russian to it. Go back, click &#8220;Don&#8217;t Embed&#8221; on the textfield and watch as your Russian characters show up again. So, we programmatically disallow fonts from being embedded.</p>
<p>Another thing you&#8217;d think Adobe could have gotten right but doesn&#8217;t seem to care about the non-English speaking community, a.k.a. the 6 billion other people on this planet, is the bug that if a foreign character exists in a textfield that is even slightly rotated, the entire textfield disappears. So, thank you Adobe for wasting my time with your poorly programmed textfields. The trick though, is to simply make the textfield&#8217;s rotation 0. Strangest thing ever, but give it a try if you don&#8217;t believe me. And if the textfield&#8217;s parent movieclip is rotated, not your child textfield within said MC, try:</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;">theTextField_txt.<span class="me1">parent</span>.<span class="me1">rotation</span> = <span class="nu0">0</span>;</div>
</div>
<p>You can also programatically set the multiline property if translated text seems to be a bit wordy. But you should probably have set up your textfields to handle the expanded text anyway.</p>
<p>Put that code into a function and throw the textfield at it and additionally the font size (which I usually get from the XML node&#8217;s property). Unfortunately, you have to do this for every textfield and every time you set the text, but if you plan and build your Flash applications correctly, this should be a simple addition to your application framework. If it&#8217;s not obvious, let me know and I&#8217;ll write another article on best practices for localizing your Flash applications.</p>
<h2>Flash Textfields Are Still Broken!</h2>
<p>What isn&#8217;t broken in Flash? If you&#8217;ve delved deeper into Flash than simple animations, you&#8217;ve more than likely run into several on your own. Most of the time, restarting Flash will work, but other times, some detective work must be done in order to sort out the workarounds.</p>
<h4>Masked fonts</h4>
<p>If your dynamic textfield is masked, in anyway, fonts won&#8217;t show up if you disallow font embedding. Why? Well isn&#8217;t it obvious? Flash is broken. So, don&#8217;t mask your fonts if you want them to work internationally.</p>
<p>So many thanks to Adobe, we enjoy overpaying for your products so that they&#8217;re full of bugs. I&#8217;ve worked in Flash since the late 90s and I can&#8217;t remember them EVER releasing a patch for it. Just a new version that you have to pay several hundred dollars for. So my advice is to use an open standard for your applications and websites since those always support international languages.</p>
<h2>Did you find this useful?</h2>
<p>If you found this page useful, please consider helping us out by checking out the links on the right. Thanks!</p>
<p><a href="http://www.mikeziray.com/2009/10/19/dynamic-textfields-in-flash-as3-and-their-bugs/">Dynamic Textfields in Flash AS3 and Their Bugs</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>
<p>Related posts:<ol>
<li><a href='http://www.mikeziray.com/2008/03/10/tech-update/' rel='bookmark' title='Tech Update'>Tech Update</a></li>
<li><a href='http://www.mikeziray.com/2009/05/30/custom-mouse-cursor-for-actionscript-3/' rel='bookmark' title='Custom Mouse Cursor for ActionScript 3'>Custom Mouse Cursor for ActionScript 3</a></li>
<li><a href='http://www.mikeziray.com/2009/01/29/fixing-whats-not-broken-a-user-centric-perspective/' rel='bookmark' title='Fixing What&#8217;s Not Broken: A User-Centric Perspective'>Fixing What&#8217;s Not Broken: A User-Centric Perspective</a></li>
<li><a href='http://www.mikeziray.com/2009/07/31/whats-wrong-with-this-scuba-diver/' rel='bookmark' title='What&#8217;s Wrong with this Scuba Diver?'>What&#8217;s Wrong with this Scuba Diver?</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.mikeziray.com/2009/10/19/dynamic-textfields-in-flash-as3-and-their-bugs/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
	</item>
		<item>
		<title>What&#8217;s Wrong with this Scuba Diver?</title>
		<link>http://www.mikeziray.com/2009/07/31/whats-wrong-with-this-scuba-diver/?utm_campaign=feed&#038;utm_medium=feed&#038;utm_source=blog&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.mikeziray.com/2009/07/31/whats-wrong-with-this-scuba-diver/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 23:06:11 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[advice]]></category>
		<category><![CDATA[photos]]></category>
		<category><![CDATA[scuba]]></category>
		<category><![CDATA[blacksburg]]></category>
		<category><![CDATA[diver]]></category>
		<category><![CDATA[florida]]></category>
		<category><![CDATA[keys]]></category>
		<category><![CDATA[nrv]]></category>
		<category><![CDATA[photo]]></category>
		<category><![CDATA[virginia]]></category>

		<guid isPermaLink="false">http://www.mikeziray.com/?p=667</guid>
		<description><![CDATA[The diver in the photo below just cracked me up when I saw him. At first I only noticed his backup regulator hanging down and for the fact that he was almost literally walking on the sea floor. So, I took this snap shot and only later noticed that his tank strap is not secured [...]<p><a href="http://www.mikeziray.com/2009/07/31/whats-wrong-with-this-scuba-diver/">What&#8217;s Wrong with this Scuba Diver?</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>

Related posts:<ol>
<li><a href='http://www.mikeziray.com/2009/03/14/cavewreck-diving-techniques-for-the-rest-of-us/' rel='bookmark' title='Cave/Wreck Diving Techniques for the Rest of Us'>Cave/Wreck Diving Techniques for the Rest of Us</a></li>
<li><a href='http://www.mikeziray.com/2009/04/13/first-dive-2009-new-river/' rel='bookmark' title='First Dive 2009 &#8211; New River'>First Dive 2009 &#8211; New River</a></li>
<li><a href='http://www.mikeziray.com/2009/10/21/florida-scuba-molasses-reef-062809/' rel='bookmark' title='Florida Scuba: Molasses Reef (06/28/09)'>Florida Scuba: Molasses Reef (06/28/09)</a></li>
<li><a href='http://www.mikeziray.com/2009/10/22/florida-scuba-pleasure-reef-062809/' rel='bookmark' title='Florida Scuba: Pleasure Reef (06/28/09)'>Florida Scuba: Pleasure Reef (06/28/09)</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">The diver in the photo below just cracked me up when I saw him. At first I only noticed his backup regulator hanging down and for the fact that he was almost literally walking on the sea floor. So, I took this snap shot and only later noticed that his tank strap is not secured either.</p>
<p style="text-align: center;"><img class="aligncenter size-large wp-image-666" title="Bad Scuba Diver" src="http://www.mikeziray.com/blog/wp-content/uploads/2009/07/PICT0035-768x1024.jpg" alt="Bad Scuba Diver" width="614" height="819" /></p>
<p style="text-align: left;">
<p style="text-align: left;">The first thing you will notice about really bad scuba divers is loose gear flopping about. Not only does it look ridiculous, it&#8217;s also dangerous when they need to reach for their backup regulator and realize it&#8217;s floating behind them somewhere. Also, the back up regulator is suppose to be attached somewhere on the divers chest, so that if the dive buddy requires help, they can find and grab the other diver&#8217;s backup, unless of course it&#8217;s floating behind your dive buddy somewhere. In other words, don&#8217;t be this guy&#8217;s dive buddy.</p>
<p style="text-align: left;">Finally, don&#8217;t walk on the ocean floor. Not only is it bad style, it&#8217;s destructive and just plain stupid.</p>
<p style="text-align: left;">
<p style="text-align: left;">
<p><a href="http://www.mikeziray.com/2009/07/31/whats-wrong-with-this-scuba-diver/">What&#8217;s Wrong with this Scuba Diver?</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>
<p>Related posts:<ol>
<li><a href='http://www.mikeziray.com/2009/03/14/cavewreck-diving-techniques-for-the-rest-of-us/' rel='bookmark' title='Cave/Wreck Diving Techniques for the Rest of Us'>Cave/Wreck Diving Techniques for the Rest of Us</a></li>
<li><a href='http://www.mikeziray.com/2009/04/13/first-dive-2009-new-river/' rel='bookmark' title='First Dive 2009 &#8211; New River'>First Dive 2009 &#8211; New River</a></li>
<li><a href='http://www.mikeziray.com/2009/10/21/florida-scuba-molasses-reef-062809/' rel='bookmark' title='Florida Scuba: Molasses Reef (06/28/09)'>Florida Scuba: Molasses Reef (06/28/09)</a></li>
<li><a href='http://www.mikeziray.com/2009/10/22/florida-scuba-pleasure-reef-062809/' rel='bookmark' title='Florida Scuba: Pleasure Reef (06/28/09)'>Florida Scuba: Pleasure Reef (06/28/09)</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.mikeziray.com/2009/07/31/whats-wrong-with-this-scuba-diver/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:thumbnail url="http://www.mikeziray.com/blog/wp-content/uploads/2009/07/PICT0035-150x150.jpg" />
		<media:content url="http://www.mikeziray.com/blog/wp-content/uploads/2009/07/PICT0035.JPG" medium="image">
			<media:title type="html">Bad Scuba Diver</media:title>
			<media:thumbnail url="http://www.mikeziray.com/blog/wp-content/uploads/2009/07/PICT0035-150x150.jpg" />
		</media:content>
	</item>
		<item>
		<title>Custom Mouse Cursor for ActionScript 3</title>
		<link>http://www.mikeziray.com/2009/05/30/custom-mouse-cursor-for-actionscript-3/?utm_campaign=feed&#038;utm_medium=feed&#038;utm_source=blog&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.mikeziray.com/2009/05/30/custom-mouse-cursor-for-actionscript-3/#comments</comments>
		<pubDate>Sat, 30 May 2009 20:54:38 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[advice]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[comment]]></category>
		<category><![CDATA[cursor]]></category>
		<category><![CDATA[drag]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[listener]]></category>
		<category><![CDATA[macromedia]]></category>
		<category><![CDATA[mouse]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.mikeziray.com/?p=623</guid>
		<description><![CDATA[I threw together an FLA for someone to show them the different ways to handle custom mouse cursors in ActionScript 3 (AS3). I figured I should start posting more of my code for people since I use other people&#8217;s blogs all the time to figure out my own problems. I&#8217;m mostly coding up stuff for [...]<p><a href="http://www.mikeziray.com/2009/05/30/custom-mouse-cursor-for-actionscript-3/">Custom Mouse Cursor for ActionScript 3</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>

Related posts:<ol>
<li><a href='http://www.mikeziray.com/2009/10/19/dynamic-textfields-in-flash-as3-and-their-bugs/' rel='bookmark' title='Dynamic Textfields in Flash AS3 and Their Bugs'>Dynamic Textfields in Flash AS3 and Their Bugs</a></li>
<li><a href='http://www.mikeziray.com/2010/07/01/why-your-code-sucks-naming-conventions/' rel='bookmark' title='Naming Conventions &#8211; Why Your Code Sucks'>Naming Conventions &#8211; Why Your Code Sucks</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I threw together an FLA for someone to show them the different ways to handle custom mouse cursors in ActionScript 3 (AS3). I figured I should start posting more of my code for people since I use other people&#8217;s blogs all the time to figure out my own problems.</p>
<p>I&#8217;m mostly coding up stuff for Flash, Flex, Augmented Reality, iPhone, PHP, and CSS/HTML right now so hopefully I&#8217;ll have the time to post more snippets of things I&#8217;ve figured out trying to get all this technology to work.</p>
<p>
<object width="550" height="400">
<param name="movie" value="http://www.mikeziray.com/blog/wp-content/uploads/2009/05/customcursor_cs3.swf"></param>
<param name="quality" value="high"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="allowScriptAccess" value="always"></param>
<embed type="application/x-shockwave-flash" width="550" height="400" src="http://www.mikeziray.com/blog/wp-content/uploads/2009/05/customcursor_cs3.swf" quality="high" bgcolor="#FFFFFF" wmode="window" menu="false" ></embed>
</object>
</p>
<h2>Direct Access to the X and Y Mouse Coordinates</h2>
<p>The first method allows us a finer control over the movement of the cursor by directly changing the X and Y coordinates of the cursor movieclip with the X and Y coordinates of the mouse. If we wanted to restrict the movement to say, a specific Y coordinate (as we&#8217;ll see in the next example), we can do that just as easily by keeping the target_mc.y a constant when we update it&#8217;s X coordinate.</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="co1">// Set up our listeners for each of our mouse actions</span><br />
boundary_mc.<span class="me1">addEventListener</span><span class="br0">&#40;</span> MouseEvent.<span class="me1">MOUSE_OVER</span>,<br />
onMouseOver <span class="br0">&#41;</span>;<br />
boundary_mc.<span class="me1">addEventListener</span><span class="br0">&#40;</span> MouseEvent.<span class="me1">MOUSE_OUT</span>,<br />
onMouseOut &nbsp;<span class="br0">&#41;</span>;</div>
</div>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="co1">// Ignores all sub movie clips and treats them as the parent</span><br />
<span class="co1">//&nbsp; &nbsp; &nbsp; &#8212; otherwise events will be triggered on the child</span><br />
<span class="co1">//&nbsp; &nbsp; &nbsp; movieclips and not our main clip</span><br />
target_mc.<span class="me1">mouseChildren</span> &nbsp; = <span class="kw2">false</span>;<br />
boundary_mc.<span class="me1">mouseChildren</span> = <span class="kw2">false</span>;</div>
</div>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;">&nbsp;</div>
</div>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="co1">// Ignore all the mouse events for the cursor</span><br />
<span class="co1">//&nbsp; &nbsp; &nbsp; &#8212; otherwise MOUSE_OUT will trigger since mouse is</span><br />
<span class="co1">//&nbsp; &nbsp; &nbsp; now on target_mc instead of boundary_mc</span><br />
target_mc.<span class="me1">mouseEnabled</span> = <span class="kw2">false</span>;</p>
<p><span class="co1">///////////////////////////////////////////////////////////////</span><br />
<span class="co1">// ON MOUSE OVER /////////////////////////////////////////////</span><br />
<span class="co1">/////////////////////////////////////////////////////////////</span><br />
<span class="co1">// When the mouse rolls over onto our red boundary, hide</span><br />
<span class="co1">// &nbsp; mouse/show cursor</span><br />
<span class="co1">//</span><br />
<span class="kw2">function</span> onMouseOver<span class="br0">&#40;</span> theEvent:MouseEvent <span class="br0">&#41;</span>:<span class="kw3">void</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">// Swap the mouse for the cursor</span><br />
<span class="kw3">Mouse</span>.<span class="kw3">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">// hide mouse cursor</span><br />
target_mc.<span class="kw3">visible</span> = <span class="kw2">true</span>;</p>
<p><span class="co1">// Add a listener to handle the moving of the mouse</span><br />
<span class="co1">// We add the listener here because otherwise the onMouseMove</span><br />
<span class="co1">// &nbsp; &nbsp;would execute whenever the mouse moved, whether it was</span><br />
<span class="co1">// &nbsp; &nbsp;on our boundary or not. Not a big deal, but better for</span><br />
<span class="co1">// &nbsp; &nbsp;efficiency</span><br />
boundary_mc.<span class="me1">addEventListener</span><span class="br0">&#40;</span> MouseEvent.<span class="me1">MOUSE_MOVE</span>,<br />
onMouseMotion <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Handle the movement now so we don&#8217;t have to wait for a</span><br />
<span class="co1">// &nbsp; mouse movement to reposition the cursor</span><br />
onMouseMotion<span class="br0">&#40;</span><span class="kw2">null</span><span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">///////////////////////////////////////////////////////////////</span><br />
<span class="co1">// ON MOUSE MOTION ///////////////////////////////////////////</span><br />
<span class="co1">/////////////////////////////////////////////////////////////</span><br />
<span class="co1">// When the mouse moves, we also want to move our target to follow</span><br />
<span class="co1">// &nbsp; the mouse</span><br />
<span class="co1">//</span><br />
<span class="kw2">function</span> onMouseMotion<span class="br0">&#40;</span> theEvent:MouseEvent <span class="br0">&#41;</span>:<span class="kw3">void</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">// Reposition our custom cursor</span><br />
target_mc.<span class="me1">y</span> = <span class="kw3">stage</span>.<span class="me1">mouseY</span>;<br />
target_mc.<span class="me1">x</span> = <span class="kw3">stage</span>.<span class="me1">mouseX</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">///////////////////////////////////////////////////////////////</span><br />
<span class="co1">// ON MOUSE OUT //////////////////////////////////////////////</span><br />
<span class="co1">/////////////////////////////////////////////////////////////</span><br />
<span class="co1">// When mouse goes outside our red boundary, show default mouse,</span><br />
<span class="co1">//&nbsp; &nbsp; &nbsp; and hide our custom one</span><br />
<span class="co1">//</span><br />
<span class="kw2">function</span> onMouseOut<span class="br0">&#40;</span> theEvent:MouseEvent <span class="br0">&#41;</span>:<span class="kw3">void</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">// Swap the cursor for the mouse</span><br />
<span class="kw3">Mouse</span>.<span class="kw3">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
target_mc.<span class="kw3">visible</span> = <span class="kw2">false</span>;</div>
</div>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="co1">// Stop listening for mouse movement</span><br />
boundary_mc.<span class="me1">removeEventListener</span><span class="br0">&#40;</span> MouseEvent.<span class="me1">MOUSE_MOVE</span>,<br />
onMouseMotion <span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<h2>The Drag and Drop Method</h2>
<p>Our next method uses the drag function built into Flash. With this function you can drag a movieclip around the stage with the mouse automatically. This restricts some of our freedom, but gives us some very easy coding to control the mouse cursor to specific regions. In this case we simply restrict the motion of the cursor along a rectangle of 0 height (so it won&#8217;t move along the Y axis) and with a width as wide as our boundary box. This feature has its advantages, and I merely include it to demonstrate how to use it in the context of a custom mouse cursor.</p>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="co1">// Set up our listeners for each of our mouse actions</span><br />
boundary2_mc.<span class="me1">addEventListener</span><span class="br0">&#40;</span> MouseEvent.<span class="me1">MOUSE_OVER</span>,<br />
onMouseOver2 <span class="br0">&#41;</span>;<br />
boundary2_mc.<span class="me1">addEventListener</span><span class="br0">&#40;</span> MouseEvent.<span class="me1">MOUSE_OUT</span>,<br />
onMouseOut2 &nbsp;<span class="br0">&#41;</span>;</div>
</div>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="co1">// Ingores all sub movie clips and treats them as the parent</span><br />
<span class="co1">//&nbsp; &nbsp; &nbsp; &#8212; otherwise events will be triggered on the child</span><br />
<span class="co1">//&nbsp; &nbsp; &nbsp; movieclips and not our main clip</span><br />
target_mc.<span class="me1">mouseChildren</span> &nbsp; &nbsp;= <span class="kw2">false</span>;<br />
boundary2_mc.<span class="me1">mouseChildren</span> = <span class="kw2">false</span>;</div>
</div>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;">&nbsp;</div>
</div>
<div class="codesnip-container" >
<div class="actionscript codesnip" style="font-family:monospace;"><span class="co1">// Ignore all the mouse events for the cursor</span><br />
<span class="co1">//&nbsp; &nbsp; &nbsp; &#8212; otherwise MOUSE_OUT will trigger since mouse is</span><br />
<span class="co1">//&nbsp; &nbsp; &nbsp; now on target_mc instead of boundary_mc</span><br />
target_mc.<span class="me1">mouseEnabled</span> = <span class="kw2">false</span>;</p>
<p><span class="co1">// Calculate the the vertical center of our boundary</span><br />
<span class="co1">// &nbsp; so that the cursor can move along that line</span><br />
<span class="kw2">var</span> verticalCenter_num = boundary2_mc.<span class="me1">y</span> + <span class="br0">&#40;</span>boundary2_mc.<span class="kw3">height</span> <span class="sy0">/</span> 2<span class="br0">&#41;</span>;</p>
<p><span class="co1">///////////////////////////////////////////////////////////////</span><br />
<span class="co1">// ON MOUSE OVER 2 ///////////////////////////////////////////</span><br />
<span class="co1">/////////////////////////////////////////////////////////////</span><br />
<span class="co1">// Same as our previous one, but set for another boundary</span><br />
<span class="co1">//</span><br />
<span class="kw2">function</span> onMouseOver2<span class="br0">&#40;</span> theEvent:MouseEvent <span class="br0">&#41;</span>:<span class="kw3">void</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">// Swap the mouse for the cursor</span><br />
<span class="kw3">Mouse</span>.<span class="kw3">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
target_mc.<span class="kw3">visible</span> = <span class="kw2">true</span>;</p>
<p><span class="co1">// Add a listener to handle the moving of the mouse</span><br />
<span class="co1">// We add the listener here because otherwise the</span><br />
<span class="co1">// &nbsp; &nbsp;onMouseMove would execute whenever the</span><br />
<span class="co1">// &nbsp; &nbsp;mouse moved, whether it was on our boundary</span><br />
<span class="co1">// &nbsp; &nbsp;or not. Not a big deal, but better for efficiency</span><br />
boundary2_mc.<span class="me1">addEventListener</span><span class="br0">&#40;</span> MouseEvent.<span class="me1">MOUSE_MOVE</span>,<br />
onMouseMotion2 <span class="br0">&#41;</span>;</p>
<p><span class="co1">// Handle the movement now so we don&#8217;t have to wait</span><br />
<span class="co1">// for a mouse movement to reposition the cursor</span><br />
target_mc.<span class="me1">y</span> = verticalCenter_num;<br />
target_mc.<span class="me1">x</span> = <span class="kw3">stage</span>.<span class="me1">mouseX</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">///////////////////////////////////////////////////////////////</span><br />
<span class="co1">// ON MOUSE MOTION 2 /////////////////////////////////////////</span><br />
<span class="co1">/////////////////////////////////////////////////////////////</span><br />
<span class="co1">// Restricts the movement of our custom cursor along the X axis</span><br />
<span class="co1">//</span><br />
<span class="kw2">function</span> onMouseMotion2<span class="br0">&#40;</span> theEvent:MouseEvent <span class="br0">&#41;</span>:<span class="kw3">void</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">// Calculate the the vertical center of our boundary</span><br />
<span class="co1">// &nbsp; so that the cursor can move along that line</span><br />
<span class="kw2">var</span> verticalCenter_num = boundary2_mc.<span class="me1">y</span> +<br />
<span class="br0">&#40;</span>boundary2_mc.<span class="kw3">height</span> <span class="sy0">/</span> 2<span class="br0">&#41;</span>;</p>
<p><span class="co1">// We use startDrag() here since it&#8217;s easier to restrict</span><br />
<span class="co1">// &nbsp; the cursor&#8217;s boundaryusing a Rectangle object.</span><br />
<span class="co1">// boundary2_mc.x: Start from the x position of our</span><br />
<span class="co1">// &nbsp; boundary verticalCenter_num: Start from the</span><br />
<span class="co1">// &nbsp; vertical center as our y coordinate</span><br />
<span class="co1">// boundary2_mc.width: Allow the cursor to move</span><br />
<span class="co1">// &nbsp; the length of the boundary&#8217;s width (starting from x)</span><br />
<span class="co1">// 0: Don&#8217;t allow the cursor to move up or down</span><br />
target_mc.<span class="kw3">startDrag</span><span class="br0">&#40;</span> <span class="kw2">true</span>, <span class="kw2">new</span> Rectangle<span class="br0">&#40;</span><br />
boundary2_mc.<span class="me1">x</span>,<br />
verticalCenter_num,<br />
boundary2_mc.<span class="kw3">width</span>,<br />
0<span class="br0">&#41;</span><br />
<span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></p>
<p><span class="co1">///////////////////////////////////////////////////////////////</span><br />
<span class="co1">// ON MOUSE OUT 2 ////////////////////////////////////////////</span><br />
<span class="co1">/////////////////////////////////////////////////////////////</span><br />
<span class="co1">// When mouse goes outside our gray boundary, show default mouse,</span><br />
<span class="co1">// &nbsp; hide custom mouse and stop drag</span><br />
<span class="co1">//</span><br />
<span class="kw2">function</span> onMouseOut2<span class="br0">&#40;</span> theEvent:MouseEvent <span class="br0">&#41;</span>:<span class="kw3">void</span><br />
<span class="br0">&#123;</span><br />
<span class="co1">// Swap the cursor for the mouse</span><br />
<span class="kw3">Mouse</span>.<span class="kw3">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
target_mc.<span class="kw3">visible</span> = <span class="kw2">false</span>;</p>
<p><span class="co1">// Stop our drag</span><br />
target_mc.<span class="kw3">stopDrag</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p><span class="co1">// Stop listening for mouse movement</span><br />
boundary2_mc.<span class="me1">removeEventListener</span><span class="br0">&#40;</span> MouseEvent.<span class="me1">MOUSE_MOVE</span>,<br />
onMouseMotion2 <span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p>I hope the code is commented well enough for you to understand what&#8217;s going on. It should be fairly self explanatory, but if not, feel free to ask.</p>
<h2>Sample Code</h2>
<p>Below is the source code for the SWF used at the top of the post:</p>
<p><a href="http://www.mikeziray.com/blog/wp-content/uploads/2009/05/2009-05-28_Custom_Cursors.zip?utm_campaign=feed&utm_medium=feed&utm_source=blog">Download the Custom Cursors sample code.</a></p>
<h2>Did you find this useful?</h2>
<p>If you found this page useful, please consider helping us out by checking out the links on the right. Thanks!</p>
<p><a href="http://www.mikeziray.com/2009/05/30/custom-mouse-cursor-for-actionscript-3/">Custom Mouse Cursor for ActionScript 3</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>
<p>Related posts:<ol>
<li><a href='http://www.mikeziray.com/2009/10/19/dynamic-textfields-in-flash-as3-and-their-bugs/' rel='bookmark' title='Dynamic Textfields in Flash AS3 and Their Bugs'>Dynamic Textfields in Flash AS3 and Their Bugs</a></li>
<li><a href='http://www.mikeziray.com/2010/07/01/why-your-code-sucks-naming-conventions/' rel='bookmark' title='Naming Conventions &#8211; Why Your Code Sucks'>Naming Conventions &#8211; Why Your Code Sucks</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.mikeziray.com/2009/05/30/custom-mouse-cursor-for-actionscript-3/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
	</item>
		<item>
		<title>Cave/Wreck Diving Techniques for the Rest of Us</title>
		<link>http://www.mikeziray.com/2009/03/14/cavewreck-diving-techniques-for-the-rest-of-us/?utm_campaign=feed&#038;utm_medium=feed&#038;utm_source=blog&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.mikeziray.com/2009/03/14/cavewreck-diving-techniques-for-the-rest-of-us/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 01:01:20 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[advice]]></category>
		<category><![CDATA[scuba]]></category>

		<guid isPermaLink="false">http://www.mikeziray.com/blog/?p=360</guid>
		<description><![CDATA[Like the auto industry, much of the skills, equipment and techniques for scuba diving come from the extreme side of the sport. Honda and others test out their technology and learn new things about auto tech from Stock, Indy and Formula 1 racing, then apply that to the consumer level. On the scuba side, there [...]<p><a href="http://www.mikeziray.com/2009/03/14/cavewreck-diving-techniques-for-the-rest-of-us/">Cave/Wreck Diving Techniques for the Rest of Us</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>

Related posts:<ol>
<li><a href='http://www.mikeziray.com/2009/07/31/whats-wrong-with-this-scuba-diver/' rel='bookmark' title='What&#8217;s Wrong with this Scuba Diver?'>What&#8217;s Wrong with this Scuba Diver?</a></li>
<li><a href='http://www.mikeziray.com/2008/11/18/scuba-diving-certified-another-life-goal-crossed-off/' rel='bookmark' title='Scuba Diving Certified &#8211; Another Life Goal Crossed Off'>Scuba Diving Certified &#8211; Another Life Goal Crossed Off</a></li>
<li><a href='http://www.mikeziray.com/2009/03/02/discover-scuba/' rel='bookmark' title='Discover Scuba'>Discover Scuba</a></li>
<li><a href='http://www.mikeziray.com/2009/08/19/life-goal-complete-us-coast-guard-bibb-wreck-dive/' rel='bookmark' title='Life Goal Complete &#8211; US Coast Guard Bibb: Wreck Dive'>Life Goal Complete &#8211; US Coast Guard Bibb: Wreck Dive</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Like the auto industry, much of the skills, equipment and techniques for scuba diving come from the extreme side of the sport. Honda and others test out their technology and learn new things about auto tech from Stock, Indy and Formula 1 racing, then apply that to the consumer level.</p>
<p>On the scuba side, there is <a href="http://www.youtube.com/watch?v=ku1wWo3jSZ0" target="_blank">wreck</a> and <a href="http://www.youtube.com/watch?v=yefQb1y6uQg" target="_blank">cave diving</a> where divers penetrate deeply into areas where swimming to the surface is not an option if things were to go wrong. These divers have developed a few skills and techniques that all open-water divers would benefit greatly from, not to mention in our everyday activities and lives.</p>
<p><span id="more-360"></span></p>
<h2>Secure Your Equipment</h2>
<p>Nothing shouts out &#8220;new/bad diver&#8221; like a <a href="http://www.k2scuba.com/product_description.php?category=1&amp;sub_cat=33&amp;product=175" target="_blank">pressure gauge</a> or an <a href="http://www.k2scuba.com/product_description.php?category=1&amp;sub_cat=79&amp;product=186" target="_blank">octopus</a> dragging along behind you. Most of us know this, but what else do you have sticking out, trying to latch onto things? In cave and wreck diving absolutely nothing can be hanging off including the plastic balls on the end of your dump valves (could get stuck between two rocks or pieces of metal), straps on your BCD and straps on your fins (tech divers use <a href="http://www.k2scuba.com/product_description.php?category=1&amp;sub_cat=7&amp;product=256" target="_blank">metal springs</a> instead of rubber straps). The more streamlined your gear, the more professional you look and the fewer accidents you&#8217;ll run into. Plus, when you know your gear is secured, you don&#8217;t need to worry about it.</p>
<p> </p>
<h2>Back Up, Back Up, Back Up</h2>
<p>We all know we should have backups for our personal computers and files, and we all know we should have back ups for our dive gear, but most of us don&#8217;t. A general rule of cave divers is always have two backups. In the unlikely event that you need to use your backup equipment, your backup has a backup. Cave divers generally have an extra mask, for example, that collapses to fit into their pocket. It&#8217;s extremely easy to lose a mask in silt that&#8217;s kicked up deep within a dark cave. While Open Water divers can get away with not having redundant backups, most don&#8217;t even have a single back up. Some of the easiest backup items include a <a href="http://www.k2scuba.com/product_description.php?category=1&amp;sub_cat=81&amp;product=396" target="_blank">pony bottle of air</a>, because even though we have a dive buddy, that buddy might not be immediately aware of your situation nor able to get to you in time. If you run out of air, can you hold your breath long enough for someone to notice and come to your aid? Think about the things you need the most (air, sight, computer/bottom time), and make sure you have a backup to those important things.</p>
<p> </p>
<h2>Plan for the Worst</h2>
<p>Cave divers plan on using just 1/3rd of their air so that at the farthest point into the cave, they still have 2/3rd to travel back on: 1/3rd for themselves and 1/3rd for their buddy if needed. So at any given point, they&#8217;re both ensured of having enough air. So on your next dive, don&#8217;t just plan as if you&#8217;re the only one diving, make decisions that&#8217;ll also keep your dive buddies safe and plan for the worst thing to happen at any given point of your dive.</p>
<p> </p>
<h2>Be Aware of Your Surroundings at All Times</h2>
<p>People who lock their keys in the car or leave their headlights on would not make good cave divers. You need to be fully aware of the state of your gear, where your gear is, how to get to your gear and what to do should something happen to your gear, and it needs to be second nature. One way cave divers accomplish this is having the same gear configuration for every single dive they do, for the hundreds of dives they do. Not only will they have the same gear configuration, but their buddy will have the same gear configuration as they do, so if something goes wrong, they know exactly what their dive buddy&#8217;s configuration is. This might be a little extreme for Open Water divers, but what you can do, is ensure you know the gear configuration of your buddy before you dive, namely where they stow their extra 2nd stage regulator and other gear you might need in an emergency. And they should know your setup too.</p>
<p> </p>
<h2>Buoyancy!</h2>
<p>Something that should stressed more in the introduction to open water is buoyancy control. Too many divers flail with their arms, crash into things with their tanks, kick and kick up things below them and generally have no control of themselves underwater. The best divers can stay within a range of one foot for any period of time, without looking at their depth gauge and without reference to an object. They feel how deep they are. While this is again a bit extreme for the average Open Water diver, being able to float above a reef without kicking it or destroying it is a skill all divers need to learn. And the less you flail along, the less air you&#8217;ll consume and the more professional you&#8217;ll be. Next time you go diving, be 100% aware of your buoyancy and how much you&#8217;re flailing. Hint: you shouldn&#8217;t use your arms or hands at all.</p>
<p> </p>
<h2>Know Where Your Gold Line Is</h2>
<p>In cave diving, there is a gold line that leads out of the cave. It&#8217;s always there, ready to guide out the divers. For the rest of us, we always need to have our own metaphoric gold lines out of the situation we&#8217;re in. At any given point of your dive, you need to know how to get out and most importantly how to get your buddy out.</p>
<p><a href="http://www.mikeziray.com/2009/03/14/cavewreck-diving-techniques-for-the-rest-of-us/">Cave/Wreck Diving Techniques for the Rest of Us</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>
<p>Related posts:<ol>
<li><a href='http://www.mikeziray.com/2009/07/31/whats-wrong-with-this-scuba-diver/' rel='bookmark' title='What&#8217;s Wrong with this Scuba Diver?'>What&#8217;s Wrong with this Scuba Diver?</a></li>
<li><a href='http://www.mikeziray.com/2008/11/18/scuba-diving-certified-another-life-goal-crossed-off/' rel='bookmark' title='Scuba Diving Certified &#8211; Another Life Goal Crossed Off'>Scuba Diving Certified &#8211; Another Life Goal Crossed Off</a></li>
<li><a href='http://www.mikeziray.com/2009/03/02/discover-scuba/' rel='bookmark' title='Discover Scuba'>Discover Scuba</a></li>
<li><a href='http://www.mikeziray.com/2009/08/19/life-goal-complete-us-coast-guard-bibb-wreck-dive/' rel='bookmark' title='Life Goal Complete &#8211; US Coast Guard Bibb: Wreck Dive'>Life Goal Complete &#8211; US Coast Guard Bibb: Wreck Dive</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.mikeziray.com/2009/03/14/cavewreck-diving-techniques-for-the-rest-of-us/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
	</item>
		<item>
		<title>Working With People Better Than You</title>
		<link>http://www.mikeziray.com/2009/02/04/working-with-people-better-than-you/?utm_campaign=feed&#038;utm_medium=feed&#038;utm_source=blog&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.mikeziray.com/2009/02/04/working-with-people-better-than-you/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 21:24:14 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[advice]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[improvement]]></category>
		<category><![CDATA[job]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[skills]]></category>

		<guid isPermaLink="false">http://www.mikeziray.com/blog/?p=229</guid>
		<description><![CDATA[Depending on who you are and what you do, you may find yourself working with people whose skills are superior to your own. For some of us, this happens more often than not. For others, this rarely happens, or at least they think it doesn&#8217;t. If you don&#8217;t work with people who are better than [...]<p><a href="http://www.mikeziray.com/2009/02/04/working-with-people-better-than-you/">Working With People Better Than You</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>

Related posts:<ol>
<li><a href='http://www.mikeziray.com/2010/10/14/learn-spanish-or-any-other-language/' rel='bookmark' title='Learn Spanish, or any other language'>Learn Spanish, or any other language</a></li>
<li><a href='http://www.mikeziray.com/2009/01/29/fixing-whats-not-broken-a-user-centric-perspective/' rel='bookmark' title='Fixing What&#8217;s Not Broken: A User-Centric Perspective'>Fixing What&#8217;s Not Broken: A User-Centric Perspective</a></li>
<li><a href='http://www.mikeziray.com/2011/03/13/avalon-dive-center-blacksburg-va/' rel='bookmark' title='Avalon Dive Center &#8211; Blacksburg, VA'>Avalon Dive Center &#8211; Blacksburg, VA</a></li>
<li><a href='http://www.mikeziray.com/2008/08/14/what-are-the-five-greatest-things-about-where-you-live/' rel='bookmark' title='What Are the Five Greatest Things About Where You Live?'>What Are the Five Greatest Things About Where You Live?</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Depending on who you are and what you do, you may find yourself working with people whose skills are superior to your own. For some of us, this happens more often than not. For others, this rarely happens, or at least they think it doesn&#8217;t.</p>
<p>If you don&#8217;t work with people who are better than you at something, then there&#8217;s a problem. The problem is you&#8217;re the best at what you do. If you don&#8217;t see the dilemma (and silly you), let me explain.</p>
<h3>How We Improve</h3>
<p>We all go to school to learn skills to do our jobs better. We attend conferences to learn what&#8217;s new in our industry of choice. And we sometimes take online college courses to stay fresh and relavent. But all these things are being taught to us by someone who is better at what we do, be it a college professor, a peer who has done more research in the area or a committee of people who have dedicated a large portion of time compiling the information you are now trying to absorb.</p>
<p>We are best at what we do the most. For some people, they&#8217;re good at watching TV (some of us can&#8217;t sit still that long). Others are good at playing video games, cooking, or sports. Hopefully we are all good at our jobs, since above all, we spend the majority of our waking hours doing just that.</p>
<p>So, if the majority of your time is spent at work, working with people who are uninspiring and not as talented as yourself, it might make you feel great that you&#8217;re the smartest person in the room, but honestly, how smart are you really compared to other companies? Some of us can claim to be the world leaders in our respective industries. Unfortunately however, most of us can&#8217;t and if we aren&#8217;t exposed to people who have different ways of working and who are better, we never learn anything new.</p>
<h3>Be Humble and Learn Something</h3>
<p>I have several developers that I work with. The first thing I do is admit that I don&#8217;t know everything and that their input is very important to me because of that. Complex databases are not my thing. I know a lot about them, but I work with people who know <em>more</em> about them. Sometimes you just need to shut up and listen, even if you think you&#8217;re right about something. You&#8217;ll learn that not only are you not always right, but that other people can be right too, and sometimes you can both be right; just with different solutions to the same problem. So surround yourself with smart friends and co-workers and just by hanging out with them you&#8217;ll pick up things you wouldn&#8217;t have otherwise. Don&#8217;t worry about being the small fish, revel in the wealth of information and inspiration that surrounds you.</p>
<p><a href="http://www.mikeziray.com/2009/02/04/working-with-people-better-than-you/">Working With People Better Than You</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>
<p>Related posts:<ol>
<li><a href='http://www.mikeziray.com/2010/10/14/learn-spanish-or-any-other-language/' rel='bookmark' title='Learn Spanish, or any other language'>Learn Spanish, or any other language</a></li>
<li><a href='http://www.mikeziray.com/2009/01/29/fixing-whats-not-broken-a-user-centric-perspective/' rel='bookmark' title='Fixing What&#8217;s Not Broken: A User-Centric Perspective'>Fixing What&#8217;s Not Broken: A User-Centric Perspective</a></li>
<li><a href='http://www.mikeziray.com/2011/03/13/avalon-dive-center-blacksburg-va/' rel='bookmark' title='Avalon Dive Center &#8211; Blacksburg, VA'>Avalon Dive Center &#8211; Blacksburg, VA</a></li>
<li><a href='http://www.mikeziray.com/2008/08/14/what-are-the-five-greatest-things-about-where-you-live/' rel='bookmark' title='What Are the Five Greatest Things About Where You Live?'>What Are the Five Greatest Things About Where You Live?</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.mikeziray.com/2009/02/04/working-with-people-better-than-you/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
	</item>
		<item>
		<title>Fixing What&#8217;s Not Broken: A User-Centric Perspective</title>
		<link>http://www.mikeziray.com/2009/01/29/fixing-whats-not-broken-a-user-centric-perspective/?utm_campaign=feed&#038;utm_medium=feed&#038;utm_source=blog&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.mikeziray.com/2009/01/29/fixing-whats-not-broken-a-user-centric-perspective/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 03:52:49 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[advice]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[as2]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[company]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[job]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[responsibility]]></category>

		<guid isPermaLink="false">http://www.mikeziray.com/blog/?p=196</guid>
		<description><![CDATA[The saying, &#8220;If it ain&#8217;t broke, don&#8217;t fix it,&#8221; is not a very good motto, especially when there&#8217;s progress to be made. When you&#8217;re working with old and tired technology it really drags down your capabilities and your ability to move forward. The need to keep around legacy solutions only holds back your clients from [...]<p><a href="http://www.mikeziray.com/2009/01/29/fixing-whats-not-broken-a-user-centric-perspective/">Fixing What&#8217;s Not Broken: A User-Centric Perspective</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>

Related posts:<ol>
<li><a href='http://www.mikeziray.com/2009/02/04/working-with-people-better-than-you/' rel='bookmark' title='Working With People Better Than You'>Working With People Better Than You</a></li>
<li><a href='http://www.mikeziray.com/2008/06/30/music-storeguitar-work/' rel='bookmark' title='Music Store/Guitar Work'>Music Store/Guitar Work</a></li>
<li><a href='http://www.mikeziray.com/2007/02/14/job-search/' rel='bookmark' title='Job Search'>Job Search</a></li>
<li><a href='http://www.mikeziray.com/2010/10/07/i-am-not-an-entrepreneur/' rel='bookmark' title='I Am Not an Entrepreneur'>I Am Not an Entrepreneur</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>The saying, &#8220;If it ain&#8217;t broke, don&#8217;t fix it,&#8221; is not a very good motto, especially when there&#8217;s progress to be made. When you&#8217;re working with old and tired technology it really drags down your capabilities and your ability to move forward. The need to keep around legacy solutions only holds back your clients from realizing your full potential as a company.</p>
<h3>Their Failure is My Failure</h3>
<p>Being the Technical Director at my company means that I get to pull out all the stops when it comes to investing in our technical capability as a company. But it also means that I am responsible for those technological failures as well.</p>
<p>Coming from the world of Human Computer Interaction (HCI), the user is never wrong or stupid, but instead it is your design that is wrong or inadequate and the sooner you realize that, the sooner you can move on to building better, more functional and friendly software.</p>
<p>The same goes for my developers. They are forced to use the solutions I provide for them and if they have problems with it, break it, or can&#8217;t get it to work, that&#8217;s my failure to design a well-working platform for them to develop on. Sure, I can always fix the problem for them in a few minutes and show them where they were misled because I understand how all the pieces fit, but I&#8217;m the one that made it, so of course I understand it. I could dismiss their problems as them not knowing how the code works or that certain things need to be placed in particular spots for things to work properly, but that&#8217;s not their job. Their job is to develop really great pieces of work and it&#8217;s only a difference of mentality on how they should do their jobs better and easier.</p>
<p>On the one hand, I could produce documents and try to explain how everything works and occasionally field questions on how certain things work. The alternative is to pay attention to the problems they&#8217;re running into and resolve it in a way that&#8217;s best for them. This may require a higher initial investment, but it&#8217;s an investment that&#8217;ll yield higher returns in the long run, not to mention happier developers.</p>
<h3>It&#8217;s Not Them, Stupid, It&#8217;s You</h3>
<p>We&#8217;re quick to fault others for something that we ourselves may understand quite well, but with the wealth of diversity in this world, no one can know exactly the same things you do. I work with really talented people and I can&#8217;t blame them for not knowing things I think are common sense because I know they know things that I couldn&#8217;t even begin to grasp. So instead of trying to be superior to people or trying to absolve yourself from blame, take the stance that the end-user is always right, be it your co-workers, your clients or your customers. Remember, you&#8217;re not trying to compete with them, you&#8217;re trying to work with them.</p>
<h3>Don&#8217;t Fix It, Improve It</h3>
<p>Take something in your line of work that is tired and old and revamp it. If your software is coded in ActionScript 2, upgrade it to 3. If your website is made with just straight up HTML, refactor it to include CSS and some JavaScript. If your invoices are still written in the Courier font, hire a designer to make them less intimidating (unless that&#8217;s the point, in which case your business model is flawed if you&#8217;re constantly trying to convince your customers to pay up). I know it might not seem broken and may seem to work fine, but by improving on what you already have, it allows you to evolve and be a leader rather than having tired old things hanging around and weighing you down.</p>
<p><a href="http://www.mikeziray.com/2009/01/29/fixing-whats-not-broken-a-user-centric-perspective/">Fixing What&#8217;s Not Broken: A User-Centric Perspective</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>
<p>Related posts:<ol>
<li><a href='http://www.mikeziray.com/2009/02/04/working-with-people-better-than-you/' rel='bookmark' title='Working With People Better Than You'>Working With People Better Than You</a></li>
<li><a href='http://www.mikeziray.com/2008/06/30/music-storeguitar-work/' rel='bookmark' title='Music Store/Guitar Work'>Music Store/Guitar Work</a></li>
<li><a href='http://www.mikeziray.com/2007/02/14/job-search/' rel='bookmark' title='Job Search'>Job Search</a></li>
<li><a href='http://www.mikeziray.com/2010/10/07/i-am-not-an-entrepreneur/' rel='bookmark' title='I Am Not an Entrepreneur'>I Am Not an Entrepreneur</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.mikeziray.com/2009/01/29/fixing-whats-not-broken-a-user-centric-perspective/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
	</item>
		<item>
		<title>Open Season on Work Related Matters</title>
		<link>http://www.mikeziray.com/2008/10/05/open-season-on-work-related-matters/?utm_campaign=feed&#038;utm_medium=feed&#038;utm_source=blog&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.mikeziray.com/2008/10/05/open-season-on-work-related-matters/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 02:39:49 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[advice]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[photography]]></category>
		<category><![CDATA[photos]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.mikeziray.com/blog/?p=175</guid>
		<description><![CDATA[So, I don&#8217;t usually talk about work on the public stage (Blog, Twitter, etc). A few things have changed recently (which I won&#8217;t be talking about right away), and so I&#8217;ve decided to make my professional life a tad bit more open but in the spirit of informing and to entertain. The idea is going [...]<p><a href="http://www.mikeziray.com/2008/10/05/open-season-on-work-related-matters/">Open Season on Work Related Matters</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>

Related posts:<ol>
<li><a href='http://www.mikeziray.com/2008/06/30/music-storeguitar-work/' rel='bookmark' title='Music Store/Guitar Work'>Music Store/Guitar Work</a></li>
<li><a href='http://www.mikeziray.com/2008/06/22/my-photography-workflow/' rel='bookmark' title='My Photography Workflow'>My Photography Workflow</a></li>
<li><a href='http://www.mikeziray.com/2010/07/26/photos-of-the-week-motion-and-speed/' rel='bookmark' title='Photos of the Week &#8211; Motion and Speed'>Photos of the Week &#8211; Motion and Speed</a></li>
<li><a href='http://www.mikeziray.com/2008/04/10/new-photo-blog/' rel='bookmark' title='New Photo Blog'>New Photo Blog</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>So, I don&#8217;t usually talk about work on the public stage (Blog, Twitter, etc). A few things have changed recently (which I won&#8217;t be talking about right away), and so I&#8217;ve decided to make my professional life a tad bit more open but in the spirit of informing and to entertain.</p>
<p>The idea is going to be, talk about what I do, and explain my experiences, what I&#8217;ve learned and what I&#8217;d do differently. Since I have such a wide range of things I do, hopefully some of this will be interesting to you.</p>
<h1>Lightroom 2</h1>
<p><a href="http://www.mikeziray.com/blog/wp-content/uploads/2008/10/2008-09-17_dark_knight_soccer-062.jpg?utm_campaign=feed&utm_medium=feed&utm_source=blog"><img class="alignnone size-medium wp-image-176" title="2008-09-17_dark_knight_soccer-062" src="http://www.mikeziray.com/blog/wp-content/uploads/2008/10/2008-09-17_dark_knight_soccer-062-200x300.jpg" alt="" width="200" height="300" /></a></p>
<p>I recently acquired Lightroom 2 for my photo workflow. I&#8217;ve been using Lightroom 1 for a few years and it&#8217;s been a blast using it on my PowerMac G5. However, it was a bit slow and it was slowing up my workflow. Lightroom 2 has tremendously sped up the processing of my photos (perceptually twice as fast). Before I was waiting on the computer, now I can mostly just work and not have to sit there while the computer processes the changes I just asked for.<span id="more-175"></span></p>
<p>The sharpening tool is much more improved and the adjustments seem to work more as I think they should. LR 2 also gives you the ability to manage multiple catalogs on different hard drives. Having an external hard drive, this makes it extremely convenient for me to have catalogs for various purposes.</p>
<p><a href="http://www.mikeziray.com/blog/wp-content/uploads/2008/10/2008-10-05_black_knight_soccer-0141.jpg?utm_campaign=feed&utm_medium=feed&utm_source=blog"><img class="alignnone size-medium wp-image-180" title="2008-10-05_black_knight_soccer-0141" src="http://www.mikeziray.com/blog/wp-content/uploads/2008/10/2008-10-05_black_knight_soccer-0141-200x300.jpg" alt="" width="200" height="300" /></a></p>
<p> </p>
<p>My favorite part about the new Lightroom has to be the dual monitor support. Now I can edit my photos on my LCD monitor (that&#8217;s actually calibrated) and have a listing of the photos (grid view for example) or other parts of the application on the other monitor to give me the maximum space for the photo while I edit it. The secondary items on the second monitor disappear when the program loses focus, so it quickly gets out of your way when you want to switch applications for a bit.</p>
<p>The photos above are from a soccer game I shot today. White shirts are really hard to shoot since they tend to get blown out. Lightroom has a &#8220;Recovery&#8221; adjustment that allows you to get back a lot of detail from the white, blown out areas in your photo. Likewise, there&#8217;s a &#8220;Fill Light&#8221; adjustment that recovers black areas that have been clipped. Clipping happens when multiple shades of the same color get interpreted as the same shade and you lose that detail. If you shoot your photos in RAW, most of the situations where you encounter clipping (from under or over exposure) are recoverable. Some images just can&#8217;t be salvaged, but Lightroom has been able to help me out on a number of occasions.</p>
<p>To help with blowing out white shirts in a soccer game (or where ever you happen to be), set your exposure compensation down a step or two. This will under expose your photos slightly but it&#8217;ll keep your whites from getting blown out and you can raise the levels on the other areas to lighten those up without affecting the brighter areas that are prone to clipping. This also gives you the bonus of gaining a faster shutter speed as the camera doesn&#8217;t need as much light to take the shot&#8211;a great thing when shooting sports! You can also raise the ISO up to 200 or 400 (if you have a digital camera that will let you do that), but then it starts becoming noisy and grainy. Just take a few shots before the event and see if you&#8217;re getting an appropriate shutter speed with the available lighting conditions at various f-stops.</p>
<h1>Revisions</h1>
<p>So a few things are getting revised all across the board, such as the blog, website and life, but won&#8217;t be obvious until much much later on. I&#8217;ll keep you all posted on changes being made here, in life and out &#8220;there.&#8221; I hope you like change!</p>
<p><a href="http://www.mikeziray.com/2008/10/05/open-season-on-work-related-matters/">Open Season on Work Related Matters</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>
<p>Related posts:<ol>
<li><a href='http://www.mikeziray.com/2008/06/30/music-storeguitar-work/' rel='bookmark' title='Music Store/Guitar Work'>Music Store/Guitar Work</a></li>
<li><a href='http://www.mikeziray.com/2008/06/22/my-photography-workflow/' rel='bookmark' title='My Photography Workflow'>My Photography Workflow</a></li>
<li><a href='http://www.mikeziray.com/2010/07/26/photos-of-the-week-motion-and-speed/' rel='bookmark' title='Photos of the Week &#8211; Motion and Speed'>Photos of the Week &#8211; Motion and Speed</a></li>
<li><a href='http://www.mikeziray.com/2008/04/10/new-photo-blog/' rel='bookmark' title='New Photo Blog'>New Photo Blog</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.mikeziray.com/2008/10/05/open-season-on-work-related-matters/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:thumbnail url="http://www.mikeziray.com/blog/wp-content/uploads/2008/10/2008-09-17_dark_knight_soccer-062-150x150.jpg" />
		<media:content url="http://www.mikeziray.com/blog/wp-content/uploads/2008/10/2008-09-17_dark_knight_soccer-062.jpg" medium="image">
			<media:title type="html">2008-09-17_dark_knight_soccer-062</media:title>
			<media:thumbnail url="http://www.mikeziray.com/blog/wp-content/uploads/2008/10/2008-09-17_dark_knight_soccer-062-150x150.jpg" />
		</media:content>
		<media:content url="http://www.mikeziray.com/blog/wp-content/uploads/2008/10/2008-10-05_black_knight_soccer-0141.jpg" medium="image">
			<media:title type="html">2008-10-05_black_knight_soccer-0141</media:title>
			<media:thumbnail url="http://www.mikeziray.com/blog/wp-content/uploads/2008/10/2008-10-05_black_knight_soccer-0141-150x150.jpg" />
		</media:content>
	</item>
		<item>
		<title>Eastern European Tourism</title>
		<link>http://www.mikeziray.com/2008/09/14/eastern-european-tourism/?utm_campaign=feed&#038;utm_medium=feed&#038;utm_source=blog&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>http://www.mikeziray.com/2008/09/14/eastern-european-tourism/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 01:51:19 +0000</pubDate>
		<dc:creator>Mike</dc:creator>
				<category><![CDATA[advice]]></category>
		<category><![CDATA[hungary]]></category>
		<category><![CDATA[photography]]></category>

		<guid isPermaLink="false">http://www.mikeziray.com/blog/?p=156</guid>
		<description><![CDATA[Eastern Europe get its charm and character from being behind the Iron Curtain for over 40 years. It was difficult for any person behind the Curtain to socialize with the Western World. In Berlin where East met West in very intimate settings, both sides build up buildings along the Wall to show the other side [...]<p><a href="http://www.mikeziray.com/2008/09/14/eastern-european-tourism/">Eastern European Tourism</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>

Related posts:<ol>
<li><a href='http://www.mikeziray.com/2011/06/06/city-of-rocks/' rel='bookmark' title='City of Rocks'>City of Rocks</a></li>
<li><a href='http://www.mikeziray.com/2008/06/15/major-historic-events/' rel='bookmark' title='Major Historic Events You May Not Know About'>Major Historic Events You May Not Know About</a></li>
<li><a href='http://www.mikeziray.com/2008/09/05/christmas-in-budapest-2008-edition/' rel='bookmark' title='Christmas in Budapest &#8211; 2008 Edition'>Christmas in Budapest &#8211; 2008 Edition</a></li>
<li><a href='http://www.mikeziray.com/2010/01/26/medellin-colombia/' rel='bookmark' title='Medellín Colombia'>Medellín Colombia</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><span style="font-weight: normal;">Eastern Europe get its charm and character from being behind the Iron Curtain for over 40 years. It was difficult for any person behind the Curtain to socialize with the Western World.</span></p>
<p>In Berlin where East met West in very intimate settings, both sides build up buildings along the Wall to show the other side they were doing just fine and dandy, and didn&#8217;t you wish you were on *this* side? The Soviet Union under this communist system was simply all about show.</p>
<p>Today, remnants can be seen of the Russian industry and it&#8217;s effects on the former satellite nations for the past 50 years. Only recently have nations, formerly under the rule of communist Russia, been able to prosper under a more realistic capitalist system. However, because western influence was limited, much of the original culture still remains and is an important part of these countries still today.</p>
<h2>Reasons to Avoid Western Europe</h2>
<p>The myths about Europeans hating Americans is over stated. Europeans don&#8217;t *hate* Americans. They just sometimes think what America is doing in the world is stupid. They realize that not all Americans are like the ones they see on U.S. television shows, but they do pass around <a href="http://www.youtube.com/watch?v=w692uWC8Be8" target="_blank">funny YouTube clips</a> and joke about how stupid Americans are. But it&#8217;s only what they see. You never hear about the quiet American who speaks fluent Spanish because they tend to blend in more. You always hear about the obnoxious American tourist in the restaurant, speaking loudly and complaining about how Europe is so far behind the times and if this restaurant was in the States, it&#8217;d go out of business in a week. They&#8217;re not hard to pick out and so their visibility makes up the perception Europeans have about Americans. Americans in Europe are like <a href="http://en.wikipedia.org/wiki/Sikhs" target="_blank">Sikhs</a> in America, you can spot them from three blocks away. So Europeans don&#8217;t hate Americans, they are just easy to pick on.</p>
<p>In fact, it seems, until a few years ago, they all wanted to be like Americans. In Hungary, it was considered a wonderful date (don&#8217;t tell any of my girlfriends this) if you were to take your girl to <a title="Nyugati Pályaudvar McDonalds" href="http://www.flickr.com/photos/dogra/1806540708/" target="_blank">the local McDonalds</a>. It was a bit more expensive and it was also kind of exotic for Hungarians.</p>
<p>This mentality is more prominent in Western Europe as it&#8217;s had a lot longer to fester. One reason to avoid Western Europe is because it&#8217;s too westernized and doesn&#8217;t provide a large contrast with the States. If you&#8217;re looking for something different (and you might not be), Eastern Europe is your best bet and will still fit within your comfort zone.</p>
<p>Most Americans go to London, Paris, Rome and maybe Berlin. I highly recommend Berlin because there <em>is</em> a stark contrast between the East and the West that&#8217;s directly evident when you stand on a street where you can see both East Berlin and West Berlin. Those other places are super touristy and they are extremely indifferent to tourists since they get literally millions every year. It&#8217;s like the difference between going to a Wal-Mart and going to a mom and pop shop in your city&#8217;s downtown. The products and experiences are worlds apart. Unless of course you&#8217;re just looking for a cheap, hollow experience for the sake of telling your friends you went to Europe.</p>
<p>I&#8217;m all about embracing different cultures. It opens your eyes to so many new and different ideas; ideas you would otherwise never have gotten. It&#8217;s similar to an artist looking at other artists&#8217; works. If he or she only looks at works done by artists in the same town, the ideas become stagnant and inbred. The greatest artists in history were influenced by foreign influences. This is why different cultures are so important to me.</p>
<p><span id="more-156"></span></p>
<h2>My Favorite Cities So Far</h2>
<p>I haven&#8217;t been to a lot of cities in Europe, so I&#8217;m by far not an expert, but here&#8217;s my interpretation of the greatest cities in Europe and why:</p>
<p><img class="aligncenter" title="Szechenyi Chain Bridge" src="http://tn3-2.deviantart.com/fs12/300W/i/2006/318/9/a/Szechenyi_Chain_Bridge_by_MkIxI.jpg" alt="" width="300" height="210" /></p>
<p><strong>Budapest</strong> &#8211; I might be bias with this one, but I honestly think this is the greatest city in Europe. Everyone speaks Hungarian, which is an obvious plus, but it also has the most interesting sites to see in the smallest area and public transportation is one of the easiest to navigate. The history is amazing from World War 2, <a href="http://en.wikipedia.org/wiki/Hungarian_Revolution_of_1956" target="_blank">uprisings against the Soviet Union</a> and the <a href="http://en.wikipedia.org/wiki/Blood_in_the_water_match" target="_blank">&#8217;56 water polo match against the Russians</a>, <a href="http://en.wikipedia.org/wiki/Ferenc_Puskás" target="_blank">one of the best soccer players who ever lived</a>, the <a href="http://en.wikipedia.org/wiki/Austro_-_Hungary" target="_blank">Austro-Hungarian Empire</a> and before that, the <a href="http://en.wikipedia.org/wiki/Hungarian_Empire" target="_blank">Kingdom of Hungary</a>. Hungary had a huge influence on the shaping of European history (as evidenced by the start of the <a href="http://en.wikipedia.org/wiki/World_war_1" target="_blank">First World War</a>).</p>
<p><img class="aligncenter" title="Canal Reflections" src="http://tn3-2.deviantart.com/fs13/300W/f/2007/011/f/8/Canal_Reflections_by_MkIxI.jpg" alt="" width="300" height="430" /></p>
<p><strong>Berlin</strong> &#8211; In no other city can you see the difference between western capitalism and eastern communism and what effects it had on a nation. Berlin is probably the most historic city I&#8217;ve ever been to and I can&#8217;t imagine any other city with more history (sad and terrible as it may be at times). There is so much to do there and so many great sites to see that it is a must see for anyone. And who doesn&#8217;t love German beer and food?!</p>
<p><img class="aligncenter" title="Someone To Hold" src="http://tn3-2.deviantart.com/fs12/300W/i/2006/290/3/2/Someone_To_Hold_by_MkIxI.jpg" alt="" width="300" height="198" /></p>
<p><strong>Vienna</strong> &#8211; Vienna is simply just a beautiful city with beautiful buildings and gorgeous palaces, churches, streets and architecture. Austrians are definitely a different breed of people and don&#8217;t make the mistake of comparing them to Germans, even though they speak a similar language. They love the Hungarians but the Hungarians have a <a href="http://en.wikipedia.org/wiki/Hungarian_Revolt_of_1848" target="_blank">slightly different view</a> of their Austrian neighbors which makes for an interesting cultural difference. Vienna was another city full of things to do, places to see and was just a clean, pleasant city.</p>
<p><img class="aligncenter" title="Starry Bridge" src="http://tn3-2.deviantart.com/fs12/300W/i/2006/312/6/2/Starry_Bridge_by_MkIxI.jpg" alt="" width="300" height="207" /></p>
<p><strong>Prague</strong> &#8211; Prague is like Budapest, but richer, cleaner but not as many sites to see. This was actually the first county I&#8217;ve ever been to where I didn&#8217;t speak the language and it was great. Since I don&#8217;t speak Czech it was slightly more difficult to get around and the public transportation wasn&#8217;t as good as what I was use to. We walked everywhere, which is fine, but it takes time away from actually learning about the city. Everyone goes to Prague and everyone loves it. I too highly recommend it.</p>
<p> </p>
<h2>How to do it Cheaply and Have the Most Fun</h2>
<p>First off, travel light. I can&#8217;t stress this enough. You should only travel with <a href="http://www.onebag.com/" target="_blank">one bag</a>. Not only do airlines charge you more for multiple bags of luggage, you also have to wait to get your bags from the luggage return. If all you have is a carry on, you can just walk straight out of the airport. Make sure you read <a href="http://www.onebag.com/" target="_blank">www.onebag.com</a> before you go on your next trip, be it Europe or just a road trip.</p>
<p><img class="aligncenter" title="Time Is Relative" src="http://tn3-1.deviantart.com/fs14/300W/f/2007/023/9/9/Time_is_Relative_by_MkIxI.jpg" alt="" width="300" height="209" /></p>
<p>So now that you&#8217;re traveling light, travel in small groups. With larger groups, and especially tour groups, it&#8217;s a lot harder to see the things <em>you</em> want to see. There are just too many people to appease. There are hostels set up (and you should be staying in a hostel if you can) explicitly for single travelers and groups of no more than three people. These hostels are amazing and really allow you to meet fellow travelers a lot easier than if it was a hotel-style hostel. I travelled alone for two weeks and met heaps of people also traveling alone. We ended up traveling together and going our separate ways later, but it definitely adds to the experience like nothing else.</p>
<p>When it comes time to refuel, instead of eating out, which we all know can be extremely expensive, go to the grocery store. Not only is this orders of magnitudes cheaper, it&#8217;ll also expose you to different country&#8217;s grocery stores and the foods they eat. Most hostels have kitchens in them anyway, but if you can go without hot food, make yourself a sandwich or something and eat it on a hill over looking the city, in a park on a bench, next to a statue or water fountain in the town&#8217;s center or just on a nice street corner where you can observe the city, the people, and all that makes up the city. Trust me, it&#8217;s a lot better than sitting in a dark restaurant with snooty waiters and getting ripped off because you didn&#8217;t know the restaurant is in the touristy section of town.</p>
<p>Finally, when it comes to actual commuting between cities it depends on how many cities you wish to see. If it&#8217;s only a few cities that you&#8217;re certain about, I&#8217;d recommend flying since its fast and easy. You can get one-way tickets across Europe for as little as $30 (Budapest to Dublin anyone?). You can plan your trips around the best airfares and save time and save money. Mostly all airports in Europe have either a train station or a bus station within walking distance so getting to and from the airport is a non-issue.</p>
<p>If you&#8217;re unsure about which cities you want to see, or you want to live on the edge of uncertainty, I recommend <a href="http://www.eurail.com/" target="_blank">the Eurail-Pass</a>. They have different passes so you&#8217;ll have to choose the appropriate one for your situation, but it can save you loads of money and leave your schedule flexible. If you want to stay in a city an extra day or so because you really want to see that opera in the <a href="http://en.wikipedia.org/wiki/Berlin_State_Opera" target="_blank">Berlin State Opera</a>, you can since most trains run several times a day to your next city of choice. Trains take longer than planes, but they&#8217;re more flexible, you can see more of the country-side between cities and it&#8217;s easier to meet people (if for any reason because they&#8217;re coming from and traveling to the same cities as you).</p>
<p>I mentioned not traveling with tour groups. Tours themselves are great but going on structured tours across Europe is a waste of your time. It&#8217;s similar to sitting in a movie theater and watching a movie about Europe rather than actually being there since you see most of the city via a tour bus. Do however, take <a href="http://www.newberlintours.com/nbt/" target="_blank">a free walking tour</a> in the city the first thing you do when you get to a city. These tours are amazing. The tour guides work off of tips (so make sure you bring a little cash), which makes these the most amazing people you&#8217;re bound to meet on your trip. The tour guides are all very friendly, outgoing and extremely funny, not to mention extremely knowledgeable about their chosen city. These tours will give you a great opportunity to see the city first thing so that you can later go on and spend more time at the places that interest you the most. And of course, you can always ask your tour guide at the end of the tour what&#8217;s the best bars to hit up and the coolest clubs to go to, because I can guarantee you that all those tour guides are extremely cool like that.</p>
<p> </p>
<h2>Jó Utat Kívánok!</h2>
<p>Have a nice trip! As you travel, make sure you keep a journal of some sort. Don&#8217;t just write about where you went, write about what you thought! Years later when you go back and read it, your first impressions will be startling to you as you realize how naïve you were. It&#8217;s a great feeling and puts your trip into perspective and gives you something more than just photos and vague memories.</p>
<p><a href="http://www.mikeziray.com/2008/09/14/eastern-european-tourism/">Eastern European Tourism</a> is a post from: <a href="http://www.mikeziray.com">Ziray Studio Labs</a></p>
<p>Related posts:<ol>
<li><a href='http://www.mikeziray.com/2011/06/06/city-of-rocks/' rel='bookmark' title='City of Rocks'>City of Rocks</a></li>
<li><a href='http://www.mikeziray.com/2008/06/15/major-historic-events/' rel='bookmark' title='Major Historic Events You May Not Know About'>Major Historic Events You May Not Know About</a></li>
<li><a href='http://www.mikeziray.com/2008/09/05/christmas-in-budapest-2008-edition/' rel='bookmark' title='Christmas in Budapest &#8211; 2008 Edition'>Christmas in Budapest &#8211; 2008 Edition</a></li>
<li><a href='http://www.mikeziray.com/2010/01/26/medellin-colombia/' rel='bookmark' title='Medellín Colombia'>Medellín Colombia</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.mikeziray.com/2008/09/14/eastern-european-tourism/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:thumbnail url="http://tn3-2.deviantart.com/fs12/300W/i/2006/318/9/a/Szechenyi_Chain_Bridge_by_MkIxI.jpg" />
		<media:content url="http://tn3-2.deviantart.com/fs12/300W/i/2006/318/9/a/Szechenyi_Chain_Bridge_by_MkIxI.jpg" medium="image">
			<media:title type="html">Szechenyi Chain Bridge</media:title>
		</media:content>
		<media:content url="http://tn3-2.deviantart.com/fs13/300W/f/2007/011/f/8/Canal_Reflections_by_MkIxI.jpg" medium="image">
			<media:title type="html">Canal Reflections</media:title>
		</media:content>
		<media:content url="http://tn3-2.deviantart.com/fs12/300W/i/2006/290/3/2/Someone_To_Hold_by_MkIxI.jpg" medium="image">
			<media:title type="html">Someone To Hold</media:title>
		</media:content>
		<media:content url="http://tn3-2.deviantart.com/fs12/300W/i/2006/312/6/2/Starry_Bridge_by_MkIxI.jpg" medium="image">
			<media:title type="html">Starry Bridge</media:title>
		</media:content>
		<media:content url="http://tn3-1.deviantart.com/fs14/300W/f/2007/023/9/9/Time_is_Relative_by_MkIxI.jpg" medium="image">
			<media:title type="html">Time Is Relative</media:title>
		</media:content>
	</item>
	</channel>
</rss>

