<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kirk Lennon</title>
	<atom:link href="http://kirk.luceo.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://kirk.luceo.net</link>
	<description>Musings</description>
	<lastBuildDate>Sun, 30 May 2010 17:34:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Thoughts on Microsoft’s Inability to Execute, and Why Apple Gets all the Attention</title>
		<link>http://kirk.luceo.net/2010/05/115/</link>
		<comments>http://kirk.luceo.net/2010/05/115/#comments</comments>
		<pubDate>Sun, 30 May 2010 01:47:54 +0000</pubDate>
		<dc:creator>Kirk</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://kirk.luceo.net/?p=115</guid>
		<description><![CDATA[This is in response to an article by John C. Dvorak, Steve Ballmer: good news and bad news It’s not just an image problem. Since Steve Balmer took over, Microsoft’s market cap has fallen to less than half of what Gates left it at. And it’s just because the stock market is irrational. Microsoft rakes [...]]]></description>
			<content:encoded><![CDATA[<p>This is in response to an article by John C. Dvorak, <a href="http://www.marketwatch.com/story/steve-ballmers-good-news-and-bad-news-2010-05-28">Steve Ballmer: good news and bad news</a></p>
<p>It’s not just an image problem.</p>
<p>Since Steve Balmer took over, Microsoft’s market cap has fallen to less than half of what Gates left it at. And it’s just because the stock market is irrational.</p>
<p>Microsoft rakes in tons of profits because of exactly two things: Windows and Office. (And that’s why its margins are higher than Apple’s too; software is inherently higher margin than hardware, especially when you can sell the same OS for the better part of a decade without any real updates.) The problem is that these two cash cows aren’t growing, and Microsoft has failed spectacularly in literally every other venture it’s attempted. Apple didn’t sell phones three years ago; now they account for 40% of its revenues and 60% of its profits. And this year it suddenly made tablets cool, and has been selling them like hotcakes. Steve Jobs has carefully steered Apple into new, extraordinarily lucrative markets, and the stock has risen as a result. Microsoft, in contrast, has lumbered around with rehashed versions of products that sell only as a result of its (convicted) monopoly status, while making desperate stabs in every direction imaginable.</p>
<p>Let’s discuss some of Microsoft’s failures:</p>
<ul>
<li>Tablets. They’ve been pushing these for almost a decade and nobody bought them. The problem was that they just threw some touch controls on top of a UI designed for a keyboard and mouse. Apple made an entirely new Cocoa Touch UI layer.</li>
<li>SPOT. Watches, with some MSN crap. Probably cruel of me just to mention.</li>
<li>Silverlight. It has all the disadvantages of Flash, except that nobody uses it.</li>
<li>Zune. They started with brown and never recovered. All it did was kill PlaysforSure</li>
<li>PlaysforSure. Based on the false notion that people want/need “choice” (where “choice” means a Microsoft software platform and various commodity hardware partners). Killed by Zune.</li>
<li>Xbox. Popular, you say? Not from a shareholder standpoint. It’s making a slim profit now, but it will never be enough to dig itself out of the multi-billion dollar hole it’s in. They’ve lost a massive fortune in order to buy second-place in console gaming. And now Apple has, practically by accident, become a major player in mobile gaming.</li>
<li>Windows Mobile. They’ve had mobile software for years, and it’s always sucked, but they formerly held a respectable share of the smartphone market. Then smartphones actually got popular (meaning sales reached numbers that mattered), but not for phones running Microsoft’s frequently renamed mobile OS. The battle is still waging here, but Microsoft has become an irrelevant bit player.</li>
<li>Search. They’ve resorted to outright bribing users to search on Bing, but it’s been only modestly successful, where “successful” means a single-digit share of the search market, and no profits.</li>
</ul>
<p>There are others, of course. I didn’t even discuss any of the “concepts” it’s publicly floated but were killed before they got the chance to die in the market (but should have died privately) *cough* Courier *cough*. Windows Vista (6.0) was a complete disaster in every possible way, ridiculously late, overpriced, and reviled by users. Windows 6.1 (or, in market speak, Windows “7”) is regarded as respectable, but I don’t think I’ve read even a single review by a serious journalist who would call it the best OS available. At its best, Windows 7 is a fine OS for someone who is too cheap to buy a Mac.</p>
<p>Office, meanwhile, is facing stiff competition from all directions. On the Mac specifically, Apple now offers a fairly complete suite in iWork, for half the price of Office, which itself had to drop in price just to stay competitive. More broadly, sophisticated productivity web apps are becoming a serious threat. Of particular note are Google’s offerings, which increasingly obviate the need for MS Office for many users. Google can offer these services for free due to the huge profits it makes from search. Microsoft can’t offer similar free services without sacrificing sales of Office.</p>
<p>The short version of all this is simply this: the last time Microsoft released anything that actually grew the company substantially, in an area of real profits, was 1995. Since then it’s really just been coasting along on momentum. And <em>that</em> is why the media and market lavishes attention over the things Apple does and ignores what Microsoft does.</p>
]]></content:encoded>
			<wfw:commentRss>http://kirk.luceo.net/2010/05/115/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone Programming</title>
		<link>http://kirk.luceo.net/2008/11/iphone-programming/</link>
		<comments>http://kirk.luceo.net/2008/11/iphone-programming/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 05:20:31 +0000</pubDate>
		<dc:creator>Kirk</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://kirk.luceo.net/?p=35</guid>
		<description><![CDATA[The main reason I started learning Ruby was to gain the requisite skills for making iPhone applications. I don&#8217;t think my skills are anywhere near where they need to be, and I have only the slightest knowledge of C, but I see no reason why that means I shouldn&#8217;t dive right in. And so I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>The main reason I started learning Ruby was to gain the requisite skills for making iPhone applications. I don&#8217;t think my skills are anywhere near where they need to be, and I have only the slightest knowledge of C, but I see no reason why that means I shouldn&#8217;t dive right in. And so I&#8217;m pursuing a three-prong strategy: I&#8217;m simultaneously learning Ruby, C, and following iPhone tutorials. Lately I&#8217;ve been working on the last of these.</p>
<p>I found a nice series of tutorials on <a href="http://icodeblog.com/2008/07/24/iphone-programming-tutorial-1-getting-set-up/">iCodeBlog</a>. I&#8217;ve been following the directions very carefully, and retyping the provided code into Xcode (which, by the way, has amazing auto-completion). Build errors! It seems I&#8217;m not that great, and make a lot of typos, but Xcode always seems to find them for me <img src='http://kirk.luceo.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  At any rate, I&#8217;ve successfully made several useless apps. Now I&#8217;m following a big, multi-part tutorial on that site for making a To-do app. I don&#8217;t really understand the code I&#8217;m typing out, at least not to a large degree, but I figure I&#8217;ll have plenty of time to go back and actually learn Objective-C; I just really want to make something tangible in a hurry, so I have a taste of what I&#8217;m ultimately aiming for.</p>
]]></content:encoded>
			<wfw:commentRss>http://kirk.luceo.net/2008/11/iphone-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Another Update to my Mad Lib App</title>
		<link>http://kirk.luceo.net/2008/10/another-update-to-my-mad-lib-app/</link>
		<comments>http://kirk.luceo.net/2008/10/another-update-to-my-mad-lib-app/#comments</comments>
		<pubDate>Thu, 16 Oct 2008 08:32:14 +0000</pubDate>
		<dc:creator>Kirk</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://kirk.luceo.net/?p=34</guid>
		<description><![CDATA[My previous version of the mad lib app had a few problems. First of all, the story I wrote was terrible, and didn&#8217;t even use all of the variables entered by the user. Related to that, I made it ask every question exactly three times, even though I didn&#8217;t need three answers for each one. [...]]]></description>
			<content:encoded><![CDATA[<p>My previous version of the mad lib app had a few problems. First of all, the story I wrote was terrible, and didn&#8217;t even use all of the variables entered by the user. Related to that, I made it ask every question exactly three times, even though I didn&#8217;t need three answers for each one. Furthermore, I wasn&#8217;t very specific about the user input, and it didn&#8217;t always work grammatically in my story. I&#8217;ve fixed all of that.</p>
<blockquote><p><code># Mad Lib<br />
# madlib.rb<br />
# Creates a mad lib based on user input<br />
def ask part<br />
input = gets.chomp.upcase<br />
part.push input<br />
end<br />
verb = []<br />
adj = []<br />
obj = []<br />
ly = []<br />
job = []<br />
puts 'Type in one verb, followed by a return:'<br />
ask verb<br />
puts 'Now, type in four adjectives, followed by return after each one:'<br />
ask adj<br />
ask adj<br />
ask adj<br />
ask adj<br />
puts 'Now type in two everyday objects, followed by return after each one:'<br />
ask obj<br />
ask obj<br />
puts 'Type in one adverb that ends in -ly:'<br />
ask ly<br />
puts 'Type in two job titles, such as "worker"'<br />
ask job<br />
ask job<br />
puts 'One very ' +adj[0]+ ' day, a kind ' +job[0]+ ' went up to a ' +adj[1]<br />
puts job[1]+ ' and asked to borrow some money to buy a ' +adj[2]+ ' ' +obj[0]+ ','<br />
puts 'which he needed very badly. The ' +job[0]+ ' told him that he would lend'<br />
puts 'the money only if the ' +job[1]+ ' would agree to ' +verb[0]+ ' a'<br />
puts ly[0]+ ' ' +adj[3]+ ' ' +obj[1]+ '. The ' +job[0]+ ' decided it wasn\'t'<br />
puts 'worth it.'</code></p></blockquote>
<p>In my new version, I changed the user inputs to make them more specific. Instead of just asking for nouns, I ask for job titles and objects. Adverbs became an -ly adverb. The only place I see where it might not work out perfectly is if the adjectives start with vowel sounds, because the story has &#8220;a&#8221; before them, instead of &#8220;an.&#8221; I could write a huge amount of code (probably equal to this entire program, as-is, if not more) just to account for this and automatically change the &#8220;a&#8221; to &#8220;an.&#8221; I could also just ask people in the question to stick to consonants. But I don&#8217;t think it really matters. It&#8217;s a mad lib; &#8220;a orange tree&#8221; is to be expected.</p>
<p>The other issue is that by removing the code that automatically asks each question three times, I have to repeat the same lines of code for each time I want it asked. There are ways that I could code it so that I could pass it an additional variable—the number of times to ask the question—but my method is so short anyway (<code>ask adj</code>) that I don&#8217;t think it would actually save any space.<br />
Here is the code when run:</p>
<blockquote><p><code>iMac:Ruby kirk$ Ruby madlib.rb<br />
Type in one verb, followed by a return:<br />
<em>open</em><br />
Now, type in four adjectives, followed by return after each one:<br />
<em>blue</em><br />
<em>clean</em><br />
<em>dirty</em><br />
<em>high</em><br />
Now type in two everyday objects, followed by return after each one:<br />
<em>cup</em><br />
<em>phone</em><br />
Type in one adverb that ends in -ly:<br />
<em>fetchingly</em><br />
Type in two job titles, such as "worker"<br />
<em>serf</em><br />
<em>restaurateur</em><br />
One very BLUE day, a kind SERF went up to a CLEAN<br />
RESTAURATEUR and asked to borrow some money to buy a DIRTY CUP,<br />
which he needed very badly. The SERF told him that he would lend<br />
the money only if the RESTAURATEUR would agree to OPEN a<br />
FETCHINGLY HIGH PHONE. The SERF decided it wasn't<br />
worth it.</code></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://kirk.luceo.net/2008/10/another-update-to-my-mad-lib-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Age Quiz</title>
		<link>http://kirk.luceo.net/2008/10/age-quiz/</link>
		<comments>http://kirk.luceo.net/2008/10/age-quiz/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 06:30:55 +0000</pubDate>
		<dc:creator>Kirk</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://kirk.luceo.net/?p=33</guid>
		<description><![CDATA[This is a follow-up to my first Ruby-related post. In that post, I mentioned potential additions to the code; I&#8217;ve since made those, and also cleaned it up a bit: # Age Quiz # agequiz.rb # Asks user his name and when he was born. It then calculates # the user's age, and offers different [...]]]></description>
			<content:encoded><![CDATA[<p>This is a follow-up to my first Ruby-related <a href="/2008/09/im-learning-ruby.html">post</a>. In that post, I mentioned potential additions to the code; I&#8217;ve since made those, and also cleaned it up a bit:</p>
<blockquote><p><code># Age Quiz<br />
# agequiz.rb<br />
# Asks user his name and when he was born. It then calculates<br />
# the user's age, and offers different comments for kids, old<br />
# people, and everyone else.<br />
puts 'What is your name?'<br />
name = gets.chomp<br />
puts 'What year were you born in?'<br />
year = gets.chomp<br />
puts 'What month were you born in?'<br />
month = gets.chomp<br />
puts 'What day were you born on?'<br />
day = gets.chomp<br />
ageY = ((Time.new - Time.mktime(year,month,day))/31557600).to_i<br />
puts 'Well, ' + name + ', you are ' + ageY.to_s + ' years old.'<br />
if ageY &lt; 18<br />
puts 'Enjoy your youth while it lasts.'<br />
elsif ageY &gt;= 70<br />
puts 'You\'re old. Get off the road.'<br />
elsif<br />
puts 'That means it\'s time to get a job!'<br />
end</code></p></blockquote>
<p>In the original code, it took four lines to get the age in years:</p>
<blockquote><p><code>birthday = Time.mktime(year,month,day)<br />
now = Time.new<br />
ageSeconds = now - birthday<br />
ageYears = ageSeconds/31557600</code></p></blockquote>
<p>The &#8220;birthday,&#8221; &#8220;now,&#8221; and &#8220;ageSeconds&#8221; variables were completely unnecessary. They made it easier to work out exactly what was happening, but were wasteful. In the new version, it&#8217;s just:</p>
<blockquote><p><code>ageY = ((Time.new - Time.mktime(year,month,day))/31557600).to_i<br />
</code></p></blockquote>
<p>I can then use this variable in a series of if/elsif statements that returns different results for different ages. I think it&#8217;s funny.</p>
<p>The only thing that&#8217;s still a problem is that it accepts only numerical input for the date, and doesn&#8217;t have any built-in error handling. If someone types &#8220;March,&#8221; instead of &#8220;3,&#8221; it has no idea what to do. The easy solution would be to just tell people in the instructions to use numbers. To make it even easier for people, I could ask them to enter in their date of birth on a single line, using a provided format. Unfortunately, I don&#8217;t yet know how to extract such an entry as three separate numbers. This first app may get visited yet again.</p>
]]></content:encoded>
			<wfw:commentRss>http://kirk.luceo.net/2008/10/age-quiz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Mad Libs Ruby App</title>
		<link>http://kirk.luceo.net/2008/10/my-mad-libs-ruby-app/</link>
		<comments>http://kirk.luceo.net/2008/10/my-mad-libs-ruby-app/#comments</comments>
		<pubDate>Mon, 06 Oct 2008 05:25:51 +0000</pubDate>
		<dc:creator>Kirk</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://kirk.luceo.net/?p=32</guid>
		<description><![CDATA[This post is really just so I can say how proud of myself I am. I just finished cleaning up my most advanced app to date, and felt like sharing. A few days ago, I randomly got the idea to make a Mad Libs Ruby app. I knew that the code would involve a lot [...]]]></description>
			<content:encoded><![CDATA[<p>This post is really just so I can say how proud of myself I am. I just finished cleaning up my most advanced app to date, and felt like sharing.</p>
<p>A few days ago, I randomly got the idea to make a Mad Libs Ruby app. I knew that the code would involve a lot of repetition, which would involve the use of methods, but—while I had read about them—I hadn&#8217;t actually learned how to use them yet. I instead decided to just write it with horribly inefficient code, and then clean it up. It would also serve to illustrate just how much code the final version would save. Here is the original version:</p>
<blockquote><p><code># Mad Lib<br />
# madlib.rb<br />
verb = []<br />
adj = []<br />
noun = []<br />
adv = []<br />
puts 'Type in three verbs, followed by return after each one:'<br />
input = gets.chomp.upcase<br />
verb.push input<br />
input = gets.chomp.upcase<br />
verb.push input<br />
input = gets.chomp.upcase<br />
verb.push input<br />
puts 'Type in three adjectives, followed by return after each one:'<br />
input = gets.chomp.upcase<br />
adj.push input<br />
input = gets.chomp.upcase<br />
adj.push input<br />
input = gets.chomp.upcase<br />
adj.push input<br />
puts 'Type in three nouns, followed by return after each one:'<br />
input = gets.chomp.upcase<br />
noun.push input<br />
input = gets.chomp.upcase<br />
noun.push input<br />
input = gets.chomp.upcase<br />
noun.push input<br />
puts 'Type in three adverbs, followed by return after each one:'<br />
input = gets.chomp.upcase<br />
adv.push input<br />
input = gets.chomp.upcase<br />
adv.push input<br />
input = gets.chomp.upcase<br />
adv.push input<br />
puts 'Thanks! Now I\'d like to tell you a story.'<br />
puts 'One day a very ' + adj[0] + ' ' + noun[0] + ' went walking'<br />
puts 'down the street. It came upon a ' + noun[1] + ' running ' + adv[0]<br />
puts 'after a stranger sight. The ' + noun[0] + ' ' + verb[0] + 'ed a ' + noun[2]<br />
puts 'with a ' + adj[1] + ' ' + noun[0] + '. But that\'s OK'<br />
puts 'because he remembered to ' + verb[1] +'.'</code></p></blockquote>
<p>It starts out by creating four empty arrays, for each part of speech. Then it gets ugly. The core part of the code is this:</p>
<blockquote><p><code>input = gets.chomp.upcase<br />
verb.push input</code></p></blockquote>
<p>It creates the variable &#8220;input,&#8221; then <em>gets</em> it from the user (and also <em>chomps</em> off the return and makes it into all caps, so that they stand out in the final story). It then <em>push</em>es the input into the array for that part of speech (in this case, &#8220;verb&#8221;). The problem is that these two lines get repeated exactly the same two more times for each part of speech, and the only difference in the code for each part of speech is a single word, defining which array it goes into. That&#8217;s twelve repetitions of two lines of code. Here is the new version:</p>
<blockquote><p><code>def ask part<br />
3.times do<br />
input = gets.chomp.upcase<br />
part.push input<br />
end<br />
end<br />
verb = []<br />
adj = []<br />
noun = []<br />
adv = []<br />
puts 'Type in three verbs, followed by return after each one:'<br />
ask verb<br />
puts 'Type in three adjectives, followed by return after each one:'<br />
ask adj<br />
puts 'Type in three nouns, followed by return after each one:'<br />
ask noun<br />
puts 'Type in three adverbs, followed by return after each one:'<br />
ask adv<br />
puts 'Thanks! Now I\'d like to tell you a story.'</code><br />
[The story part is the same as in the original, so I didn't repeat it here]</p></blockquote>
<p>As you can see, I <em>def</em>ined a new method, &#8220;ask.&#8221; It gets the variable &#8220;part&#8221; (for &#8220;part of speech&#8221;). Since I ask each question twice, I added that to the definition. The core part of the code is the same as before, except that I use the &#8220;part&#8221; variable instead. Then for each part of speech, all I need to do is <em>ask</em>, and pass it which part of speech. For each question, six lines becomes two words, and all I added were six lines (two of which are just &#8220;end”).</p>
<p>Of course, there&#8217;s also the story itself. It&#8217;s mostly just a placeholder right now. It doesn&#8217;t even use all of the words the user inputs. I&#8217;ll have to work on it. Also, there&#8217;s one part where I just add an &#8220;-ed&#8221; on the end of a verb, but that doesn&#8217;t work out very well for a lot of verbs. Of course, it&#8217;s kind of amusing to see &#8220;RUNed,&#8221; so maybe I&#8217;ll keep it.</p>
<p>Here it is when I run it in Terminal:</p>
<blockquote><p><code>kirk$ Ruby madlib.rb<br />
Type in three verbs, followed by return after each one:<br />
beat<br />
steal<br />
worship<br />
Type in three adjectives, followed by return after each one:<br />
blue<br />
smelly<br />
smooth<br />
Type in three nouns, followed by return after each one:<br />
desk<br />
floor<br />
shoe<br />
Type in three adverbs, followed by return after each one:<br />
silently<br />
violently<br />
nonchalantly<br />
Thanks! Now I'd like to tell you a story.<br />
One day a very BLUE DESK went walking<br />
down the street. It came upon a FLOOR running SILENTLY<br />
after a stranger sight. The DESK BEATed a SHOE<br />
with a SMELLY DESK. But that's OK<br />
because he remembered to STEAL.</code></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://kirk.luceo.net/2008/10/my-mad-libs-ruby-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I’m Learning Ruby</title>
		<link>http://kirk.luceo.net/2008/09/i%e2%80%99m-learning-ruby/</link>
		<comments>http://kirk.luceo.net/2008/09/i%e2%80%99m-learning-ruby/#comments</comments>
		<pubDate>Sun, 14 Sep 2008 05:15:51 +0000</pubDate>
		<dc:creator>Kirk</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://kirk.luceo.net/?p=31</guid>
		<description><![CDATA[I’ve been toying with the idea of learning a programming language for a while. Earlier today, I decided to find a good Cocoa tutorial. In the introduction to the one I found, it told me to try learning Ruby first, since I don&#8217;t have any real prior experience with any programming. At any rate, I [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve been toying with the idea of learning a programming language for a while. Earlier today, I decided to find a good Cocoa tutorial. In the introduction to the one I found, it told me to try learning Ruby first, since I don&#8217;t have any real prior experience with any programming. At any rate, I found myself reading &#8220;<a href="http://pine.fm/LearnToProgram/">Learn to Program</a>,&#8221; by Chris Pine. I’m not even finished reading it and yet I’ve already made a functional Ruby app, from scratch. He shows different techniques, and gives examples, but at the end of each section, offers additional application ideas, that used the techniques you just learned. I decided to try one of them out. It asks your name and when you were born, then calculates your age and tells you to get a job.</p>
<p><code><br />
puts 'What is your name?' <br />
name = gets.chomp <br />
puts 'What year were you born in?'<br />
year = gets.chomp<br />
puts 'What month were you born in?'<br />
month = gets.chomp<br />
puts 'What day were you born on?'<br />
day = gets.chomp<br />
birthday = Time.mktime(year,month,day)<br />
now = Time.new<br />
ageSeconds = now - birthday<br />
ageYears = ageSeconds/31557600<br />
puts 'Well, ' + name + ', you are ' + ageYears.to_i.to_s + ' years old.'<br />
puts 'That means it\'s time to get a job!'<br />
</code></p>
<p>
This results in (user input in italics):</p>
<p>What is your name?<br />
<em>Kirk</em><br />
What year were you born in?<br />
<em>1984</em><br />
What month were you born in?<br />
<em>3</em><br />
What day were you born on?<br />
<em>13</em><br />
Well, Kirk, you are 24 years old.<br />
That means it&#8217;s time to get a job!</p>
<p>Obviously it’s simple now, but I think it&#8217;s a good start. I’ve also got ideas as to how to make it even more interesting. I could throw in some if/elsif statements and have it give different comments, depending on your age. Perhaps it would tell a 12-year-old to enjoy his youth while he had it, or implore an octogenarian to please stop driving.</p>
<p>In any case, I’m proud of it &#8230; like stick-it-on-the-refrigerator proud, except that my blog will work as the fridge.</p>
]]></content:encoded>
			<wfw:commentRss>http://kirk.luceo.net/2008/09/i%e2%80%99m-learning-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I Bought an iMac</title>
		<link>http://kirk.luceo.net/2008/05/i-bought-an-imac/</link>
		<comments>http://kirk.luceo.net/2008/05/i-bought-an-imac/#comments</comments>
		<pubDate>Tue, 13 May 2008 05:01:35 +0000</pubDate>
		<dc:creator>Kirk</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://kirk.luceo.net/?p=30</guid>
		<description><![CDATA[I bought my MacBook two years ago, and I love it. However, it occurred to me that I spend most of my time with it at my desk. My next computer purchase was obvious. Last August, Apple updated the iMac line, giving it more power and an updated aluminum and black exterior—signaling a definitive turn [...]]]></description>
			<content:encoded><![CDATA[<p>I bought my MacBook two years ago, and I love it. However, it occurred to me that I spend most of my time with it at my desk. My next computer purchase was obvious.</p>
<p>Last August, Apple updated the iMac line, giving it more power and an updated aluminum and black exterior—signaling a definitive turn in Apple&#8217;s overall esthetic from its iconic white to a more professional look first unveiled with the iPhone. Moreover, they increased the screen sizes. While previously available in 17&#8243; and 20&#8243; versions, rumors speculated about an obscenely large 23&#8243; version. In fact, Apple ditched the 17&#8243; size completely, kept the 20&#8243;, and introduced a **24**&#8221; model.</p>
<p>I wasn&#8217;t in the market for a new computer quite yet (not with my paycheck!), but I figured I could at least pick out my next computer. Three base models were offered: a lower-end 20&#8243;, a higher-end 24&#8243;, and a middle-of-the-road 20&#8243; with same upgraded specs as the 24&#8243;. And so I spent the better part of a year debating between the juiced-up 20&#8243; or the 24&#8243;. One retailed for $1,499 and the other $1,799. Four inches, or $300? I compared them in the store on numerous occasions. Do I really need the extra four inches? With the money I saved by going for the 20&#8243; I could get an TV.</p>
<p>And then, three things happened:</p>
<ol>
<li>Apple updated the iMac line. They all got higher specs, but the 24&#8243; now gained a marginally faster processor than is available in the 20”.</li>
<li>I got a $600 economic &#8220;stimulus&#8221; from the federal government. I was going to buy an iMac anyway, but this helped me justify it.</li>
<li>Finally, I read a review and, apparently, the quality of the screen of the 24&#8243; is actually substantially better than the 20”.</li>
</ol>
<p>And so I relented, and bought it. The process, however, was more dramatic than it sounds. I actually considered filming it, but chose not to. The short version is that I covered my face when I clicked the submit button to buy it, then, frightened at spending that much money, peeked through my fingers at the screen.</p>
<p>At any rate, I am now the proud owner of a 24&#8243; iMac. It is shockingly bright, and very fast. My MacBook was no slouch, but I&#8217;m amazed at just how much snappier this is.</p>
]]></content:encoded>
			<wfw:commentRss>http://kirk.luceo.net/2008/05/i-bought-an-imac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An Excerpt from Dostoevsky&#8217;s The Idiot</title>
		<link>http://kirk.luceo.net/2008/01/an-excerpt-from-dostoevskys-the-idiot/</link>
		<comments>http://kirk.luceo.net/2008/01/an-excerpt-from-dostoevskys-the-idiot/#comments</comments>
		<pubDate>Sun, 27 Jan 2008 20:51:11 +0000</pubDate>
		<dc:creator>Kirk</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://kirk.luceo.net/?p=20</guid>
		<description><![CDATA[&#8220;It&#8217;s a stupid story and can be told in two words,&#8221; began the general complacently. &#8220;Two years ago&#8211;yes, nearly two, just after the opening of the new railway&#8211;I was already in civilian dress then and busy about an affair of great importance in connection with my giving up the service. I took a first-class ticket, [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;It&#8217;s a stupid story and can be told in two words,&#8221; began the general complacently. &#8220;Two years ago&#8211;yes, nearly two, just after the opening of the new railway&#8211;I was already in civilian dress then and busy about an affair of great importance in connection with my giving up the service. I took a first-class ticket, went in, sat down, and began to smoke. Or rather I went on smoking, for I had lighted my cigar before. I was alone in the compartment. Smoking is not prohibited, nor was it allowed; it was sort of half allowed, as it usually is. Of course it depends on the person. The window was down.</p>
<p>&#8220;Just before the whistle sounded, two ladies with a lapdog seated themselves just opposite me. They were late. One of them was dressed in gorgeous style in light blue; the other more soberly in black silk with a cape. They were nice-looking, had a disdainful air, and talked in English. I took no notice, of course, and went on smoking. I did hesitate, but I went on smoking close to the window, for the window was open. The lapdog was lying on the pale blue lady&#8217;s knee. It was a tiny creature no bigger than my fist, black with white paws, quite a curiosity. It had a silver collar with a motto on it. I did nothing. But I noticed the ladies seemed annoyed, at my cigar, no doubt. One of them stared at me through her tortoise-shell lorgnette. I did nothing again, for they said nothing. If they&#8217;d said anything, warned me, asked me&#8211;there is such a thing as language after all! But they were silent. &#8230; Suddenly, without the slightest preface&#8211;I assure you without the slightest, as though she had suddenly taken leave of her sense&#8211;the pale blue one snatched the cigar out of my hand and flung it out of the window. The train was racing alone. I gazed at her aghast. A savage woman, yes, positively a woman of quite a savage type; yet a plump, comfortable-looking, tall, fair woman, with rosy cheeks (too rosy, in fact). Her eyes glared at me. Without uttering a word and with extraordinary courtesy, the most perfect, the most refined courtesy, I delicately picked up the lapdog by the collar in two fingers and flung it out of the window after the cigar! It uttered one squeal. The train was still racing on.&#8221;</p>
<p>&#8220;You are a monster!&#8221; exclaimed Nastasya Filippovna, laughing and clapping her hands like a child.</p>
<p>&#8220;Bravo, bravo!&#8221; cried Ferdyshtchenko.</p>
<p>Pititsyn too smiled, though he had also been extremely put out by the general&#8217;s entrance. Even Kolya laughed and cried &#8220;Bravo!” too.</p>
<p>&#8220;And I was right, perfectly right,&#8221; the triumphant general continued warmly.&#8221; For if cigars are forbidden in a railway carriage, dogs are even more so.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://kirk.luceo.net/2008/01/an-excerpt-from-dostoevskys-the-idiot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beginning of a Story with No End</title>
		<link>http://kirk.luceo.net/2007/08/beginning-of-a-story-with-no-end/</link>
		<comments>http://kirk.luceo.net/2007/08/beginning-of-a-story-with-no-end/#comments</comments>
		<pubDate>Tue, 28 Aug 2007 01:28:20 +0000</pubDate>
		<dc:creator>Kirk</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://kirk.luceo.net/?p=19</guid>
		<description><![CDATA[I was looking through the documents on my computer and came across one entitled &#8220;Ruminations,&#8221; written January 23. Apparently I was quite bored, and felt like writing a short story. I don&#8217;t remember if I ever even intended for it to be finished; perhaps it was only ever supposed to be a tantalizing beginning. The [...]]]></description>
			<content:encoded><![CDATA[<p>I was looking through the documents on my computer and came across one entitled &#8220;Ruminations,&#8221; written January 23.  Apparently I was quite bored, and felt like writing a short story. I don&#8217;t remember if I ever even intended for it to be finished; perhaps it was only ever supposed to be a tantalizing beginning. The story, up to the last two sentences, is in fact true. Indeed, I think I actually wrote it while I was sitting on the couch waiting for her to get back, but I&#8217;m getting ahead of myself. Anyway, here is the beginning to what I think could be a good story, if I would bother to come up with the rest of it:</p>
<p>Ruminations<br />
I still don&#8217;t quite know how it happened. I know only that it did happen. At least, <em>I&#8217;m</em> sure it happened. Others are markedly less so, but I&#8217;ll let you be the judge of who is right. I resolve to simply tell it like it is, without any embellishments or omissions.</p>
<p>You see, it all started one day when I went over to a friend&#8217;s house. She was having some furniture delivered but had to make it to the store to buy something before they closed. She asked me to come over in case they came while she was gone, and I happily obliged.</p>
<p>I sat around listening to music for a while when I heard the distinct sound of a diesel engine outside. Ah, the delivery guys, she&#8217;ll be excited! Little did I know at the time that something as innocuous as a sofa could truly lead to so much excitement, nor so much terror.</p>
<p>The brought in the sofa, I signed for it, and waited on my friend to get back. The sofa was made of a smooth, soft leather, with a rich smell. The color was a deep, but not inky, black. It had character, but sophistication. The size was perfect for lounging. Three people could sit comfortably on its plush cushions, or as would more often be the case, one could lie comfortably with one&#8217;s head on the arm rest and feet not quite touching the other arm rest. And so I did. It was a cool night in January, and the sofa had been in the truck for hours, I&#8217;m certain. I figured this way I would warm it up by the time she got back. Only, she didn&#8217;t come back, or she did but I wasn&#8217;t there, only I was there. If you think <em>you&#8217;re</em> confused, be glad you aren&#8217;t me.</p>
]]></content:encoded>
			<wfw:commentRss>http://kirk.luceo.net/2007/08/beginning-of-a-story-with-no-end/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Living with my iPhone</title>
		<link>http://kirk.luceo.net/2007/08/living-with-my-iphone/</link>
		<comments>http://kirk.luceo.net/2007/08/living-with-my-iphone/#comments</comments>
		<pubDate>Tue, 07 Aug 2007 21:33:53 +0000</pubDate>
		<dc:creator>Kirk</dc:creator>
				<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://kirk.luceo.net/?p=18</guid>
		<description><![CDATA[I&#8217;ve never before obsessed over a product as much as the iPhone. With expectations so ridiculously high, it would be easy to be at least a little disappointed, but I&#8217;m not. The iPhone truly is a thing of wonder. I like that if I have a spare minute somewhere, I can easily listen to a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve never before obsessed over a product as much as the iPhone. With expectations so ridiculously high, it would be easy to be at least a little disappointed, but I&#8217;m not. The iPhone truly is a thing of wonder. I like that if I have a spare minute somewhere, I can easily listen to a song, or watch a video. Perhaps one of the most amazingly beneficial features is the built-in speaker. I&#8217;m not going to carry around my earbuds with me everywhere on the off chance that I&#8217;ll get an opportunity for some extended music listening. The fact that I can watch a TV show, or video podcast anywhere is great. Moreover, I can <em>share</em> the experience with others nearby. For such a small speaker, it&#8217;s remarkably powerful, especially if you cup your hand and direct the sound towards yourself.</p>
<p>And then there&#8217;s the internet. Much has been said of the EDGE network. No, it&#8217;s not very fast, but in my experience, it&#8217;s absolutely usable, and I can understand the size/battery tradeoffs involved. I would much rather have a super-thin phone that walked through the internet than a brick that sprints. For my priorities, Apple made the right decision. The browser itself is, of course, fantastic. I really love that I can quickly look up something on Google or IMDB when I&#8217;m out and about, or even just on my couch. Also, the widgets are nice to have; I like to keep an eye on Apple&#8217;s stock price (wishing I had some), and also on the weather.</p>
<p>The decision to use glass for the screen was pure brilliance. As soon as I take it out of my pocket to show people, they always ask, &#8220;Don&#8217;t you have a case for it?&#8221; I love to take my keys and rub them across the surface to the shock of my friends and co-workers. It just doesn&#8217;t scratch. At all. No case necessary.</p>
]]></content:encoded>
			<wfw:commentRss>http://kirk.luceo.net/2007/08/living-with-my-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
