<?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>KeatonTech</title>
	<atom:link href="http://keatontech.grotonma.net/feed" rel="self" type="application/rss+xml" />
	<link>http://keatontech.grotonma.net</link>
	<description>Makers of mac stuff</description>
	<lastBuildDate>Sun, 20 Sep 2009 16:49:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Behind the scenes of TiMo C2</title>
		<link>http://keatontech.grotonma.net/blog/behind-the-scenes-of-timo-c2</link>
		<comments>http://keatontech.grotonma.net/blog/behind-the-scenes-of-timo-c2#comments</comments>
		<pubDate>Sun, 20 Sep 2009 16:49:38 +0000</pubDate>
		<dc:creator>Keaton Brant</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://keatontech.grotonma.net/?p=227</guid>
		<description><![CDATA[Yes, &#8216;C2&#8242; is my nickname for TiMo&#8217;s new core, it sounds sufficiently modern and exciting. In fact, what started as a mere core rewrite is becoming more of a complete overhaul of the whole thing. It turns out that there were a large number of things wrong with TiMo C1, and pinning new code onto [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, &#8216;C2&#8242; is my nickname for TiMo&#8217;s new core, it sounds sufficiently modern and exciting. In fact, what started as a mere core rewrite is becoming more of a complete overhaul of the whole thing. It turns out that there were a large number of things wrong with TiMo C1, and pinning new code onto the old code to fix all of those things is just not feasible. A quick warning before I start, this post is very very geeky, and will probably make absolutely no sense to people without experience with object oriented programming. Here are the goals and accomplishments of this rewrite:</p>
<p><strong>Goal #1: Basic new features</strong></p>
<p>In a way, this rewrite had to happen no matter what, since you can never really know what features a program needs until you&#8217;ve played with it a bit. When I first wrote TiMo C1, I completely forgot about important features like the ability to select and move around multiple objects at a time. So much of TiMo has been built around the idea that only one object would be selected (the inspector, the guide system, even the UI), that adding in the ability to select multiple object would have taken a week or more, and even then been buggy. Other features that C1 didn&#8217;t/couldn&#8217;t have that C2 does/will include multicolored guides, the ability to move and animate the &#8216;camera&#8217;/viewpoint, the ability to rotate objects (that&#8217;s one of those &#8220;well duh&#8221; things that I had completely forgotten about until months into development), a large number of powerful hotkeys, and more.</p>
<p><strong>Goal #2: Code Efficiency</strong></p>
<p>TiMo C1 was pretty much my first Xcode project ever, right after &#8220;Hello World&#8221;. So, as you can imagine, memory management and code efficiency were not exactly my chief concern, no, my chief concern was &#8220;Hey, look at me, I&#8217;m an Xcode programmer now!&#8221;. Just about everything in C2 is more efficient, from the core all the way up to the UI (which I&#8217;ll talk about later). Possibly the biggest change in C2 is the completely new way of linking Items and Layers. &#8216;Items&#8217; are the entities that store the properties of an object and handle keyframing. &#8216;Layers&#8217; are what show up the editor, in other words, what you see. In TiMo C1 these were completely separate, the only way you could find the layer corresponding to a certain item (or vice-versa) was by searching through an array for an object with the same name. The thing is that Layers get all of their instructions (where to go, how big to be, what colors to draw, etc) from the Item, so every time you changed a frame or resized an object TiMo would have to look through the array as many as a hundred or so times. This was, as you can imagine, slow. Furthermore, the actual code that drew the objects into the layers was completely separate from the code that handled their properties, which lead to very messy code and a very messy plugin architecture.</p>
<p>I admit it, TiMo C1 was pretty awful, playing even simple animations could take as much as 50% of my processor power. TiMo C2 has a completely different approach to this. Items have direct pointers to their corresponding layers, and likewise, layers have direct pointers to their parent items. No more searching through arrays. Also, each type of object has it&#8217;s own subclass of  &#8217;Item&#8217; now, so all of the drawing code is right next to the keyframing code, and any object with special properties or requirements can implement that cleanly by overriding some functions. This not only makes my job easier, but now plugin development gets simplified from multiple protocols to just one subclass.</p>
<p><strong>Goal #3: UI Efficiency</strong></p>
<p>TiMo C2 has a lot of UI changes, many that you can see (the new Library view, for example), and many that you cannot (like the newly recreated editor). All of the new stuff goes by a new philosophy, &#8220;Use a lot of layers&#8221;. The library view, for example, is comprised of 49 layers. The reason for having so many layers is that nothing ever has to be redrawn. In the old TiMo, many large controls (like the timeline) were drawn into one layer, so every time you resized them, the entire layer had to be redrawn. The new library uses a lot of different layers with CALayerConstraints to automatically move them around, instead of redrawing them. Moving layers is handled by the graphics card, redrawing them is handled by the processor, so my new methodology makes TiMo run many many times faster (especially on newer machines). The same methodology was applied to the editor view in TiMo C2. The editor used to have 1 &#8216;overlay layer&#8217; on top of all of the user layers that drew things like guides, rulers, and drag handles. That meant that every time you moved an object, the entire overlay had to be redrawn, which was the main reason why moving layers took so much power. In TiMo C2, everything has it&#8217;s own layer, even individual guides, so that hardly anything ever needs to be redrawn.</p>
<p><strong>Goal #4: Clean Code</strong></p>
<p>TiMo C1 had been through 3 complete UI overhauls before I abandoned it. There were about 20 full code files and hundreds of other methods that where no longer in use, remnants of old UIs. Not only that, I kept tacking on new features to the core, instead of having them be part of it from the start, so there was code strewn everywhere (it sort of resembled my bedroom, in a way). Unlike my bedroom, I&#8217;m making an effort to keep everything in the right spot, and get rid of things I don&#8217;t need anymore.</p>
<p>And there you have it, if you understood everything I just said, you have a lot of patience and a lot of coding experience. Congratulations :p -Keaton</p>
<p><strong></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://keatontech.grotonma.net/blog/behind-the-scenes-of-timo-c2/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>My goals in life</title>
		<link>http://keatontech.grotonma.net/blog/my-goals-in-life</link>
		<comments>http://keatontech.grotonma.net/blog/my-goals-in-life#comments</comments>
		<pubDate>Fri, 05 Jun 2009 01:22:33 +0000</pubDate>
		<dc:creator>Keaton Brant</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://keatontech.grotonma.net/?p=218</guid>
		<description><![CDATA[In no particular order:

li{
padding-top: 10px;
}


Be the top result of every google search imaginable.
Find a plot hole in reality
Write an autobiography of someone else, just to prove that the actual meaning of words doesn&#8217;t apply to me
Become the next Shakespeare by writing a 1000 page book comprised entirely of adjectives
Have a party where literally everybody in [...]]]></description>
			<content:encoded><![CDATA[<p>In no particular order:</p>
<style type="text/css">
li{
padding-top: 10px;
}
</style>
<ul style="text-align: left; line-spacing: 200%;">
<li>Be the top result of every google search imaginable.</li>
<li>Find a plot hole in reality</li>
<li>Write an autobiography of someone else, just to prove that the actual meaning of words doesn&#8217;t apply to me</li>
<li>Become the next Shakespeare by writing a 1000 page book comprised entirely of adjectives</li>
<li>Have a party where literally everybody in the world is invited, travel expenses paid</li>
<li>Get the phone number: (481) 516 2342</li>
<li>Write a song so beautiful that it makes Chuck Norris cry</li>
<li>&#8220;Set&#8221; the &#8220;world record&#8221; for &#8220;number&#8221; of &#8220;air&#8221; quotes &#8220;used&#8221; in &#8220;one speech&#8221;</li>
<li>Become a role model to myself</li>
<li>Legally change my name to &#8220;Señór Choolo&#8221;</li>
<li>Discover that The Hitchhikers guide to the Galaxy is actually non-fiction</li>
<p><span id="more-218"></span></p>
<li>Become so awesome that the US government issues a search warrant to find the source of my awesomeness.</li>
<li>Be famous for my mode of transportation &#8211; Steve Woz style (maybe I&#8217;ll use a jetpack or something)</li>
<li>Invent a sport with so many rules that only people with an IQ of 200 and above can play it.</li>
<li>Do another episode of iEye</li>
<li>Get dugg so often that my website is never up</li>
<li>Invent a really stupid internet term that sweeps the nation</li>
<li>Eat an entire wheel of goulda cheese</li>
<li>Become a macbreak weekly regular, make my personal jingle an hour and a half long</li>
<li>Build a house entirely out of empty coke cans</li>
<li>Make a video so awesome that YouTube&#8217;s servers are all brought down</li>
<li>Have more twitter followers than the population of my town</li>
<li>Do a TED talk without using any words with more than 2 syllables in them</li>
<li>Discuss cream cheese for twenty minutes on at least 1 major news network</li>
<li>Twitter so often that the public timeline and my twitter page always look exactly the same</li>
<li>Go to the TWiT Cottage and ask for Evan Williams</li>
<li>Get beat up by Leo Laporte (possibly as a result of the latter)</li>
<li>Discover that Coca-Cola cures every disease known to man</li>
<li>Buy the first Moon Bounce that is actually on the moon.</li>
<li>Have so much money that I have to invent my own currency to keep track of it.</li>
<li>Become Iron Man</li>
<li>Hold the world record in something so ridiculous that it&#8217;s impossible to explain.</li>
<li>Become the CEO of Microsoft, Re-incarnate BOB, &#8216;Accidently&#8217; go bankrupt</li>
<li>Make a documentary entirely about paint drying, make millions from people who lost bets.</li>
<li>Have an asteroid named after me that later turns out to be on a collision course with earth.</li>
<li>Star in &#8220;XKCD the movie&#8221; as a stick figure (I might have to loose some weight)</li>
<li>√ Write a &#8220;My goals in life&#8221; blog post instead of doing homework</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://keatontech.grotonma.net/blog/my-goals-in-life/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>TiMo UI Demo Video!</title>
		<link>http://keatontech.grotonma.net/blog/uidemo1</link>
		<comments>http://keatontech.grotonma.net/blog/uidemo1#comments</comments>
		<pubDate>Sun, 17 May 2009 04:11:24 +0000</pubDate>
		<dc:creator>Keaton Brant</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://keatontech.grotonma.net/?p=208</guid>
		<description><![CDATA[
  TiMo UI Demo 
Me showing off a bunch of TiMo&#8217;s new features, like it&#8217;s new Timeline, Inspector, and Library! You can see the animations in action, which is like porn for geeks. That&#8217;s hot!
By the way, sorry for the poor picture quality, I&#8217;ll make it better next time, promise!
]]></description>
			<content:encoded><![CDATA[<p>
<div class="hvlog share"> <a href="http://keatontech.grotonma.net/wp-content/uploads/2009/05/iShowU-Capture10.mov" rel="enclosure"> <img src="http://img.skitch.com/20090517-c7n2rcg6ef1iniag3amhk7rcbf.png" style="width: 480px; height: 320px;"><br />TiMo UI Demo</a> </div>
<p>Me showing off a bunch of TiMo&#8217;s new features, like it&#8217;s new Timeline, Inspector, and Library! You can see the animations in action, which is like porn for geeks. That&#8217;s hot!<br />
<em>By the way, sorry for the poor picture quality, I&#8217;ll make it better next time, promise!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://keatontech.grotonma.net/blog/uidemo1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://keatontech.grotonma.net/wp-content/uploads/2009/05/iShowU-Capture10.mov" length="16337523" type="video/quicktime" />
		</item>
		<item>
		<title>Redesigning TiMo&#8217;s interface</title>
		<link>http://keatontech.grotonma.net/blog/redesigning-timos-interface</link>
		<comments>http://keatontech.grotonma.net/blog/redesigning-timos-interface#comments</comments>
		<pubDate>Wed, 06 May 2009 22:12:32 +0000</pubDate>
		<dc:creator>Keaton Brant</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://keatontech.grotonma.net/?p=166</guid>
		<description><![CDATA[Surprisingly enough, the hardest part of software development is not the code, but the interface. Even a Windows developer would admit that the way a user interacts with the code is just as important as the list of features, although clearly this is not a rule that they generally enforce with their own apps. Mac [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;line-height: 23px">Surprisingly enough, the hardest part of software development is not the code, but the interface. Even a Windows developer would admit that the way a user interacts with the code is just as important as the list of features, although clearly this is not a rule that they generally enforce with their own apps. Mac apps, however, have a very high and exacting standard for UI design. TiMo poses an especially big challenge: Fitting an entire animation tool in a small space, while keeping it easy enough for grandma to use with only a few minutes of training. I&#8217;m currently working through a major redesign, here&#8217;s what I&#8217;m up to:</p>
<p style="text-align: justify;"><span id="more-166"></span></p>
<p style="text-align: justify;line-height: 23px"><strong><em>NOTE:</em></strong><em> This post is ongoing, and will keep changing as TiMo&#8217;s new interface keeps changing, nothing is final. If you have any ideas please leave a comment below, but you knew that already</em>.</p>
<p style="text-align: justify;line-height: 23px">TiMo is the first cocoa app I&#8217;ve ever made, and it&#8217;s been a bigger learning curve than I anticipated. I thought that as soon as I learned to code I was done, but as it turned out a whole new set of challenges lurked just around the corner. When I started TiMo I had no clue about interface design, and so up until about a week ago it was littered with sheet windows, panels, and wasted space. Just to convince myself that it was actually feasible to make a vector animation program that grandma could use, I decided to redesign before it was even close to being done. The main point of the redesign is getting almost everything into one window and making it all accessible with as few clicks as possible.</p>
<p><img class="alignleft size-full wp-image-169" style="padding: 5px;" title="Wide Open Spaces" src="http://keatontech.grotonma.net/wp-content/uploads/2009/05/timo-8.jpg" alt="Wide Open Spaces" width="224" height="145" /></p>
<p style="text-align: justify;line-height: 23px">One of the other things I realized is that even though the interface has to fit in a small space, it can&#8217;t be cramped.  Essential controls, such as the object library pictured here, need some breathing room. The library has it&#8217;s own tab now, meaning that when you want to add an object, the entire sidebar is devoted to the task of helping you find the one you want, which is especially helpful if you&#8217;ve got a big library of plugins or presets (both of which will be supported somewhere down the line). Each item has an icon so users can see what an object is at a glance, and a title and description so that if an object catches the users eye they can see exactly what it does without having to go through the docs. My old toolbar method took up way less space, but didn&#8217;t have any of those advantages.</p>
<p><img class="alignleft size-full wp-image-170" style="padding: 5px;" title="Helpful visual cues" src="http://keatontech.grotonma.net/wp-content/uploads/2009/05/timo-9.jpg" alt="Helpful visual cues" width="206" height="183" /></p>
<p style="text-align: justify;line-height: 23px">Another thing I&#8217;ve noticed is the importance of visual cues, less obvious UI components that hint to the user what exactly is happening. Notice this image, for example. The plus badge is a cue that releasing the mouse button will cause something to be added, the picture icon suggests that it will be a picture of some sort, and the little blue highlight (which goes all the way around the view that the mouse is over, the image had to be cropped to fit) suggests that the view is ready to have something dropped on it. Combine those cues, and the user can infer that releasing the mouse button will add an picture to that view, which is exactly what it does. Animation also infers a lot, when you let go of the mouse, the view quickly scales down to nothing, then in it&#8217;s place an image object scales up. Of course, that&#8217;s a basic example, OS X has done that from the beginning, but since I had to write that from scratch in TiMo I had to actually think about it.</p>
<p><img class="alignleft size-full wp-image-172" style="padding: 5px;" title="Use the Toolbar!" src="http://keatontech.grotonma.net/wp-content/uploads/2009/05/timo-11.jpg" alt="Use the Toolbar!" width="203" height="94" /></p>
<p style="text-align: justify;line-height: 23px">Turns out the OS X toolbar is there for a reason. This one is pretty self-explanatory, and most people know this already, but you can put essential controls, not just buttons, in the toolbar. TiMo is using a segmented control in it&#8217;s toolbar to switch between the different sidebar views. Controls in the toolbar stand out, are always visible (unless the user chooses to temporarily hide the toolbar), and tend to look pretty good. Don&#8217;t over-use the toolbar though, more than one or two controls can make the app look cluttered and messy (although it can be done well if you know what you&#8217;re doing).</p>
<p style="text-align: justify;line-height: 23px"><img class="alignleft size-full wp-image-171" style="padding: 5px;" title="Cocoa is good" src="http://keatontech.grotonma.net/wp-content/uploads/2009/05/timo-12.jpg" alt="Cocoa is good" width="213" height="180" />For actual the actual graphics of the UI, I admit it&#8217;s quite tempting to make my own skin for UI controls that&#8217;s unique to my application. Don&#8217;t do it. A big part of the beauty and usability of OS X is it&#8217;s unity, every app looks and feels more or less the same, with enough wiggle room that they are all unique. Basically: USE COCOA! The only exception to this rule is if you need a control that&#8217;s not part of cocoa, like my keyframe indicator (to the right of all of the objects). In that situation, just make it look as cocoa-ish as possible (A surprisingly hard task that I haven&#8217;t quite figured out myself yet).</p>
<p style="text-align: justify;line-height: 23px">
<p style="line-height: 23px; text-align: center;">I&#8217;m still working on lot&#8217;s more stuff, like a nice timeline editor, a more complete inspector, a redesigned (unfortunately for me, also mostly re-written) CIFilters editor, and so on and so forth. Also, if anybody is interested in professionally designing me some better graphics (Object icons, Keyframe indicators, etc) for a cut of the profits that would be very nice, although I should probably worry about those later.</p>
]]></content:encoded>
			<wfw:commentRss>http://keatontech.grotonma.net/blog/redesigning-timos-interface/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The exact Year-o-meter</title>
		<link>http://keatontech.grotonma.net/blog/the-exact-year-o-meter</link>
		<comments>http://keatontech.grotonma.net/blog/the-exact-year-o-meter#comments</comments>
		<pubDate>Fri, 24 Apr 2009 19:00:53 +0000</pubDate>
		<dc:creator>Keaton Brant</dc:creator>
				<category><![CDATA[Geeky Stuff]]></category>

		<guid isPermaLink="false">http://keatontech.grotonma.net/?p=121</guid>
		<description><![CDATA[
     var t = setTimeout(updateTime,10);
     function updateTime() {
	var seconds = 1000;
	var minutes = seconds*60;
	var hours = minutes*60;
	var days = hours*24;
	var years = days*365;
	var d = new Date();
	var t = d.getTime();
	var y = t/years+1970;
	
	document.getElementById("EY").innerHTML=y;
	var t = setTimeout(updateTime,100);
}


So yeah, I was bored and started, once again, lamenting about how [...]]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript">
     var t = setTimeout(updateTime,10);
     function updateTime() {
	var seconds = 1000;
	var minutes = seconds*60;
	var hours = minutes*60;
	var days = hours*24;
	var years = days*365;
	var d = new Date();
	var t = d.getTime();
	var y = t/years+1970;
	
	document.getElementById("EY").innerHTML=y;
	var t = setTimeout(updateTime,100);
}
</script></p>
<div style="text-align: justify;">
So yeah, I was bored and started, once again, lamenting about how stupid our time system is (I&#8217;m still bitter from the hundreds of lines of code I had to write to make tweetahead semi-work). So I figured: Why have seconds, minutes, hours, days, and months when you can just get a very exact decimal of the year. Think of the possibilities, instead of saying &#8220;Hey, meet me in 5 minutes&#8221; you can now say &#8220;Hey, meet me in 0.000005 years&#8221;. Or, instead of answering &#8220;It&#8217;s 12:30&#8243; when asked what time it is, you could answer &#8220;It&#8217;s 2009.3391536829022&#8243;. Every time you give will be entirely accurate, and will require no prior knowledge of what day, month, or year it is. World: You&#8217;re welcome!
</div>
<p>The <i>exact</i> year:</p>
<div id="EY" onclick="updateTime()" style="width:200px; text-align:justify; font-size:48px; margin-left:50px; margin-bottom:-20px;"><i>Starting up</i></div>
]]></content:encoded>
			<wfw:commentRss>http://keatontech.grotonma.net/blog/the-exact-year-o-meter/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Site</title>
		<link>http://keatontech.grotonma.net/blog/hello-world</link>
		<comments>http://keatontech.grotonma.net/blog/hello-world#comments</comments>
		<pubDate>Wed, 15 Apr 2009 20:46:26 +0000</pubDate>
		<dc:creator>Keaton Brant</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://keatontest.grotonma.net/?p=1</guid>
		<description><![CDATA[
Yeah, I admit it, that last re-design wasn&#8217;t much of an improvement over the lack of a website that it replaced. This is take 2, with a more modern design backed by a powerful CMS (You&#8217;ll never figure out which &#8230; unless you look down a bit). It&#8217;s got a blog now, but you knew [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">
<p style="text-align: justify;">Yeah, I admit it, that last re-design wasn&#8217;t much of an improvement over the lack of a website that it replaced. This is take 2, with a more modern design backed by a powerful CMS (You&#8217;ll never figure out which &#8230; unless you look down a bit). It&#8217;s got a blog now, but you knew that already, or at least I hope you did, if not then you can&#8217;t possibly be reading this, which is impossible since you just read that. You little trickster you.</p>
<p style="text-align: justify;">
<p style="text-align: justify;">Hmm, writing all of this is a surprising amount of work. I should probably just have used Lorem Ipsum. The problem with that is that I have no idea what Lorem Ipsum is, it could be some satanist prayer for all I know, and I&#8217;m not entirely sure I want to be associated with that. I wonder if there&#8217;s some group of satanists somewhere just laughing at all of the accidental convert web designers.</p>
<p style="text-align: justify;">Ok, just wikipedia&#8217;d it, turns out &#8216;<em>The text is derived from </em><a title="Cicero" href="http://en.wikipedia.org/wiki/Cicero"><em>Cicero</em></a><em>&#8217;s </em><a class="new" title="De Finibus Bonorum et Malorum (page does not exist)" href="http://en.wikipedia.org/w/index.php?title=De_Finibus_Bonorum_et_Malorum&amp;action=edit&amp;redlink=1"><em>De Finibus Bonorum et Malorum</em></a><em> (On the Ends of Goods and Evils, or alternatively [About] The Purposes of Good and Evil)</em>&#8216;, or so they claim. Maybe this is some giant conspiracy, because really, does anybody speak latin anymore?</p>
]]></content:encoded>
			<wfw:commentRss>http://keatontech.grotonma.net/blog/hello-world/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
