<?xml version="1.0"?><rss version="2.0">
	<channel>
		<title>Finley, I am.</title>
		<link>http://finley.im/</link>
		<description>the blog of James Finley</description>
		<language>en-us</language>
		<pubDate>Mon, 06 Sep 2010 18:15:22 -0700</pubDate>
		<lastBuildDate>Mon, 06 Sep 2010 18:15:22 -0700</lastBuildDate>
		<webMaster>im@finley.im (James Finley)</webMaster>
				<item>
			<title>On Socialism.</title>
			<link>http://finley.im/b/10</link>
			<description>&lt;h4&gt;Bad news:&lt;/h4&gt;

&lt;p&gt;With the plethora of comment spam over the last few weeks, I have &lt;strong&gt;closed&lt;/strong&gt; the &lt;em&gt;Finley, I am.&lt;/em&gt; commenting system down.&lt;/p&gt;

&lt;h4&gt;Good news:&lt;/h4&gt;

&lt;p&gt;Long live the social! &quot;Wait... I thought commenting was &lt;em&gt;closed&lt;/em&gt;?&quot; No, just the &lt;em&gt;Finley, I am.&lt;/em&gt; system for commenting, now I have Facebook Connect implemented on &lt;em&gt;Finley, I am.&lt;/em&gt; to handle all commenting, which allows for much greater control with a lot less of the hassle. Basically, you &lt;strong&gt;must&lt;/strong&gt; have a Facebook username to comment, and since everyone is on Facebook, there is no problem.&lt;/p&gt;

&lt;h4&gt;Futhermore, on the social...ism(?)&lt;/h4&gt;

&lt;p&gt;Today two more things have launched for &lt;em&gt;Finley, I am.&lt;/em&gt; First, the &lt;a href=&quot;http://finley.im/linked/facebookfan&quot;&gt;Facebook fan page&lt;/a&gt;. Wanna follow the latest articles from &lt;em&gt;Finley, I am.&lt;/em&gt;? Always on Facebook? Easily see the latest articles in your stream by becoming a &lt;a href=&quot;http://finley.im/linked/facebookfan&quot;&gt;fan of &lt;em&gt;Finley, I am.&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the final new thing, which (I &lt;em&gt;know&lt;/em&gt;) should have been available from the start is... &lt;a href=&quot;http://finley.im/rss&quot;&gt;RSS&lt;/a&gt;! I've been wanting to get this in for a while, and now it is here. Enjoy!&lt;/p&gt;
</description>
			<pubDate>Fri, 13 Nov 2009 15:49:31 -0800</pubDate>
			<guid>http://finley.im/b/10</guid>
		</item>
				<item>
			<title>Alien to the Bible</title>
			<link>http://finley.im/b/9</link>
			<description>&lt;blockquote&gt;
  &lt;p&gt;&quot;The questions of life's origins and of whether life exists elsewhere in the universe are very suitable and deserve serious consideration,&quot; said the Rev. Jose Gabriel Funes, an astronomer and director of the Vatican Observatory. &lt;a href=&quot;http://www.foxnews.com/story/0,2933,573806,00.html&quot;&gt;Vatican Seeks Signs of Alien Life&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I think that about sums up the issue I have with the Catholic Church. Forget the Bible, we don't need to use it as a source of knowledge! The Vatican accepts Evolution without even thinking about the &lt;strong&gt;theological ramifications&lt;/strong&gt; of the decision, far less looking at the many scientific issues with the &lt;em&gt;theory&lt;/em&gt; of Evolution. With this &lt;strong&gt;fool-hearted acceptance&lt;/strong&gt; of Evolution as &lt;strong&gt;Truth&lt;/strong&gt; (and the Biblical Creation account as a &lt;strong&gt;lie&lt;/strong&gt;), it is no surprise that they'd expect that life could have &quot;developed&quot; (their word) elsewhere in the Universe.&lt;/p&gt;

&lt;p&gt;So what issue is it if life did &lt;em&gt;develop&lt;/em&gt; elsewhere? First, God created everything within 6 days. (&lt;a href=&quot;http://read.ly/Gen1.1.NIV&quot;&gt;Genesis 1&lt;/a&gt;, &lt;a href=&quot;http://read.ly/Exod20.11.NIV&quot;&gt;Exodus 20:11&lt;/a&gt;, &lt;a href=&quot;http://read.ly/John1.3.NIV&quot;&gt;John 1:3&lt;/a&gt;) This means that if aliens existed on another planet, they had to have been created within these 6 days. &lt;strong&gt;Nowhere&lt;/strong&gt; in the Creation account does it mention God creating life elsewhere, &lt;em&gt;only&lt;/em&gt; on Earth is life created. In fact, the reason for the stars is &quot;for signs, and for seasons, and for days, and years,&quot; (&lt;a href=&quot;http://read.ly/Gen1.14.NKJV&quot;&gt;Genesis 1:14&lt;/a&gt;) not for life. Plus, the stars where made for us.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Then God blessed them, and God said to them, &acirc;Be fruitful and multiply; fill the earth and subdue it; have dominion over the fish of the sea, over the birds of the air, and over every living thing that moves on the earth.&acirc; &lt;a href=&quot;http://read.ly/Gen1.28.NKJV&quot;&gt;Genesis 1:28&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;We are to have dominion, sovereignty, control over all of Creation.&lt;/strong&gt; It was made &lt;strong&gt;for us&lt;/strong&gt;, and &lt;strong&gt;handed over to us&lt;/strong&gt; in this first covenant between God and Man. So this means that if life exists on another planet, it is ours to control, subdue, and govern! &lt;strong&gt;The only &quot;intelligent&quot;, or sentient, life in the whole Universe is us!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So lets move past this, and say that for some reason, despite what the Word of God says, life does, in fact, exist elsewhere in the Universe. What conclusions can we draw about this creation? All life was made good (pure, perfect, without flaw) in the beginning. (&lt;a href=&quot;http://read.ly/Gen1.31.NIV&quot;&gt;Genesis 1:31&lt;/a&gt;) So this means that the aliens had to have started out good. Man fell to sin, and because of this, God brought curse upon all of Creation in death, decay, and pain. (&lt;a href=&quot;http://read.ly/Gen3.17.NIV&quot;&gt;Genesis 3:17-19&lt;/a&gt;, &lt;a href=&quot;http://read.ly/Rom5.12.NIV&quot;&gt;Romans 5:12&lt;/a&gt;) So, from this, the perfection of the alien world would have been tarnished by Adam and Eve's sin. Now, if these aliens somehow maintained righteousness, we don't have much of a problem, but we must assume that the aliens, like man, fell into sin. (&lt;a href=&quot;http://read.ly/Rom3.23.NIV&quot;&gt;Romans 3:23&lt;/a&gt;)&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;For God so loved the world that he gave his one and only Son, that whoever believes in him shall not perish but have eternal life. &lt;a href=&quot;http://read.ly/John3.16.NIV&quot;&gt;John 3:16&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But, through mercy and grace, Jesus came and died for all, right? Wrong! He died for the blood of Adam! His blood was the blood of humanity, and just as sin entered the world through one man, salvation and life can be had through the righteousness of one man! (&lt;a href=&quot;http://read.ly/Rom5.17.NIV&quot;&gt;Romans 17-18&lt;/a&gt;) So if aliens exist, and if aliens are fallen, Christ's Blood Redemption was not for them, only for us.&lt;/p&gt;

&lt;p&gt;So what we see in the Bible is that the entirety of Creation, from the farthest reaches of the Universe to the smallest organism on Earth, was created for us (&lt;a href=&quot;http://read.ly/Gen1.14.NKJV&quot;&gt;Genesis 1:28&lt;/a&gt;), our fall from righteousness into sin and filth cursed all of Creation (&lt;a href=&quot;http://read.ly/Gen3.17.NIV&quot;&gt;Genesis 3:17-19&lt;/a&gt;, &lt;a href=&quot;http://read.ly/Rom5.12.NIV&quot;&gt;Romans 5:12&lt;/a&gt;), God brought salvation to the bloodline of Adam through the death of Jesus Christ (&lt;a href=&quot;http://read.ly/John3.16.NIV&quot;&gt;John 3:16&lt;/a&gt;, &lt;a href=&quot;http://read.ly/Rom5.17.NIV&quot;&gt;Romans 17-18&lt;/a&gt;), and there would be no means of redemption for aliens (if any existed). Biblically speaking, though, there is no reason to assume that life exists elsewhere, because God told us what He created, and all of that happened here on Earth. The only reason to assume life exists elsewhere is a belief in a natural, without the hand of God, origin of life, which is not Biblical at all. The Catholic Church, among many others, tries to append God to Evolution and throw out the Creation account, so aliens is a logical conclusion for them.&lt;/p&gt;
</description>
			<pubDate>Wed, 11 Nov 2009 10:45:19 -0800</pubDate>
			<guid>http://finley.im/b/9</guid>
		</item>
				<item>
			<title>On design.</title>
			<link>http://finley.im/b/8</link>
			<description>&lt;p&gt;In response to &lt;a href=&quot;http://37signals.com/svn/posts/1970-a-walk-in-the-woods-can-make-you-a-better-designer&quot;&gt;&lt;em&gt;A walk in the woods can make you a better designer&lt;/em&gt;&lt;/a&gt; on &lt;a href=&quot;http://37signals.com/svn/&quot;&gt;Signal vs. Noise&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&quot;What you&acirc;ll experience are &lt;em&gt;ridiculously good&lt;/em&gt; designs.&quot; Jason Fried echoes what I have said a million times. The best designer in the whole wide world is God, and we should learn from Him. &quot;Inspiration can be in everything that you look at, but with an understanding that the design that we see around us in nature is not only &lt;em&gt;not&lt;/em&gt; accidental, but very much purposefully &lt;strong&gt;created&lt;/strong&gt; for us by the one who created us, that inspiration comes to life in new and fantastic ways!&quot; to quote my &lt;a href=&quot;http://finley.im/about&quot;&gt;About&lt;/a&gt; page.&lt;/p&gt;

&lt;p&gt;But wait! Jason doesn't mention God at all. He attributes the design to something else, and that is Evolution. Let's look at the definition of design:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Design is the planning that lays the basis for the making of every object or system. (Wikipedia)&lt;/p&gt;
  
  &lt;p&gt;to create, fashion, execute, or construct according to plan (Merriam-Webster)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So we can say design is the product of planning by someone or something. So the question then is, can Evolution &lt;em&gt;design&lt;/em&gt;? Evolution is a force powered by natural selection, according to Darwin. Mutations happen that may or may not make something favorable in nature. So all advances in Evolution are &lt;strong&gt;accidental decisions&lt;/strong&gt;, not purposefully thought out, advanced because they just happen to make something more survivable. Evolution cannot &lt;em&gt;plan&lt;/em&gt;. Things come about and continue by happenstance. So no, Evolution cannot &lt;em&gt;design&lt;/em&gt;. What you are looking at in nature is an accident, according to Evolution. A happy accident in most cases, but an accident nevertheless.&lt;/p&gt;

&lt;p&gt;It is great that a designer like Jason Fried is inspired by nature, as all designers should be, but his understanding of Evolution as a designer is faulty. He could leave Photoshop open for a million years but a layout would never make itself. You may laugh at that idea, and I do to. We don't expect it to work that way, so why do we expect nature to work that way?&lt;/p&gt;
</description>
			<pubDate>Tue, 03 Nov 2009 10:33:28 -0800</pubDate>
			<guid>http://finley.im/b/8</guid>
		</item>
				<item>
			<title>Part 2: Respect and Care</title>
			<link>http://finley.im/b/7</link>
			<description>&lt;p&gt;Apparently some people are misinterpreting my article, &lt;em&gt;&lt;a href=&quot;http://finley.im/b/6&quot;&gt;Are you a robot or an alien?&lt;/a&gt;&lt;/em&gt;, so to clear it up, I am righting &lt;em&gt;Part 2: Respect and Care&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;You see, in the last article, I made it very clear that aliens are willing to voice their opinion, even with the knowledge that someone, somewhere is always going to disagree with it. There is not a single opinion, that I know of anyway, that this wouldn't be true for. Aliens understand that there are other opinions out there, many contradicting their very own opinion, and they except and respect those opinions, even if they contradict their own.&lt;/p&gt;

&lt;p&gt;If you feel that I was stating that aliens voice an opinion without caring about the emotions of others, you are wrong. The emotions of others should always be cared about. I do not believe that one should state, without &lt;strong&gt;knowing&lt;/strong&gt; the person and having an understanding with the person, &quot;you, sir, are going to Hell.&quot; This is obviously offensive and judgmental, and I don't advocate people saying such things in such manners. That being said, I respect the speaker's right to said opinion. Saying &quot;Jesus Christ is the Way, the Truth and the Life, no one can come to the Father but through Him,&quot; however is not offensive or judgmental. It is an opinion based off a quote from the Bible. Yes, people will be offended, and some might find it judgmental, but the statement itself is not.&lt;/p&gt;

&lt;p&gt;See, aliens should moderate their words. If something could come off offensive, one needs to make sure that it is as solid a statement as possible and without emotional reasoning/lack thereof. Changing the above statement to &quot;Jesus Christ is the Way, the Truth and the Life, so you are going to Hell,&quot; makes it judgmental and offensive. I, once again, do not advocate that kind of talking.&lt;/p&gt;

&lt;p&gt;An alien should always make sure that people understand that they respect other opinions, and the right of people to have them. This right is what allows for &lt;em&gt;us&lt;/em&gt; to have our opinions. It is not the duty of an alien to offend people, to judge people, and they certainly shouldn't be intolerant. This is what the world of robots does. It is when emotional reasoning (or lack thereof) clouds the words we speak that we become offensive and intolerant. Mind your emotions, mind you words.&lt;/p&gt;

&lt;p&gt;Mind the environment. It is not always the place to voice your opinion. I wouldn't walk into a meeting and say, &quot;y'all here are goin&acirc; to Hell.&quot; First, it's clearly offensive and without explanation, and second it is certainly not the place to be saying such things. You should mind the environment. If I am in a meeting, most likely the only opinions that I will share are those based on my work, unless I&acirc;m asked to voice my opinion on other subjects. It would, clearly, be rude to do so otherwise.&lt;/p&gt;

&lt;p&gt;Open forums are the place to state your opinion. If you go to a gay friend&acirc;s wall on Facebook and post Leviticus 20:13, saying &acirc;If a man lies with a man as one lies with a woman, both of them have done what is detestable,&acirc; it is clearly intended to be offensive and so totally not the place to say such things. However, posting on your own wall the same quote is not offensive (as it is, likely, not directed at anyone). If people take offense to it, and you choose to respond, mind your words and your emotions. Robots, and sometimes other aliens, with let their emotions cloud their judgment. I don&acirc;t advocate that. Speak with rationale, and if people will not hear it, end the conversation before you do lose your cool. If they &lt;strong&gt;will not&lt;/strong&gt; be rational, they &lt;strong&gt;will not&lt;/strong&gt; understand or respect your right to said opinions.&lt;/p&gt;

&lt;p&gt;Finally: love. Part of being open to discussion, thought, and opinions is about knowledge, but the other part is about love. We are told in the Bible that we are to love our neighbors, but also our enemies. This is why you shouldn&acirc;t let emotional reactions cloud rational thought! To love your enemies and your neighbors, you must respect them also, no matter their differences. You can have all the knowledge in the world, but if you have not love, it means nothing! (&lt;a href=&quot;http://read.ly/1Cor13.2.NIV&quot;&gt;1 Corinthians 13:2&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;If this doesn&acirc;t clear something up for you, do ask me. I encourage discussion on this matter. It is an evolving philosophy of mine.&lt;/p&gt;
</description>
			<pubDate>Sun, 04 Oct 2009 14:49:56 -0700</pubDate>
			<guid>http://finley.im/b/7</guid>
		</item>
				<item>
			<title>Are you a robot or an alien?</title>
			<link>http://finley.im/b/6</link>
			<description>&lt;blockquote&gt;
  &lt;p&gt;You are either an alien or a robot. Live as an outsider with real thoughts and opinions, or live as an automaton, like everyone else.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Are you a robot or an alien? Does that seem black and white? A li&acirc;l simplistic or abstract? Let me explain. You see, we are living in a world of &acirc;tolerance,&acirc; where we are told to not be judgmental, offensive, or opinionated. There are &lt;strong&gt;no&lt;/strong&gt; absolutes, right? We wouldn&acirc;t want people to be offended, feel alienated, would we? So we have accepted this mediocre life where if we keep our lips shut and don&acirc;t voice our opinions, everything is just fine and dandy.&lt;/p&gt;

&lt;p&gt;Intolerant, judgmental, opinionated. If you&acirc;ve spoken these words, you are likely a robot. If you think that statement was judgmental, intolerant, or opinionated: you &lt;em&gt;are&lt;/em&gt; a robot. Aliens have opinions and understand that other aliens have opinions. They understand that words -- honest words -- when spoken, will offend someone, somewhere. That is what the robots preach as their reason to not voice an opinion in the first place, but aliens embrace that. Sure, they don&acirc;t go out seeking to offend; they just understand that &lt;em&gt;someone&lt;/em&gt; may be offended, and choose to voice themselves nonetheless.&lt;/p&gt;

&lt;p&gt;That&acirc;s not to say that aliens are &acirc;open-minded.&acirc; Oft times, aliens don&acirc;t necessarily accept other opinions, but at least &lt;em&gt;listen&lt;/em&gt; and &lt;em&gt;respect&lt;/em&gt; opinions that are different from their own. One opinion -- like &acirc;Jesus Christ is the only way to Heaven&acirc; -- may alienate other opinions and claim other opinions as incorrect or wrong. Does this make them intolerant? No, not necessarily. If they respect the opinions of others, no. If they do not respect other opinions, they are a robot, not an alien. But doesn&acirc;t respect include allowing other opinions to be true? No, not at all! See, aliens allow the possibility of an absolute. If absolutes exist, aliens cannot believe their absolute and the absolute of another opinion that contradicts their own. This is the law of contradiction. Something cannot be true &lt;em&gt;and&lt;/em&gt; false at the same time. If you believe that there are &lt;strong&gt;no&lt;/strong&gt; absolutes, you are a robot.&lt;/p&gt;

&lt;p&gt;So robots are not &acirc;open-minded,&acirc; as they claim to be? They are not &acirc;&lt;em&gt;tolerant&lt;/em&gt;&acirc;? Absolutely correct, you are! To be &acirc;open-minded&acirc; or &acirc;tolerant,&acirc; you must allow other people to have opinions -- even if they say that &lt;em&gt;your&lt;/em&gt; opinion, or lack thereof, is wrong. Robots are &lt;em&gt;close&lt;/em&gt;-minded and &lt;em&gt;in&lt;/em&gt;tolerant of anything that stands against their &acirc;norm&acirc;, yet they claim that they are the opposite.&lt;/p&gt;

&lt;p&gt;But not all robots are the same. There are those, like certain Christians, that stand against other robots that are very much automatons. They follow their way, and speak their way amongst each other, but are &lt;strong&gt;highly&lt;/strong&gt; intolerant of other opinions. They don&acirc;t associate with others, robots or aliens, that don&acirc;t agree with them. They don&acirc;t respect the rights of others to have opposing opinions. They are robots.&lt;/p&gt;

&lt;p&gt;And there are aliens that sometimes slip into automaton-like thought, or lack thereof, and disallow others to voice their opinions against their own. This is seen heavily in the art/design industry. This is pride more than intolerance. Their ego is too great to take criticism. If they don&acirc;t watch themselves, they &lt;strong&gt;will&lt;/strong&gt; become robots.&lt;/p&gt;

&lt;p&gt;I&acirc;m an alien. I accepted a long time ago that opinions offend, but I&acirc;d rather voice my opinions than just live my life like everyone else. I am different from the world, some would say that I am against the world. I embrace the differences and the opinions of others, and love them more for these things that make us unique. I speak when I want to, and I don&acirc;t sugar coat or apologize for my opinions. People are, often, offended by what I say, and I&acirc;m okay with that. Which are you? Are you a robot, or are you an alien? &lt;/p&gt;
</description>
			<pubDate>Tue, 29 Sep 2009 12:07:07 -0700</pubDate>
			<guid>http://finley.im/b/6</guid>
		</item>
				<item>
			<title>Running Yellow</title>
			<link>http://finley.im/b/5</link>
			<description>&lt;p&gt;I got a new iPod. Yes, the new iPod nano. Yes, it's yellow, which is my favorite color. This is my first non-touch iPod since the iPod touch first came out. The interface has certainly evolved, gaining a lot of little improvements and tweaks. The coolest part aside from the small video camera is the pedometer built right in. I can track my steps walked day-in and day-out, and sync them to Nike+Active. I burned 400+ calories today, walking over 6000 steps. Yay basketball. I've got some great, small projects coming together, which I unfortunately cannot share much about, which is why I've been radio-silent this last week. I want to blog about a cool new project that is in development, but am waiting on some technical stuff to come through for it. So be ready to hear from me on that soon. Like, hopefully, this week. Until then, chill! lol &lt;/p&gt;
</description>
			<pubDate>Mon, 14 Sep 2009 20:43:29 -0700</pubDate>
			<guid>http://finley.im/b/5</guid>
		</item>
				<item>
			<title>Finley, iPhone.</title>
			<link>http://finley.im/b/4</link>
			<description>&lt;p&gt;Finley, iPhone.&lt;/p&gt;

&lt;p&gt;Today, I launch the iPhone optimized &lt;em&gt;Finley, I am.&lt;/em&gt; There is still a few things to do for it, including a comment system, but it is pretty much done. The current set-up allows you to easily view the last 5 articles in an easy to use interface, but will soon (dunno how soon though...) support the viewing of all articles, searching of articles, and a few more features. Of course, being a programming blog, I wanna give y'all the lowdown on what builds and makes this li'l interface work.&lt;/p&gt;

&lt;p&gt;First, here is the script that switches the view to the iPhone optimized site:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;if (window.navigator.userAgent.indexOf('iPhone') !== -1) {
    $(document).ready(function () {
        //add iPhone tags
        $('head').append('&amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;&quot;/&amp;gt;');
        $('head').append('&amp;lt;meta name=&quot;apple-mobile-web-app-capable&quot; content=&quot;yes&quot; /&amp;gt;');
        $('head').append('&amp;lt;link rel=&quot;apple-touch-icon-precomposed&quot; href=&quot;/resources/images/iphone_icon.png&quot; type=&quot;image/png&quot; /&amp;gt;');

        //add iPhone css
        $('head').append('&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;/resources/css/iphone.css&quot; /&amp;gt;');

        var articles = [];
        var count    = $('.last5 li:not(.all) a').size();
        var loaded   = 0;

        //function so slide list over and article out
        var goBack = function (div) {
            var div = div;
            $('ul').eq(0).removeClass('toLeft');
            div.removeClass('toView');
            $('header span.back').removeClass('show');
        };

        //function to slide article over and list out
        var showArticle = function (articleIndex) {
            var div = articles[articleIndex].div;
            $('header span.back').addClass('show').get(0).onclick = function () {
                goBack(div);
                return false;
            };
            $('ul').eq(0).addClass('toLeft');
            articles[articleIndex].div.show().addClass('toView');
            $('#iphone').height(articles[articleIndex].div.height() + 60);
        };

        //function to build list and articles
        var buildInterface = function () {
            $('body').addClass('iPhone');
            var iPhone = $('&amp;lt;div id=&quot;iphone&quot;&amp;gt;&amp;lt;/div&amp;gt;');
            iPhone.append('&amp;lt;header&amp;gt;&amp;lt;span class=&quot;title&quot;&amp;gt;Finley, I am.&amp;lt;/span&amp;gt;&amp;lt;span class=&quot;back&quot;&amp;gt;back&amp;lt;/span&amp;gt;&amp;lt;/header&amp;gt;');
            var articleList = $('&amp;lt;ul&amp;gt;&amp;lt;/ul&amp;gt;');
            articleList.appendTo(iPhone);
            $.each(articles, function (i, article) {
                var i  = i;
                var li = $('&amp;lt;li&amp;gt;&amp;lt;a href=&quot;#&quot;&amp;gt;'+article.subject+'&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;');
                li.find('a').click(function () {
                    showArticle(i);
                    return false;
                });
                articleList.append(li);
                article.div = $('&amp;lt;article&amp;gt;'+article.article+'&amp;lt;/article&amp;gt;');
                article.div.hide().appendTo(iPhone);
            });
            iPhone.appendTo('body');
        };

        //get article list, and load articles
        $('.last5 li:not(.all) a').each(function (i) {
            if (!$(this).parent('li').hasClass('all')) {
                var href = $(this).attr('href');
                var i    = i;
                $.get(href, function (data) {
                    var obj = {};
                    obj.subject = $('section#blog article', data).eq(0).find('h2').eq(0).text();
                    obj.article = $('section#blog article', data).eq(0).html();
                    articles[i] = obj;
                    loaded++;
                    if (loaded === count) {
                        buildInterface();
                    }
                }, 'xml');
            }
        });

        //remove container
        $('#container').remove();
    });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Less than 100 lines, I grab the list of articles from the sidebar, add the necessary stylesheets &amp;amp; meta tags, and build the interface you see. The animated transitions (the slide) are CSS transitions.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;-webkit-transition: left .3s ease-in;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It's really as easy as that! Now, if you click a link to an article on &lt;em&gt;Finley, I am.&lt;/em&gt;, say on Twitter or Facebook, it will bring up the normal, &quot;unoptimized&quot; interface. This will soon be &quot;fixed,&quot; when all articles can be viewed on the iPhone-optimized &lt;em&gt;Finley, I am.&lt;/em&gt; Hope y'all like it!&lt;/p&gt;
</description>
			<pubDate>Mon, 07 Sep 2009 11:49:11 -0700</pubDate>
			<guid>http://finley.im/b/4</guid>
		</item>
				<item>
			<title>Of Javascript and Databases. (Part 2)</title>
			<link>http://finley.im/b/3</link>
			<description>&lt;p&gt;Yesterday, I showed y'all one of the cool, new technologies of HTML5: Javascript databases. I also released my jQuery plugin allowing for a Code Igniter style &quot;Active Record.&quot; Create and manager local databases with ease, even without knowing SQL. In my view, one of the big uses of this technology is synchronizing data from a server to the local database, and vis versa. Sure, there are apps that you may write that the database existing only locally is fine, but if the user wants to use it on multiple devices (iPhone, desktop, and laptop?), you'll need to synchronize the data.&lt;/p&gt;

&lt;p&gt;That is where the second plugin, the second half of my &quot;system,&quot; comes into play. Let's take a Twitter app for example. Say I'm building a Twitter app, on par with other Twitter apps on the iPhone/iPod touch platform. For this, I would only need a one-way sync, meaning that the data only changes on Twitter's servers. I would like to send out a check every 5 minutes to get the latest data, but also (of course) trigger the check after I tweet, or when I click a button. Let's look at some code.&lt;/p&gt;

&lt;h4&gt;Create the database and table to store the tweets.&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;//open connection to database
$.db.open_db({
    shortName: 'twitter',
    version:   '1.0',
    name:      'My Twitter App',
    maxSize:   5242880 //up to 5 megabytes
});

//create tweets table, if it doesn't exist
$.db.create_table({
    name: 'tweets',
    fields: [{
        name: 'id',
        type: 'INTEGER',
        extra:'PRIMARY KEY AUTOINCREMENT'
    }, {
        name: 'created_at'
    }, {
        name: 'user_name'
    }, {
        name: 'screen_name'
    }, {
        name: 'user_id'
    }, {
        name: 'text',
        type: 'TEXT(140)'
    }, {
        name: 'in_reply_to_status_id'
    }, {
        name: 'favorited'
    }]
}, true);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you don't know what all that is, consult the &lt;a href=&quot;/blog/article/of_javascript_and_databases&quot;&gt;article&lt;/a&gt; from yesterday or the &lt;a href=&quot;/projects/jquerydb&quot;&gt;guide&lt;/a&gt; in the &lt;a href=&quot;/projects&quot;&gt;Projects&lt;/a&gt; section of this site. Now, of course, you could set up a few interval functions to carry out a sync yourself, but watch this:&lt;/p&gt;

&lt;h4&gt;Synchronize the Database.&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;$.db_sync.init('tweets', {
    primaryKey: 'id',
    syncURL: 'http://username:password@twitter.com/statuses/friends_timeline.json?count=50&amp;amp;callback=?',
    interval: 300000,
    processData: function (data) {
        if (data.error) return false;
        var ret = [];

        var obj;
        var i = data.length;
        while (i--) {
            obj                       = {};
            obj.id                    = data[i].id;
            obj.created_at            = data[i].created_at;
            obj.user_name             = data[i].user.name;
            obj.screen_name           = data[i].user.screen_name;
            obj.user_id               = data[i].user.id;
            obj.text                  = addslashes(data[i].text);
            obj.in_reply_to_status_id = data[i].in_reply_to_status_id ? data[i].in_reply_to_status_id : 0;
            obj.favorited             = data[i].favorited;
            ret.push(obj);
        }

        return ret;
    }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So what are we doing here? &lt;code&gt;$.db_sync.init&lt;/code&gt; initializes a sync on a table, as specified in argument 1. It assumes a connection is made to a database, using the db plugin, and that the table is already created. The second argument is settings. &lt;code&gt;primaryKey&lt;/code&gt; is, of course the primary key of the table. &lt;code&gt;syncURL&lt;/code&gt; is what we are syncing with (which returns JSON). &lt;code&gt;interval&lt;/code&gt; is the time in thousandths of a second. &lt;code&gt;processData&lt;/code&gt; is a cleaner, and where the power happens. You want to clean the data to include only, and all of, the fields that are in the table, and return it as an array of objects.&lt;/p&gt;

&lt;p&gt;So that is all it takes, and now every five minutes it will grab the data from &lt;code&gt;syncURL&lt;/code&gt;, clear the table, and store the new data. But how do you know when it is syncing? Or when it is done? Callbacks, of course! There are three main callbacks that are triggered during the syncing process. They are: &lt;code&gt;window.onsyncpercent&lt;/code&gt;, &lt;code&gt;window.onsyncstatuschange&lt;/code&gt;, and &lt;code&gt;window.onsyncready&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;Monitor the Sync.&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;//on percentage change
window.onsyncpercent = function (table, percent) {
    window.console.log(table+' is syncing at '+percent+'%');
};

//on status change
window.onsyncstatuschange = function (table, status) {
    window.console.log(table+' status: '+status);
};

//on sync, build interface
window.onsyncready = function (table, status) {
    $.db.order_by('id').get('tweets', function (r) {
        window.console.log(r.results);
    });
};
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;onsyncready&lt;/code&gt; is the main one, though you could use &lt;code&gt;onsyncstatuschange&lt;/code&gt; to catch the &quot;ready&quot; status. Here, when the sync is ready, you may refresh the interface with the latest tweets, play a sound, or any number of things.&lt;/p&gt;

&lt;h4&gt;Force the Sync.&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;$.db_sync.sync('tweets');
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This will cause the sync to be called now, resetting the timer for 5 minutes from now. Call this after a tweet is posted, for example.&lt;/p&gt;

&lt;h4&gt;Still to be Done...&lt;/h4&gt;

&lt;p&gt;There is still a list of things to be done with this. One is better handling of two-way sync. If you make a change to local data, it will be overridden by the sync. There is a way to stop the sync from happening, and it is the &lt;code&gt;precheck&lt;/code&gt; function setting when you initialize the sync. The &lt;code&gt;precheck&lt;/code&gt; is handed a function to carry out the sync.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$.db_sync.init('tweets', {
    primaryKey: 'id',
    syncURL: 'http://username:password@twitter.com/statuses/friends_timeline.json?count=50&amp;amp;callback=?',
    interval: 300000,
    precheck: function (syncFN) {
        if (changesMade !== true) {
            syncFN();
        }
        else {
            //send new data to server, then sync
        }
    },
    processData: function (data) {
        ... //example code above
    }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Also, I would like to add a way to &lt;em&gt;merge&lt;/em&gt; the data, as opposed to replacing it, allowing only new data to be inserted. But, that is database synchronization at it's core. You wanna create a Twitter app with just Javascript, HTML, and CSS now, storing the data locally? Easy! More to come in the coming week.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PS:&lt;/strong&gt; There is no page on database sync in the &lt;a href=&quot;/projects&quot;&gt;Projects&lt;/a&gt; section, but the script is part of the &lt;a href=&quot;/projects/jquerydb&quot;&gt;jQuery DB plugin&lt;/a&gt; download, and for those that already downloaded that, it is already in there for you!&lt;/p&gt;
</description>
			<pubDate>Sun, 06 Sep 2009 09:24:14 -0700</pubDate>
			<guid>http://finley.im/b/3</guid>
		</item>
				<item>
			<title>Of Javascript and Databases.</title>
			<link>http://finley.im/b/2</link>
			<description>&lt;p&gt;HTML5 is the new buzz word around the Web. What it entitles for us frontend developers is massive. The level of stuff that is being added is set to truly bring web apps to the forefront, and Javascript will continue to be a strongly requested technology. The biggest part of the spec that I have played with is the &lt;a href=&quot;http://dev.w3.org/html5/webstorage/&quot;&gt;local databases&lt;/a&gt;. And, though flaws are present (in spec and in supporting browsers), it is definitely where we need to be headed.&lt;/p&gt;

&lt;p&gt;Some have questioned the true usefulness of Javascript databases, as they, like cookies, just store data from session to session. But, the uses are aplenty when you consider the matching of the offline functionalities of HTML5, such as the &lt;a href=&quot;http://www.w3.org/TR/offline-webapps/&quot;&gt;cache manifest&lt;/a&gt;. Combined together, one can make an app that stores data locally, which may periodically synchronize with a server when Internet is available, and works offline. What use is this? Imagine your Facebook contacts (phone numbers, street addresses, email addresses, etc.) being available offline. Or being able to access email from a webmail interface, but while offline. These things are possible, now, through Gears and other plugins that allow offline caching and storing of data, but with &lt;a href=&quot;http://apple.com/safari&quot;&gt;Safari 3+&lt;/a&gt;, the HTML5 methods are available without plugins.&lt;/p&gt;

&lt;p&gt;Who is using this technology? &lt;a href=&quot;http://gmail.com&quot;&gt;Gmail&lt;/a&gt;, for one. If you visit your Gmail account from your iPhone, iPod touch, Palm Pre, or Android phone, you'll notice (or maybe not notice) this technology in use. Gmail downloads a database of your messages to your mobile device, and uses a cache manifest to store the interface files (HTML, Javascript, CSS, etc.) This allows you to easily access you email with the Gmail interface online and offline. Send an email while your offline? No problem, it'll send as soon as it has a connection available!&lt;/p&gt;

&lt;p&gt;Want to use this technology? You can find guides on &lt;a href=&quot;http://tuvix.apple.com/safari/library/documentation/iPhone/Conceptual/SafariJSDatabaseGuide/Introduction/Introduction.html&quot;&gt;Apple's Safari Developer site&lt;/a&gt;. But, for those of you who don't know much when it comes to SQL, it may be a new language that you'll need to learn to utilize this new technology. That is why I have (attempted) to make it much easier to use, by implementing a system much like the &quot;Active Record&quot; of Code Igniter. If you don't know how to use that, don't worry, I've got a small guide on how to use my script, which is written as a plugin for jQuery. Let me give you a quick example of connecting to a database, creating a table, and inserting data into that table.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;//connect to database
$.db.open_db({
    shortName: 'prayers',
    version:   '1.0',
    name:      'Prayers',
    maxSize:   1048576 //allow up to 1 mb to be stored
});

//create a table, named &quot;prayers,&quot; and store a prayer in it once created
$.db.create_table({
    name: 'prayers',
    fields: [{
        name: 'id',
        type: 'INTEGER',
        extra:'PRIMARY KEY AUTOINCREMENT'
    }, {
        name: 'prayer'
    }, {
        name: 'date',
        type: 'INTEGER'
    }]
}, true, function () {
    $.db.insert('prayers', {id: null, prayer: 'For my fianc&Atilde;&copy;e\'s upcoming test.', date: (new Date()).getTime()});
});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So what does what? &lt;code&gt;$.db.open_db&lt;/code&gt; opens a connection to the database, and if it doesn't already exist, it creates it. &lt;code&gt;$.db.create_table&lt;/code&gt; creates a table with the name and fields specified. The second argument (&lt;code&gt;true&lt;/code&gt; in this example) is an if exists clause; if the table already exists, don't create it again. The third argument is a callback upon successful creation of the table. Here we, as the callback, insert a prayer into the prayers table we just created.&lt;/p&gt;

&lt;p&gt;This is far easier, at least in my opinion, than running raw queries all the time. Further, more advanced examples are available on the &lt;a href=&quot;/projects/jquerydb&quot;&gt;project page here&lt;/a&gt;. The biggest shortcake to Javascript databases, that I've come across, is that they are asynchronous. Why, if the data is stored locally, would accessing the data be asynchronous? Maybe someone of better knowledge on this subject could enlighten me? Until next time, please experiment with this script, and look forward to the future!&lt;/p&gt;
</description>
			<pubDate>Sat, 05 Sep 2009 19:13:17 -0700</pubDate>
			<guid>http://finley.im/b/2</guid>
		</item>
				<item>
			<title>Finley, I am.</title>
			<link>http://finley.im/b/1</link>
			<description>&lt;p&gt;I am Finley, James Finley. You will soon be graced with elegant articles and commentaries about code, design, inspiration, life, love, and much more, as I am reader, writer, coder, designer, philosopher, and philosophier.&lt;/p&gt;

&lt;p&gt;Last week I launched a new version of &lt;a href=&quot;http://onecrimsonsplash.com/&quot; title=&quot;one Crimson Splash&quot;&gt;my portfolio site&lt;/a&gt;, and this week &lt;em&gt;Finley, I am.&lt;/em&gt; The new &lt;em&gt;one Crimson Splash&lt;/em&gt; is all HTML/CSS and jQuery for the scroll and animated effects, as opposed to the Flash site launched in December. I pushed myself for a cleaner designer, and what you see is what I produced.&lt;/p&gt;

&lt;p&gt;If you have an iPhone, might you have checked out the iPhone version of &lt;em&gt;one Crimson Splash&lt;/em&gt;? This will, in time, store offline the images, and allow the launching and viewing off it without an Internet connection. How, you so inquisitively ask? HTML5 Javascript databases and manifest. The Javascript database is already in place, and synchronizes with the server on launch, and periodically afterwards. The manifest is being a bit tricky. Expect a full article on Javascript databases and HTML5 offline capabilities soon.&lt;/p&gt;

&lt;p&gt;This is it for the first article of &lt;em&gt;Finley, I am.&lt;/em&gt;, but you can expect me to be back shortly with more. Until then, ponder this quote:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Let us consider how we may spur one another on toward love and good deeds.&lt;/p&gt;
  
  &lt;p&gt;&lt;cite&gt;&lt;a href=&quot;http://read.ly/Heb10.24.NIV&quot; title=&quot;Hebrews 10:24 (NIV) - YouVersion&quot;&gt;Hebrews 10:24 (NIV)&lt;/a&gt;&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</description>
			<pubDate>Sat, 05 Sep 2009 14:28:54 -0700</pubDate>
			<guid>http://finley.im/b/1</guid>
		</item>
			</channel>
</rss>