<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.justinribeiro.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Justin Ribeiro</title>
	
	<link>http://justinribeiro.com/chronicle</link>
	<description>MBA. Business. Technology. Photography.</description>
	<lastBuildDate>Mon, 01 Mar 2010 23:50:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<atom:link rel="hub" href="http://justinribeiro.com/chronicle/?pushpress=hub" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.justinribeiro.com/JustinRibeiro" /><feedburner:info uri="justinribeiro" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>They wrote, I commented: Google Apps, morning pages, vintage photos</title>
		<link>http://feeds.justinribeiro.com/~r/JustinRibeiro/~3/RlRi-Wy25yk/</link>
		<comments>http://justinribeiro.com/chronicle/2010/03/01/they-wrote-i-commented-google-apps-morning-pages-vintage-photos/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 23:50:55 +0000</pubDate>
		<dc:creator>Justin Ribeiro</dc:creator>
				<category><![CDATA[Google Apps]]></category>
		<category><![CDATA[TWIC]]></category>
		<category><![CDATA[comments]]></category>
		<category><![CDATA[creativity]]></category>
		<category><![CDATA[morning pages]]></category>

		<guid isPermaLink="false">http://justinribeiro.com/chronicle/?p=810</guid>
		<description><![CDATA[I am not an island; I like to be part of the web conversation.]]></description>
			<content:encoded><![CDATA[<p>Alas, I do not spend all of my time writing blog posts, but I sometimes comment on other people&#8217;s posts when I think I can add to the conversation. I&#8217;ve decided to try to start a weekly blog post of my random comments around the web that may be useful in context (ala, they probably wouldn&#8217;t make great blog posts in and of themselves).  For your viewing pleasure today, three comments:</p>
<ul>
<li><a href="http://lifehacker.com/5478087/when-it-doesnt-pay-to-be-googles-guinea-pig">When It Doesn&#8217;t Pay to Be Google&#8217;s Guinea Pig</a> was an interesting article by Kevin Purdy about Google and the beta test mentality of their consumer line of products (and how us the end user end up testing whether we like it or not).  <a href="http://lifehacker.com/comment/19728627/">My comment</a> basically explains my reasoning for moving to Google Apps and I attempt to explain briefly the problem of cell phone pricing and it&#8217;s burden on early adopters.</li>
<li><a href="%20http://smarterware.org/5359/taking-on-the-750-words-march-challenge">Taking on the 750 Words March Challenge</a> is an interesting look by Gina Trapani at morning pages via <a href="http://750words.com/">750 Words</a>. I&#8217;ve loved morning pages since grad school, so I couldn&#8217;t help but pass on the tips that Laurie had given us in <a href="http://smarterware.org/5359/taking-on-the-750-words-march-challenge#comment-1969">my comment</a>. I&#8217;m sticking to pen and paper, but hope people like the app nonetheless!</li>
<li><a href="http://lifehacker.com/5470896/through-the-viewfinder-method-makes-your-digital-pics-look-analog">Through the Viewfinder Method Makes Your Digital Pics Look Analog</a> was an article from Kelly Abbott about the recent digital-camera-plus-film-TLR picture trend that seems to be taking place.  <a href="http://lifehacker.com/comment/19413340/">My comment</a> basically ponders the question as to why people think film looked so crappy (and that the Argus 75 pictured in the article takes decent snaps).</li>
</ul>
<p>So many interesting topics, so little time to comment on them all.</p>
<div class="feedflare">
<a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=RlRi-Wy25yk:QI5MHD3xXI0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=RlRi-Wy25yk:QI5MHD3xXI0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=RlRi-Wy25yk:QI5MHD3xXI0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=RlRi-Wy25yk:QI5MHD3xXI0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=RlRi-Wy25yk:QI5MHD3xXI0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=RlRi-Wy25yk:QI5MHD3xXI0:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=RlRi-Wy25yk:QI5MHD3xXI0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=RlRi-Wy25yk:QI5MHD3xXI0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=RlRi-Wy25yk:QI5MHD3xXI0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JustinRibeiro/~4/RlRi-Wy25yk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://justinribeiro.com/chronicle/2010/03/01/they-wrote-i-commented-google-apps-morning-pages-vintage-photos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://justinribeiro.com/chronicle/2010/03/01/they-wrote-i-commented-google-apps-morning-pages-vintage-photos/</feedburner:origLink></item>
		<item>
		<title>Five mistakes coaches make with youth goalkeepers</title>
		<link>http://feeds.justinribeiro.com/~r/JustinRibeiro/~3/uDRc-mNv3YI/</link>
		<comments>http://justinribeiro.com/chronicle/2010/03/01/five-mistakes-coaches-make-with-youth-goalkeepers/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 23:08:04 +0000</pubDate>
		<dc:creator>Justin Ribeiro</dc:creator>
				<category><![CDATA[coaching]]></category>
		<category><![CDATA[goalkeeping]]></category>
		<category><![CDATA[soccer]]></category>

		<guid isPermaLink="false">http://justinribeiro.com/chronicle/?p=781</guid>
		<description><![CDATA[Oh what has happened to goalkeeping in this country?  I look at five common coaching mistakes.]]></description>
			<content:encoded><![CDATA[<p>For a solid 15 years of my soccer playing life, I was a goalkeeper. At every level I reached, everyone had a different perspective on goalkeeping.  I trained under the Dutch method, the English, the German, South American styles; needless to say, I got a well rounded education of just how many different schools of thought there are in goalkeeping.  Trust me, there are no lack of them.</p>
<p>Having spent a large part of last summer traveling to various coaching clinics and spending a great deal of time observing training sessions, I have come to the following conclusion: coaches understand very little about how to train goalkeepers (it&#8217;s not necessarily their fault mind you, see side note at end of article for further explanation).</p>
<p>Since no one knows anything, lets look at five common mistakes that coaches make with their young goalkeepers (and some suggestions to make things a little better).</p>
<h3>1. Your emphasizing diving when you should start on falling</h3>
<p>It annoys me to no end to see coaches push their goalkeepers to a point they are not ready for. Nine times out of ten, it&#8217;s diving. Coaches throw or kick a ball to the side, tell the kid to dive.  This is not training.  This is simply a recipe for bad habits and injury.  At the youth level, a fair number of kids are afraid of diving because it hurts.  That is a surefire tipoff that they need to be training to fall before diving.</p>
<p>Start off with your goalkeeper sitting down, legs out.  With their arms outstretched have them fall to the side. I&#8217;d say six or seven times out of ten for young keepers, they&#8217;ll bend their arms and land on their elbow.  Quick trick to get them to stop?  Remind them that landing on their elbow not only hurts, but will cause a broken or dislocated collarbone (seen it, not pretty).  They&#8217;ll pretty much stop immediately.</p>
<p>Next step?  Give them a ball.  Tell them to hold in their hands, and fall again.</p>
<p>Next step?  Throw the ball to the side and have them catch and fall.  Not getting it?  Go back a step.</p>
<p>Think this is too basic?  I&#8217;ve seen goalkeepers as old as 16 improperly diving to the point they beat themselves up and end up hurt. You crawl before you walk, you fall before you dive.  Your talented goalkeeper is not immune.</p>
<h3>2. That one handed save or punch was great&#8230;except it wasn&#8217;t</h3>
<p>I&#8217;m not exactly sure when it became acceptable to punch or parry the majority of shots away.  To some extent I think it&#8217;s because what a lot of coaches and kids see on television from the professional leagues and they think that translates to the youth level (I argue that it does not). When I was younger, I got a very rude awakening from Frans Hoek as to him yelling at me about flipping a ball away off my finger tips because it was out of reach. If it hit your finger tips, you should catch it he told me; it&#8217;s a matter of positioning and I should have taken a better angle.</p>
<p>Stop teaching your kids to punch everything.  What about crosses?  Work on better positioning and taking angles. What about those corner shots? Say it with me&#8230;angles and positioning.</p>
<p>A lot of kids I talk to complain that they often parry balls away or punch because catching the ball hurts.  I like to call this brick hand syndrome.  Soft hands allow goalkeepers to catch most any rocket of a shot.  I should know, because soft hands saved me time and again in college, where its open season on goalkeepers during 6v6 training.  Proper catching grip along with catching with the finger tips instead of the palms will greatly increase their ability to catch (you don&#8217;t want your hands flat slapping at the ball).</p>
<p>[Justin Notes: I've trained with two goalkeeping coaches who emphasized punching to the point of absurdity (I actually was yelled at for catching a crossed ball by one of those coaches). I understand that there is a time and place for a punch at the professional level (it makes me cringe mind you) but don't use that as an excuse to not teach your keeper proper catching and finishing technique].</p>
<h3>3. You forget your goalkeeper has feet</h3>
<p>While diving may look cool, footwork can save your goalkeeper a lot of wear and tear by moving to get in front of a shot that would otherwise need a fall or dive.  When I first explain this to coaches and kids, most do not understand that diving should always be a last ditch effort.  It should never be your first line of defense.</p>
<p>Get your goalkeeper off their heels, get them shuffling correctly (for the love of Pete, do not let them click their heals), stop crossing those feet when moving side to side.  Quick feet makes for not only easier saves, the training required will increase leg strength needed for when you really have to dive.</p>
<p>Ah, but this is a two parter. Your goalkeeper has feet, so make sure he get the skills needs to control that back pass.  I see it at the youth level constantly; the back line is in a pickle on the break, and they kick the ball out instead of playing back to the goalkeeper.  Not only is that a sign they don&#8217;t trust the goalkeeper&#8230;they also don&#8217;t trust their own skills to get that ball back to the goalkeepers.  Skills coaches, give your kids confidence by giving them skills!!!</p>
<h3>4. Pinging shoots at your goalkeepers is not a warm up</h3>
<p>I was recently watching a coach warm up his 10 year old goalkeeper before a match. He had this kid diving every which way and with the young goalkeeper at full stretch, he made few saves.  His coach was on his case, his head sunk lower with every shot. Broke my heart because that coach was taking the fun out of the game for that kid.</p>
<p>Warming up your goalkeeper, either before a match or a practice session, should not require them to take a smattering of shots from either players or coaches.  Ideal situation, you have two goalkeepers who warm each other up by throwing and volleying balls back in forth with some side to side movement and maybe a few falls (but no dives).  You want to ruin their confidence?  Have kids take shots on them before a match; every ball that hits the net is a seed of doubt in that kids mind.  Want them to pick up bad habits?  Have kids ping balls at them before practice starts.</p>
<h3>5. You don&#8217;t keep their head in the game</h3>
<p>Young goalkeepers are at the whim of the pace of game just like other players, but unlike a field player they don&#8217;t get as many chances to change the pace.  Because of this, most drift during matches or stand almost statuesque and aren&#8217;t in the game.  This leads to not only slow reaction time, but also poor positioning.</p>
<p>As hard as it is (and I&#8217;m not convinced that all coaches have this knowledge), you must impart into your goalkeeper the ability to read the game and move with it.  Some kids pick this up quickly, and they&#8217;ll bark commands at their players, and you&#8217;ll see them aware of their position even when the ball is outside of their defending third.  It may not seem crucial but better positioning and being more aware of what&#8217;s happening in the game will allow them to make saves they&#8217;d otherwise not.</p>
<h3>Make them successful</h3>
<p>When people ask me what the one thing you should always do for goalkeepers or field players alike, I always say the same thing: make your kids successful by imparting confidence through skills.</p>
<h3>Next time&#8230;.</h3>
<p>In our next installment, we&#8217;re going to dive into the nitty gritty of falling technique.</p>
<h3>The Side Note</h3>
<p>Having spoken to over 50 coaches at coaching licensing clinics last year, my understanding of their feelings was this: no one ever showed them how to coach a goalkeeper.  Most were very eager to learn the at the very least the basic techniques that most goalkeepers at the youth level should be learning if only to keep their kids from getting injured.  Yet the instructors at these clinics (with USSF A and B licenses) knew little.  Sure it&#8217;s a specialized subject, but not even the basics?  The one&#8217;s whom claimed to have the proper goalkeeping license either made it so complicated as to be useless or made me cringe at the misinformation they spewed forth.  So much for licensing courses.  I didn&#8217;t find a single coach who was pleased with the &#8220;training&#8221; and &#8220;education&#8221; they received (their air quotes, not mine).</p>
<p>The general consensus I received from various people who wish not to be named is that here in California is they simply do not have the people with the expertise to teach coaches how to coach goalkeepers.  The goalkeeping licensing they do at the state level is little more than a two day course that rarely offered and no one can provide me with the materials they&#8217;re teaching. What&#8217;s a coach to do? Quite a few send them off to former goalkeepers running session&#8217;s (which I&#8217;ve seen cost as much a $75 for 45 minutes locally), some resort to DVD&#8217;s, other&#8217;s send them to camps as far as four hours away.</p>
<p>Why aren&#8217;t there more goalkeeper instructors?  Because getting the licenses is a pain in the ass (not cheap either) and there is more money to be made running sessions then teaching coaches. Many of the best coaches I&#8217;ve had wouldn&#8217;t even be allowed to coach now&#8230;because they&#8217;re not licensed.</p>
<div class="feedflare">
<a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=uDRc-mNv3YI:98gT1M82H_4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=uDRc-mNv3YI:98gT1M82H_4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=uDRc-mNv3YI:98gT1M82H_4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=uDRc-mNv3YI:98gT1M82H_4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=uDRc-mNv3YI:98gT1M82H_4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=uDRc-mNv3YI:98gT1M82H_4:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=uDRc-mNv3YI:98gT1M82H_4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=uDRc-mNv3YI:98gT1M82H_4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=uDRc-mNv3YI:98gT1M82H_4:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JustinRibeiro/~4/uDRc-mNv3YI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://justinribeiro.com/chronicle/2010/03/01/five-mistakes-coaches-make-with-youth-goalkeepers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://justinribeiro.com/chronicle/2010/03/01/five-mistakes-coaches-make-with-youth-goalkeepers/</feedburner:origLink></item>
		<item>
		<title>Darkroom, art room and workshop completed</title>
		<link>http://feeds.justinribeiro.com/~r/JustinRibeiro/~3/J4CcI-M0oDY/</link>
		<comments>http://justinribeiro.com/chronicle/2010/02/11/darkroom-art-room-and-workshop-completed/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 05:47:22 +0000</pubDate>
		<dc:creator>Justin Ribeiro</dc:creator>
				<category><![CDATA[artroom]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[creativity]]></category>
		<category><![CDATA[darkroom]]></category>
		<category><![CDATA[house]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://justinribeiro.com/chronicle/?p=723</guid>
		<description><![CDATA[It was a long time coming, but we finally completed the new darkroom, art room and workshop!]]></description>
			<content:encoded><![CDATA[<p>It has been nearly two years since Monica and I moved into our house. We&#8217;ve made steady improvements but the big project was to convert our three car tandem garage into a two car garage with a 200 square foot darkroom and workshop.  It took a while, but we finally declared the room light tight this last week, so paper and film development can begin.  What does it look like?  How about some photographs.</p>
<h3>Entering the room</h3>
<p><img src="http://justinribeiro.com/chronicle/wp-content/uploads/2010/02/new-darkroom-01.jpg" alt="Entering the room." title="Entering the room." class="aligncenter size-full wp-image-783" height="400" width="600"></p>
<p>The room did in fact turn out to be just about 200 square feet.  To try to keep the floor plan open, we stuck to benches along both walls with cabinets.  Everything you see is custom-built from the raw lumber (sans the paper racks and enlarger base).  To the left you have what we&#8217;re calling the wet side (for film and paper development) and on the right the dry side (for anything but wet materials).  The hanging object in the picture is a Kodak Model D safelight (the rooms main lighting is not shown).</p>
<h3>The left side</h3>
<p><img src="http://justinribeiro.com/chronicle/wp-content/uploads/2010/02/new-darkroom-02.jpg" alt="The left side." title="The left side." class="imgcenter size-full wp-image-784" height="400" width="600"><br />
In the corner houses our Beseler 45MX. If it looks odd, it&#8217;s because it&#8217;s custom mounted (thanks to the fine work of my Dad some years back) to a 1970&#8217;s era metal desk. The bench on this side measures 7 feet long by 27 inches wide with a 6 inch backsplash.  The bench is coated with water sealer you&#8217;d use for decks; it works a treat for cleaning spills because nothing penetrates the wood. The cabinets are 7 feet wide, 3 feet tall, 16 inches deep.</p>
<h3>The paper rack cabinets</h3>
<p><img src="http://justinribeiro.com/chronicle/wp-content/uploads/2010/02/new-darkroom-04.jpg" alt="Paper racks in their custom cabinets." title="Paper racks in their custom cabinets." class="aligncenter size-full wp-image-786" height="400" width="600"></p>
<p>Monica picked up three paper racks for scapebooking materials from a store that had closed for next to nothing (because Craigslist rocks). Because of their size, we lost about a foot of bench space that we had originally planned, but it was inconsequential.  These cabinets span 5 feet, are nearly 8 feet tall, and are about 14 inches deep. Because we had an extra spot, we added movable shelves for supplies.  We were going to put doors on them, but it actually brings a lot of color to the room so we decided to leave them open.</p>
<h3>The right side</h3>
<p><img src="http://justinribeiro.com/chronicle/wp-content/uploads/2010/02/new-darkroom-03.jpg" alt="The right side." title="The right side." class="aligncenter size-full wp-image-785" height="400" width="600"></p>
<p>The right side serves  a few purposes and is built a lot differently.  The bench is 12 feet long, but varies in the depth because of the dry side materials we use, including the matte cutter (which required at least a 4 foot by 3 foot space) and the dry mount press (which weighs a ton and required at least 30 inches of clearance to the back). This bench is also 38 inches tall, allow a lot more space underneath the bench for tools (such as my sliding compound miter saw and our kiln).  The cabinet is 8 feet long and 3 feet tall, with the center a 2 foot section allowing movable shelves.</p>
<h3>The movable workbench</h3>
<p><img src="http://justinribeiro.com/chronicle/wp-content/uploads/2010/02/new-darkroom-05.jpg" alt="The movable workbench and storage." title="The movable workbench and storage." class="aligncenter size-full wp-image-787" height="400" width="600"></p>
<p>Due to the increased size of the matte cutter bench, instead of fixed shelving, I built a movable workbench that simply pulls out.  This creates a large work area that is much shorter (good for our daughter) and allows a lot of storage for larger painting canvas and matte board.</p>
<h3>Getting light tight</h3>
<p>Getting light tight can be difficult to do in any darkroom, and we didn&#8217;t want the room in complete darkness all the time (it does double as a painting studio and workshop, so light is a good thing in those instances). What we decided was to use light covers for both the door and window made out of blackout cloth, available at most fabric stores.  Monica sewed velcro onto the material, and I attached velcro to the window frame and to the door frame via industrial adhesive (the staples in the picture I later found were not needed, but more of a safety measure).  I caulked any remaining seams to block light.  It&#8217;s hard to show, but briefly below you can see sort of what we did.</p>
<p><img src="http://justinribeiro.com/chronicle/wp-content/uploads/2010/02/new-darkroom-06.jpg" alt="Velcro attached to board, seams caulked." title="Velcro attached to board, seams caulked." class="aligncenter size-full wp-image-788" height="400" width="600"></p>
<p><img src="http://justinribeiro.com/chronicle/wp-content/uploads/2010/02/new-darkroom-07.jpg" alt="Blackout cloth covering the window, seam detail." title="Blackout cloth covering the window, seam detail." class="aligncenter size-full wp-image-782" height="400" width="600"></p>
<h3>The finer details</h3>
<p>There are a massive amount of details to this build out that I&#8217;m not going to cover in this first article.  I can tell you that all in I spent about $600 on lumber, nails and screws to build the benches and cabinets (of which some it went to <a href="http://justinribeiro.com/chronicle/2010/02/05/building-an-indoor-tree-house-part-1-the-structure/">Alli&#8217;s tree house</a>).  </p>
<p>Indeed, there is no sink or running water even though we&#8217;re using it as a darkroom (gasp!).  This might seem shocking to some, but given we&#8217;ve had two past darkrooms with no running water, we&#8217;ve never had a problem with washing or cleaning up.  While getting water into the room would not be a problem, the drain required was a problem (and we simply couldn&#8217;t justify the cost to have it completed).</p>
<h3>Many thanks</h3>
<p>While Monica and I designed the room and I built a significant portion, that doesn&#8217;t mean we didn&#8217;t have help. At the risk of forgetting people, many thanks to:</p>
<ul>
<li>My wife Monica, whom was patient, helped put the benches and cabinets into place, was my rock and ever vigilant in making sure I didn&#8217;t kill myself</li>
<li>My four year old daughter Alli, who learned to chew and spit sunflower seeds and helped build the work benches</li>
<li>Our parents, Dave, Darlene, Manuel, and Arcelia, whom let us borrow trucks and tools on many occasions</li>
<li>My Dad for giving me tips and tricks when I was stuck (you could have your own show Dad)</li>
<li>My sister-in-law Lety for swinging a hammer in the wall building cause</li>
<li>My brother Jim and sister Katie, whom helped lift the wall into place</li>
<li>My buddy James Smith, for helping me haul and move lumber and drywall</li>
<li>My buddy James Duvall, who helped me build and lift some of the cabinets into place</li>
<li>My grandfathers Les and Ray, my uncles Lance and Rich for their expert advice</li>
<li>Everyone else I forgot, of which I know there are many</li>
</ul>
<h3>Next time&#8230;</h3>
<p>I&#8217;ll get into the nitty gritty details of just how this build was completed, and the tricks I used to save money and time.  Until next time, keep those creative ideas flowing!</p>
<div class="feedflare">
<a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=J4CcI-M0oDY:JH-Iq9oA2v8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=J4CcI-M0oDY:JH-Iq9oA2v8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=J4CcI-M0oDY:JH-Iq9oA2v8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=J4CcI-M0oDY:JH-Iq9oA2v8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=J4CcI-M0oDY:JH-Iq9oA2v8:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=J4CcI-M0oDY:JH-Iq9oA2v8:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=J4CcI-M0oDY:JH-Iq9oA2v8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=J4CcI-M0oDY:JH-Iq9oA2v8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=J4CcI-M0oDY:JH-Iq9oA2v8:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JustinRibeiro/~4/J4CcI-M0oDY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://justinribeiro.com/chronicle/2010/02/11/darkroom-art-room-and-workshop-completed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://justinribeiro.com/chronicle/2010/02/11/darkroom-art-room-and-workshop-completed/</feedburner:origLink></item>
		<item>
		<title>Turning closet doors into whiteboards for $15 and change</title>
		<link>http://feeds.justinribeiro.com/~r/JustinRibeiro/~3/c-Ggov8ypPw/</link>
		<comments>http://justinribeiro.com/chronicle/2010/02/10/turning-closet-doors-into-whiteboards-for-15-and-change/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 23:03:59 +0000</pubDate>
		<dc:creator>Justin Ribeiro</dc:creator>
				<category><![CDATA[build]]></category>
		<category><![CDATA[creativity]]></category>
		<category><![CDATA[office]]></category>
		<category><![CDATA[trick]]></category>

		<guid isPermaLink="false">http://justinribeiro.com/chronicle/?p=761</guid>
		<description><![CDATA[Everyone needs a white board. I built a couple onto my closet doors.]]></description>
			<content:encoded><![CDATA[<p>Whiteboard construction is an easy do-it-yourself task; you need very little material and only a few tools.</p>
<p>Unlike most of the articles I&#8217;ve read on the subject, my need for my whiteboards was slightly different.  I didn&#8217;t want to attach them to a wall and stand them up, I wanted them on closet doors.  Right behind my desk is a double door closet and the door faces are wasted valuable space just waiting to be used.  Lets do this.</p>
<p><img src="http://justinribeiro.com/chronicle/wp-content/uploads/2010/02/15-closet-door-upgrade-1.jpg" alt="Closet doors into whiteboards. Sweet." title="Closet doors into whiteboards. Sweet." class="imgleft size-full wp-image-766" height="233" width="350"></p>
<h3>The materials</h3>
<p>To construct whiteboards, we need some whiteboard like material.  You can go out and buy expensive custom-made pieces, but where is the fun in that.  Home Depot sells <a href="http://www.homedepot.com/h_d1/N-5yc1vZ1xgt/R-100541850/h_d2/ProductDisplay?catalogId=10053">Eucatex Thrifty White Tileboard</a> for a mere $11.87 that works perfectly for the job.  It comes in 4&#215;8 sheets, so once cut down, it&#8217;ll fit my closet doors nicely with a bit to spare.  </p>
<p>I&#8217;m attaching these boards to closet doors that are less than 1.5 inches thick and are hollow core, so I decided to drill the appropriate holes and use hollow wall fasteners.  If you&#8217;ve never used these types of fasteners (often times called molly bolts), when inserted into your pre-drilled hole and the screw is removed, the &#8220;legs&#8221; expand and it grips the wall.  There are many different types with various max weight loads; I used two packs of a 1/4 inch version for a total cost of about $4, but you can also find <a href="http://www.containerstore.com/shop/elfa/components/installationHardware?productId=10009530&#038;mybuyscid=8560592275">specific hollow wall anchors</a> designed for hollow core doors and closets.</p>
<p><img src="http://justinribeiro.com/chronicle/wp-content/uploads/2010/02/15-closet-door-upgrade-2.jpg" alt="Door handle cut with slight flacking" title="Door handle cut with slight flacking" class="imgright size-full wp-image-767" height="350" width="233"></p>
<p>Note, I used molly bolts because I&#8217;m not renting; likely if you are renting you&#8217;re not going to want to drill holes into your closet doors in which case this plan won&#8217;t work for you.  However, you could very well mount a bracket and hooks to the sheet and hang them on your closet door as well.</p>
<h3>The tools</h3>
<p>For this job, I used a circular saw to cut down the sheet of tileboard, a drill to pre-drill the holes, and a 2 3/4 inch hole saw to make holes for the door handles.  You&#8217;ll also want a roll of masking tape.</p>
<h3>A final reminder</h3>
<p>Do two things. One, be careful you&#8217;re using power tools. Two, check that when you add the tileboard thickness to the back door with the molly bolts, that the doors still close.  If you don&#8217;t have enough clearance, you&#8217;ll end up with doors that will not shut.</p>
<h3>Making magic happen</h3>
<p>I measured my doors and transferred my numbers to the sheet.  The key to this is that you want to use the masking tape to mask your cut lines on the tileboard itself.  Even though you&#8217;re cutting with the finish side down, the tileboard has a tenancy to chip, which results in a not so clean look (through the cut itself could still be clean).  Even with the masking tape and sharp blades, you&#8217;ll still see some chipping possibly (see hole saw cut photo).</p>
<p><img src="http://justinribeiro.com/chronicle/wp-content/uploads/2010/02/15-closet-door-upgrade-3.jpg" alt="Check that thickness to make sure your doors will work" title="Check that thickness to make sure your doors will work" class="imgleft size-full wp-image-765" height="350" width="233"></p>
<p>Once you&#8217;ve got your sheet cut down to size, pre-drill your holes in the sheets and then get a wife/kid/friend to help you hold them in place to the closet door.  Make a mark on the door where your holes will be.  Don&#8217;t have help?  If you measured and drilled, you could simply measure and drill the door.  Pre-drill with the appropriate bit for the type of molly bolts you&#8217;re using and insert your molly bolts.</p>
<p>Grab sheet, insert bolt into tileboard sheet, thread into molly bolt and bam! You have yourself whiteboard closet doors.</p>
<h3>Easy cleaning</h3>
<p>After some use, you may notice that the board seems to have that dry erase ink residue all over it.  Expo Cleaner, available at your favorite office supply store, will clean it nicely.</p>
<h3>I am not original</h3>
<p>To say that I&#8217;m the first to come up with the &#8220;use-tileboard-as-cheap-whiteboard&#8221; would be not true. Lots of people have done this same trick, I simply applied it to closet doors.  Other links that you might find helpful:</p>
<ul>
<li><a href="http://www.kk.org/cooltools/archives/000679.php">Marker Board Walls</a> from CoolTools</li>
<li><a href="http://blog.blakeperdue.com/2009/06/15/diy-whiteboard/">DIY Whiteboard</a> from Blake Perdue</li>
<li><a href="http://www.johnmurch.com/2007/10/20/diy-whiteboard-on-the-cheap/">DIY Whiteboard on the Cheap</a> from John Murch</li>
</ul>
<p>These are only three links I picked out; there are many more if you search via Google that may just get your creative juices flowing.  Look around your house/apartment/dorm room and don&#8217;t afraid to be creative (but don&#8217;t blame me if a wall falls down!).</p>
<div class="feedflare">
<a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=c-Ggov8ypPw:mnDscoip4DU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=c-Ggov8ypPw:mnDscoip4DU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=c-Ggov8ypPw:mnDscoip4DU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=c-Ggov8ypPw:mnDscoip4DU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=c-Ggov8ypPw:mnDscoip4DU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=c-Ggov8ypPw:mnDscoip4DU:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=c-Ggov8ypPw:mnDscoip4DU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=c-Ggov8ypPw:mnDscoip4DU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=c-Ggov8ypPw:mnDscoip4DU:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JustinRibeiro/~4/c-Ggov8ypPw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://justinribeiro.com/chronicle/2010/02/10/turning-closet-doors-into-whiteboards-for-15-and-change/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://justinribeiro.com/chronicle/2010/02/10/turning-closet-doors-into-whiteboards-for-15-and-change/</feedburner:origLink></item>
		<item>
		<title>Taking FujiFilm FP-100c instant pack film for a spin</title>
		<link>http://feeds.justinribeiro.com/~r/JustinRibeiro/~3/A0sQKFsWsHM/</link>
		<comments>http://justinribeiro.com/chronicle/2010/02/09/taking-fujifilm-fp-100c-instant-pack-film-for-a-spin/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 00:08:26 +0000</pubDate>
		<dc:creator>Justin Ribeiro</dc:creator>
				<category><![CDATA[FujiFilm]]></category>
		<category><![CDATA[film]]></category>
		<category><![CDATA[photography]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://justinribeiro.com/chronicle/?p=748</guid>
		<description><![CDATA[What you gonna do with Polaroid gone?  Use Fujifilm pack film instead.]]></description>
			<content:encoded><![CDATA[<p>There is something about instant film that appeals to me.  Maybe it&#8217;s the instant satisfaction, maybe it&#8217;s the ability to check settings before exposing film.  Nah, it&#8217;s neither of those reasons.  It&#8217;s because it&#8217;s fun.</p>
<p>Say what you like, but shooting instant pack film is just a lot of fun.  My wife and I had used Polaroid for a lot of years and always found it enjoyable.  We&#8217;d give pictures to friends at parties, we&#8217;d fire from the hip on the streets of San Francisco, they were just endlessly fun.  When Polaroid went by the wayside due to a whole bunch of business reasons I won&#8217;t go into, like many people it left us a little sad.  Would we ever get to shoot instant pack film again?</p>
<p><img src="http://justinribeiro.com/chronicle/wp-content/uploads/2010/02/fp-100c-i1.jpg" alt="A smattering of FP-100c abounds." title="A smattering of FP-100c abounds." class="imgleft size-full wp-image-754" height="233" width="350"></p>
<p>With our stock of Polaroid film now nearing its last few sheets and boxes, we decided to order up some FujiFilm FP-100c instant pack film to try out in some of our Polaroid Land cameras.  We&#8217;d had heard good things but seeing is believing when it comes to photographic prints (especially in the case of instant film).  Let the testing begin!</p>
<p>FujiFilm FP-100c instant pack film is ISO 100 / DIN 21 film, with color temperature of 5500 (ala, daylight). Most Polaroid land cameras are setup for 75 or 3000 ISO film, so if you&#8217;re going to drop this in just use the 75 setting (sometimes labeled &#8220;color&#8221; on some Land cameras).  We dropped this film into a Land 360 and 103 and put it through the paces in a few different situations.</p>
<h3>The good</h3>
<p>In direct daylight (where I find most Land cameras perform the best) the film shines.  The colors are accurate, the prints sharp, the development time is about the same as other Polaroid films, and the prints need no coating.  The dry time is pretty quick even in the colder weather we tried it in (half a minute seemed sufficient).</p>
<p>One of the nice things we found was that it was much easier to pull the film from the pack as opposed to the last run of Polaroid we had (which often resulted in poorly developed prints). Edge to edge, the development of the FujiFilm was even and without blotches.</p>
<h3>The not-so-good</h3>
<p>Shooting ISO 75/100 film in dim or overcast light has always been hit or miss when it comes to instant film (at least for us).  It can lead to some interesting effects (some beautiful color blurs if you&#8217;re not holding steady) but also significant lack of sharpness (to the point that even I&#8217;m doing a hummm face&#8230;and I&#8217;m not a it-has-to-be-super-sharp guy). This isn&#8217;t so much a problem with the film, but rather the lack of control that Land cameras offer.</p>
<p>We found that in overcast sky&#8217;s, expect to have to bump that exposure compensation at least two clicks over (better known as the lightness/darkness dial on Land cameras).  This resulted in brighter photos, but have a steady hand as the shutter is going to be open a while (based on our tests, it was at least 1/2 to 1/10 of second).</p>
<p>In less than ideal daylight, expect colors that are pretty drab from this film. Indoors with any type of non-5500K lighting, you can expect lots of yellow tinge (as it simply isn&#8217;t made for that kind of light).  Again, not really a problem with the film.</p>
<h3>Speaking of color</h3>
<p>If you&#8217;re looking for that pastel  color palate and sort of hazy glowing sharpness that Type 669 exhibited, FP-100c is not for you.  FP-100c more closely looks like Type 79 to my eye, with colors that are much more vibrant and much sharper prints than anything we ever were able to do with Type 669.  If you&#8217;re focus is a little off, you can sort of get that glowing sharpness, but it&#8217;s really not the same.</p>
<h3>Oh the value</h3>
<p>At $8 and some change a box, FP-100c is a little cheaper than the Polaroid used to be. Most people whom have never shot instant film are probably going to balk at the cost (which nears a dollar a shot) and when teamed with a Land camera which can often be tricked (backlighting, oh the backlight blunders), it can be an expensive endeavor.  For us it&#8217;s worth the price, but you&#8217;ll have to evalulate your own need.</p>
<p>Is it convenient? No, not all then time. You do have to wait for it to develop, you do have to time that development, then you do have to have a place to store that print and finally find a place to be ride of the trash.</p>
<p>Does it give you super sharp pictures? Depends on which Land camera we&#8217;re using, but in a 103 and a 360, our FP-100c performed  well.  Focusing errors become quite obvious however (which is no fault of the film).</p>
<h3>The final verdict</h3>
<p>We like it and we&#8217;ll keep using it.  Is it the same as Polaroid?  No, but it doesn&#8217;t have to be.  It&#8217;s instant film, and I can only thank FujiFilm for continuing to make it.  If and when <a href="http://www.the-impossible-project.com/">The Impossible Project</a> brings pack film back (they&#8217;re focused on SX-70 style film at the moment), we&#8217;ll try that as well. I have to say I might get hooked on the FP-100c before than.</p>
<h3>Next time&#8230;</h3>
<p>Speaking of the folks at The Impossible Project, I&#8217;ll be taking a look at the last production run of TZ-Artisitc, which is for SX-70 cameras (if Monica lets me shoot a pack or two).  I&#8217;ll also take FujiFilm FP-100b (black and white) instant pack film for a spin as well.</p>
<div class="feedflare">
<a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=A0sQKFsWsHM:c7GOM062Vfo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=A0sQKFsWsHM:c7GOM062Vfo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=A0sQKFsWsHM:c7GOM062Vfo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=A0sQKFsWsHM:c7GOM062Vfo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=A0sQKFsWsHM:c7GOM062Vfo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=A0sQKFsWsHM:c7GOM062Vfo:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=A0sQKFsWsHM:c7GOM062Vfo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=A0sQKFsWsHM:c7GOM062Vfo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=A0sQKFsWsHM:c7GOM062Vfo:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JustinRibeiro/~4/A0sQKFsWsHM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://justinribeiro.com/chronicle/2010/02/09/taking-fujifilm-fp-100c-instant-pack-film-for-a-spin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://justinribeiro.com/chronicle/2010/02/09/taking-fujifilm-fp-100c-instant-pack-film-for-a-spin/</feedburner:origLink></item>
		<item>
		<title>Building an indoor tree house, part 1: the structure</title>
		<link>http://feeds.justinribeiro.com/~r/JustinRibeiro/~3/P5rhFDjWT0w/</link>
		<comments>http://justinribeiro.com/chronicle/2010/02/05/building-an-indoor-tree-house-part-1-the-structure/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 21:03:10 +0000</pubDate>
		<dc:creator>Justin Ribeiro</dc:creator>
				<category><![CDATA[art]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[treehouse]]></category>

		<guid isPermaLink="false">http://justinribeiro.com/chronicle/?p=725</guid>
		<description><![CDATA[Don't have a tree outside?  Let's build one inside and then put a tree house in it.]]></description>
			<content:encoded><![CDATA[<p>It all started with the <a href="http://kidtropolis.wordpress.com/2008/09/04/the-magic-tree-house-almost-finished/">magic tree house</a> that the very creative folks at Kidtropolis built.  I pondered if I could build something similar in our daughter Alli&#8217;s playroom.  I put it on my list of things to explore and with most things on the list, the idea sort of simmered for six months.</p>
<p><img src="http://justinribeiro.com/chronicle/wp-content/uploads/2010/02/treehouse-p1-primer.jpg" alt="Adding a bit of primer to the stud wall." title="Adding a bit of primer to the stud wall." class="imgleft size-full wp-image-729" height="350" width="233"> </p>
<p>Towards the end of summer, after having successfully built most of the new darkroom/artroom and workshop, the idea came up in a conversation with my wife Monica.  I figured I could swing something similar, though we didn&#8217;t want it to be directly the same as the one Kidtropolis built (that just wouldn&#8217;t be any fun).  After getting a resounding yes from our daughter Alli, we set out to build a tree house.</p>
<p>Monica and I tossed around ideas on what the treehouse should ultimately look like.  With Alli&#8217;s playroom having nine foot ceilings and Monica having already painted a tree into the corner of the room, we decided that we&#8217;d do this properly. Instead of hanging from the ceiling, we&#8217;d use a single post on one corner of the tree house that would act as not only a support, but also the position of the tree we&#8217;d later create to make it appear that the tree house would in fact be in a tree.  To be able to do this, we&#8217;d first build the structure, and then create a little artistic gold and make ourselves a tree in part two.</p>
<h3>The Tree House structure explained</h3>
<p>The design for this tree house is sort of like if you wanted to build a loft or a partition wall; use 2&#215;4&#8217;s to create a walls and a base platform.  Our tree house would be built into a corner of the room at a size of roughly 5.5 feet long by 2.5 feet wide at 4 feet tall.  The structure would be 4 feet off the ground, leaving a foot of clearance between the structure and the ceiling for a roof and tree branches.  We&#8217;d have a ladder for access and a window for looks.  If it sounds simple, it&#8217;s because it is; there just isn&#8217;t much to it.</p>
<h3>Building the structure</h3>
<p>The base flooring of the tree house is a box built using 2&#215;4&#8217;s on 12 inch centers. The reason I went with 12 inch centers is because of location the walls studs, which I couldn&#8217;t move (and as with most things in this house, oddly spaced).  12 inch centers simply worked the best in our situation.</p>
<p><img src="http://justinribeiro.com/chronicle/wp-content/uploads/2010/02/treehouse-p1-wallsladder.jpg" alt="Walls and ladder added." title="Walls and ladder added." class="imgright size-full wp-image-728" height="350" width="233"></p>
<p>To attach the base box to the walls, I added a level chalk line to the walls at the desired height, marked my stud locations, and then added support blocks to the wall (the base is fairly heavy).  Once lifted into place, a couple of 2&#215;4s clamped to the non-wall side act as temporary support legs.  To make life simple, I used structural screws in place of lag screws to attach the box to the studs.  Unlike lag screws, they need no pre-drilling.  They are more expensive and need at least an 18V drill to put into place, so keep that in mind if you want to use them.  For me, they&#8217;re worth every penny because they save time.</p>
<p>Once attached to the wall I used a 4 foot level to verify that the base was level, marked the length needed to keep it level, and then added the only support leg (a 4&#215;4 post).  Keep in mind that two sides of the base are attached to wall studs, so a second support leg was not needed.  Once the 4&#215;4 is in place, I added the 3/4 inch plywood base.  I joked that we could just leave the platform and see what the kids would do.  I was quickly vetoed. <img src='http://justinribeiro.com/chronicle/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>I built the walls like any stud wall, just on a smaller scale. I probably didn&#8217;t have to use 2&#215;4 to build the walls (I&#8217;ve seen references in older magazines about using 1&#215;3&#8217;s), but I wanted this thing rock solid.  So I build the walls with 2&#215;4s, and then attached them not only the base but also to the studs in the both walls.  The result is a unit that is not going to bend to the will of a group of kids; that unit is simply not coming down.  How do I know this?  Because I spent the better part of a week purposely trying to break it and pull the unit off the wall. Didn&#8217;t happen.</p>
<p><img src="http://justinribeiro.com/chronicle/wp-content/uploads/2010/02/treehouse-p1-firstcoat.jpg" alt="Monica adding the first coat of fairytale awesome." title="Monica adding the first coat of fairytale awesome." class="imgleft size-full wp-image-730" height="233" width="350"></p>
<p>Once the stud walls were to my satisfaction, I added 1/2 inch primed plywood for the outside walls, built a simply ladder using 2&#215;4&#8217;s, and added the carpet that Monica and Alli picked out.</p>
<h3>Let the art begin</h3>
<p>After discussion about the &#8220;paint or add reclaimed wood siding&#8221;, we went with paint to give it a more fairytale like feel. Since Monica has the neccessary skill and talent to paint (as many of you know, I can barely primer things) and since Alli might find it fun to paint, this sounded like a good idea. That was until Alli decided she wanted the entire tree house pink.  She&#8217;s four&#8230;of course she does. We&#8217;re all for making her dream come true, but an entirely pink tree house did not sound like a good idea.  So we compromised and added pink trim and promised pink shutters for her windows, to which Alli said yippee. The kid has spirit.</p>
<h3>Next time&#8230;</h3>
<p>In part two of this series we&#8217;ll get into the nitty gritty of turning a single support leg into a tree, as well as adding a roof and some finishing touches of a magical tree house.</p>
<div class="feedflare">
<a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=P5rhFDjWT0w:oT64lHTBxCE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=P5rhFDjWT0w:oT64lHTBxCE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=P5rhFDjWT0w:oT64lHTBxCE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=P5rhFDjWT0w:oT64lHTBxCE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=P5rhFDjWT0w:oT64lHTBxCE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=P5rhFDjWT0w:oT64lHTBxCE:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=P5rhFDjWT0w:oT64lHTBxCE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=P5rhFDjWT0w:oT64lHTBxCE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=P5rhFDjWT0w:oT64lHTBxCE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JustinRibeiro/~4/P5rhFDjWT0w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://justinribeiro.com/chronicle/2010/02/05/building-an-indoor-tree-house-part-1-the-structure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://justinribeiro.com/chronicle/2010/02/05/building-an-indoor-tree-house-part-1-the-structure/</feedburner:origLink></item>
		<item>
		<title>Bit.ly sidebar bookmarklet into Ubiquity command</title>
		<link>http://feeds.justinribeiro.com/~r/JustinRibeiro/~3/SEOTNEopwRA/</link>
		<comments>http://justinribeiro.com/chronicle/2009/12/29/bit-ly-sidebar-bookmarklet-into-ubiquity-command/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 20:57:43 +0000</pubDate>
		<dc:creator>Justin Ribeiro</dc:creator>
				<category><![CDATA[script]]></category>
		<category><![CDATA[ubiquity]]></category>

		<guid isPermaLink="false">http://justinribeiro.com/chronicle/?p=716</guid>
		<description><![CDATA[Converting the Bit.ly sidebar bookmarklet into an Ubiquity command is just three lines away!]]></description>
			<content:encoded><![CDATA[<p>If there is one thing that annoys me, it&#8217;s very long links.  But what annoys me even more is having to open up a URL shorter service to generate said short link.  Bookmarklets, small pieces of javascript in bookmark form, work very well&#8230;but I don&#8217;t run the bookmark tool bar or want another button to deal with.  Instead, I&#8217;d much prefer to use <a href="https://mozillalabs.com/ubiquity/">Ubiquity</a>, a command interface for Firefox.</p>
<p>It just so happens you can turn any bookmarklet into an Ubiquity command in just three lines of code.  There is a <a href="http://www.azarask.in/blog/post/ubiquity-tutorial-turn-bookmarklets-into-commands/">very clear tutorial</a> on the subject (complete with video walkthrough).</p>
<p>I decided that I wanted to run the <a href="http://bit.ly/pages/tools">bit.ly sidebar bookmarklet</a>, which will not only shorten the link for the current page you&#8217;re viewing, but also give the the stats on said link (traffic, conversations, and history). I added a short description and the icon to my version of the command (which makes it a couple lines longer), but it works a treat!  Below you&#8217;ll find the command to install (you&#8217;ll need Ubiquity installed first).</p>
<p><a href="/projects/ubiquity/bitly-sidebar-slideout.html?PHPSESSID=ddb0c8e880661fe1efca91ea5bebc49b">Bit.ly sidebar slideout Ubiquity command</a></p>
<p>The source code is below:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p716code1'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7161"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code" id="p716code1"><pre class="javascript" style="font-family:monospace;">CmdUtils.<span style="color: #660066;">makeBookmarkletCommand</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
<span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;bit.ly sidebar slideout&quot;</span><span style="color: #339933;">,</span>
icon<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;http://bit.ly/static/images/favicon.png&quot;</span><span style="color: #339933;">,</span>
description<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Conversion of bit.ly sidebar bookmarklet; slides out to shorten your long link, then shows Traffic, Conversations, and History.&quot;</span><span style="color: #339933;">,</span>
homepage<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;http://justinribeiro.com/projects/ubiquity/bitly-sidebar-slideout.html&quot;</span><span style="color: #339933;">,</span>
author<span style="color: #339933;">:</span> <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Justin Ribeiro&quot;</span><span style="color: #339933;">,</span> email<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;justin@justinribeiro.com&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
license<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;GPL&quot;</span><span style="color: #339933;">,</span>
url<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;javascript:var%20e=document.createElement('script');e.setAttribute('language','javascript');e.setAttribute('src','http://bit.ly/bookmarklet/load.js');document.body.appendChild(e);void(0);&quot;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Simple, quick, effective.  Just how I like it!</p>
<p>Note, if you&#8217;ve got the Mozilla General Utility Commands installed, you can use the &#8220;create bookmarklet&#8221; command that is available to convert any bookmarklet(s) you already have into a Ubiquity command.  So even if you don&#8217;t want to muck around with three lines of code, you can still use the power of Ubiquity.</p>
<div class="feedflare">
<a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=SEOTNEopwRA:-Gst981gzhE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=SEOTNEopwRA:-Gst981gzhE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=SEOTNEopwRA:-Gst981gzhE:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=SEOTNEopwRA:-Gst981gzhE:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=SEOTNEopwRA:-Gst981gzhE:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=SEOTNEopwRA:-Gst981gzhE:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=SEOTNEopwRA:-Gst981gzhE:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=SEOTNEopwRA:-Gst981gzhE:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=SEOTNEopwRA:-Gst981gzhE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JustinRibeiro/~4/SEOTNEopwRA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://justinribeiro.com/chronicle/2009/12/29/bit-ly-sidebar-bookmarklet-into-ubiquity-command/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://justinribeiro.com/chronicle/2009/12/29/bit-ly-sidebar-bookmarklet-into-ubiquity-command/</feedburner:origLink></item>
		<item>
		<title>idlemailcheck v0.0.2 released</title>
		<link>http://feeds.justinribeiro.com/~r/JustinRibeiro/~3/JpAc9rYG_KU/</link>
		<comments>http://justinribeiro.com/chronicle/2009/12/17/idlemailcheck-v0-0-2-released/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 20:59:07 +0000</pubDate>
		<dc:creator>Justin Ribeiro</dc:creator>
				<category><![CDATA[Snarl]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[releases]]></category>

		<guid isPermaLink="false">http://justinribeiro.com/chronicle/?p=713</guid>
		<description><![CDATA["I'm always connected!" release 0.0.2 makes it's way out the door.]]></description>
			<content:encoded><![CDATA[<p>I have been rather busy the last month and a half, but wanted to push out a small update to the original idlemailcheck concept script.</p>
<p>A lot of people have been reporting that IMAP servers which detect inactivity after 30 minutes have been disconnecting the socket.  This was an oversight in my original concept script, as the RFC is quite clear that anything that uses an IDLE call should keep track of the time of the current session and disconnect/reconnect before the 30 minute mark as to not cause is with IDLE calls failing (or the script exiting).</p>
<p>The simple solution is to setup a timer, logout, and then reconnect every 25 or so minutes.  The problem is, I have been working on a 0.1 release with a lot more features (which is not yet done), so the even quicker solution is to create an infinite loop on the main body of the script using while(1) and then letting socket timeout after 30 minutes.  When that happens, the while(1) is hit, and the main body (login, open socket, et cetera) starts over.</p>
<p>I&#8217;ve been using this small update for testing purposes, and combined with KeepAlive set to true to deal with poor/unstable connections, the script works surprisingly well. Yipee for quick fixes!</p>
<p>You can grab the update on the <a href="http://code.google.com/p/idlemailcheck/">idlemailcheck project page</a>.  Feedback (here or on the project page) is always greatly appreciated.</p>
<div class="feedflare">
<a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=JpAc9rYG_KU:_oE-gY7wuM0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=JpAc9rYG_KU:_oE-gY7wuM0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=JpAc9rYG_KU:_oE-gY7wuM0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=JpAc9rYG_KU:_oE-gY7wuM0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=JpAc9rYG_KU:_oE-gY7wuM0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=JpAc9rYG_KU:_oE-gY7wuM0:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=JpAc9rYG_KU:_oE-gY7wuM0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=JpAc9rYG_KU:_oE-gY7wuM0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=JpAc9rYG_KU:_oE-gY7wuM0:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JustinRibeiro/~4/JpAc9rYG_KU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://justinribeiro.com/chronicle/2009/12/17/idlemailcheck-v0-0-2-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://justinribeiro.com/chronicle/2009/12/17/idlemailcheck-v0-0-2-released/</feedburner:origLink></item>
		<item>
		<title>Setting up a static IP with bridge mode for SMC 8014 and m0n0wall</title>
		<link>http://feeds.justinribeiro.com/~r/JustinRibeiro/~3/n02j-M1BrFk/</link>
		<comments>http://justinribeiro.com/chronicle/2009/10/15/setting-up-a-static-ip-with-bridge-mode-for-smc-8014-and-m0n0wall/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 21:52:37 +0000</pubDate>
		<dc:creator>Justin Ribeiro</dc:creator>
				<category><![CDATA[Comcast]]></category>
		<category><![CDATA[SMC8014]]></category>
		<category><![CDATA[m0n0wall]]></category>
		<category><![CDATA[setup]]></category>

		<guid isPermaLink="false">http://justinribeiro.com/chronicle/?p=705</guid>
		<description><![CDATA[The SMC8014 doesn't have a bridge mode and you want to use m0n0wall...this is how.]]></description>
			<content:encoded><![CDATA[<p>Recently I made the switch from AT&#038;T DSL to Comcast Business Class Internet. I had not been a fan of Comcast for some time, after very poor experiences with them in both Seattle and San Francisco.  But after repeated attempts to resolve serious line issues with AT&#038;T engineers (they tried very hard, it was simply a matter of them not wanting to dig up half the neighborhood) I had no choice but to look for a more reliable connection.  Comcast Business was the only option at hand and to their credit I&#8217;ve had a much better experience initially.</p>
<p>The technicians braved the storm and setup the line, and I had a shiny new SMC 8014 modem with an assigned static IP running in no time flat.</p>
<p>The SMC 8014 has some features; it has a firewall, you can do port forwarding, static routing, some basics.  Given that I have a perfectly good setup of m0n0wall on a Soekris Net4521 I was going to pass it up and set the SMC up as a bridge.</p>
<p>First thing is first: lets log in.  The techs didn&#8217;t give me the connection username/password combo for the SMC, so for those on Comcast in a similar situation:</p>
<p>IP: 10.1.10.1<br />
Username: cusadmin<br />
Password: highspeed</p>
<p>Once you log into the SMC, you will note that there appears to be no way to setup said device as a bridge.  You can route, but I don&#8217;t want to route.  Apparently, said device does what some people refer to as a &#8220;smart bridge&#8221; where you simply setup the target firewall with the static IP details, and the SMC after a few minutes figures out that you don&#8217;t want it to operate as a firewall/router and switches into said bridge mode.</p>
<p>So hop on over to your m0n0wall config.  Under Interfaces, select WAN.  Set the type to Static and enter in the IP address that Comcast gave you.  If they didn&#8217;t give you the gateway, it&#8217;s simply +1 to your IP  (example: static IP is 10.10.10.10, your gateway would be 10.10.10.11).  Some people question where to put in the subnet (example: 255.255.255.252); m0n0wall uses CIDR (Classless InterDomain Routing) notation (you can read about it in the <a href="http://doc.m0n0.ch/quickstartsoekris/#id11570301">manual</a>) which many people won&#8217;t recognize.  If you have a look at the manual, you&#8217;ll note that my example subnet of 255.255.255.252 equals /30, which you select next to the static IP address you put into place.  Click Save.</p>
<p>Now, you&#8217;ll need to set some DNS servers under System > General setup in the section called DNS Servers.  I&#8217;m not using Comcast&#8217;s DNS (<a href="http://www.opendns.com">OpenDNS </a>works well), but once you enter your DNS details here, click Save.</p>
<p>At this point you should be able to surf the web as normal, or after a few minutes once the SMC figures out you don&#8217;t want it doing anything.  I also went about disabling as much of the firewall and related options as the SMC allows, so it won&#8217;t conflict or get in the way of my traffic to the m0n0wall device.</p>
<p>Once this was setup and working, I was able to connect to my existing VPN on the new static IP without the SMC getting in the way.  While it&#8217;s not what I would consider a true bridge, it seems to work fine in my initial testing.</p>
<div class="feedflare">
<a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=n02j-M1BrFk:R1mCYvF1A1g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=n02j-M1BrFk:R1mCYvF1A1g:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=n02j-M1BrFk:R1mCYvF1A1g:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=n02j-M1BrFk:R1mCYvF1A1g:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=n02j-M1BrFk:R1mCYvF1A1g:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=n02j-M1BrFk:R1mCYvF1A1g:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=n02j-M1BrFk:R1mCYvF1A1g:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=n02j-M1BrFk:R1mCYvF1A1g:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=n02j-M1BrFk:R1mCYvF1A1g:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JustinRibeiro/~4/n02j-M1BrFk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://justinribeiro.com/chronicle/2009/10/15/setting-up-a-static-ip-with-bridge-mode-for-smc-8014-and-m0n0wall/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://justinribeiro.com/chronicle/2009/10/15/setting-up-a-static-ip-with-bridge-mode-for-smc-8014-and-m0n0wall/</feedburner:origLink></item>
		<item>
		<title>Using the Partner Salesforce web service from Coldfusion to return data</title>
		<link>http://feeds.justinribeiro.com/~r/JustinRibeiro/~3/rCfVjmu1cbI/</link>
		<comments>http://justinribeiro.com/chronicle/2009/10/07/using-the-partner-salesforce-web-service-from-coldfusion-to-return-data/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 08:07:03 +0000</pubDate>
		<dc:creator>Justin Ribeiro</dc:creator>
				<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://justinribeiro.com/chronicle/?p=700</guid>
		<description><![CDATA[Getting data from the Partner Salesforce web service via Coldfusion.]]></description>
			<content:encoded><![CDATA[<p>My last article on the subject of <a href="http://justinribeiro.com/chronicle/2009/09/04/connecting-and-using-a-salesforce-web-service-from-coldfusion/">connecting and using Salesforce.com web service from ColdFusion</a> has garnered a fair amount of emails asking for help, so I&#8217;d thought I&#8217;d write a short follow up.</p>
<p>The following is a very simple script that I compiled using a lot of older partial examples and documentation over at the <a href="http://developer.force.com/">DeveloperForce</a>.  The Coldfusion documentation and examples at DeveloperForce are lacking, but because there are so many Java based examples one can extrapolate them to ColdFusion.</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p700code2'); return false;">View Code</a> CFM</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p7002"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
</pre></td><td class="code" id="p700code2"><pre class="cfm" style="font-family:monospace;">&nbsp;
<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">CFAPPLICATION</span> <span style="color: #0000FF;">NAME</span><span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;sdfasdfawe534534534jklsdf&quot;</span></span>
<span style="color: #333333;">	APPLICATIONTIMEOUT<span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;#CreateTimeSpan(0, 2, 0, 0)#&quot;</span></span>
<span style="color: #333333;">	CLIENTMANAGEMENT<span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;NO&quot;</span></span>
<span style="color: #333333;">	SESSIONMANAGEMENT<span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;NO&quot;</span></span>
<span style="color: #333333;">	SETCLIENTCOOKIES<span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;NO&quot;</span></span>
<span style="color: #333333;">	SETDOMAINCOOKIES<span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;NO&quot;</span><span style="color: #0000FF;">&gt;</span></span>
&nbsp;
<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">CFSET</span> Application.isError <span style="color: #0000FF;">=</span> <span style="color: #009900;">&quot;false&quot;</span> <span style="color: #0000FF;">/&gt;</span></span>
&nbsp;
<span style="color: #808080; font-style: italic;">&lt;!--- Only one session should login at a time. ---&gt;</span>
<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">CFLOCK</span> timeout<span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;10&quot;</span> <span style="color: #0000FF;">scope</span><span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;Application&quot;</span> throwOnTimeout<span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;no&quot;</span> <span style="color: #0000FF;">type</span><span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;exclusive&quot;</span><span style="color: #0000FF;">&gt;</span></span>
	<span style="color: #808080; font-style: italic;">&lt;!--- The SFDC login session should remain active for 30 minutes ---&gt;</span>
	<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">CFIF</span> NOT <span style="color: #0000FF;">IsDefined</span><span style="color: #0000FF;">&#40;</span><span style="color: #009900;">&quot;Application.sfdc&quot;</span><span style="color: #0000FF;">&#41;</span> OR Application.sfdc <span style="color: #0000FF;">EQ</span> <span style="color: #009900;">&quot;&quot;</span> OR NOT <span style="color: #0000FF;">IsDefined</span><span style="color: #0000FF;">&#40;</span><span style="color: #009900;">&quot;Application.lastLogin&quot;</span><span style="color: #0000FF;">&#41;</span> OR <span style="color: #0000FF;">&#40;</span><span style="color: #0000FF;">IsDefined</span><span style="color: #0000FF;">&#40;</span><span style="color: #009900;">&quot;Application.lastLogin&quot;</span><span style="color: #0000FF;">&#41;</span> AND <span style="color: #0000FF;">Abs</span><span style="color: #0000FF;">&#40;</span><span style="color: #0000FF;">DateDiff</span><span style="color: #0000FF;">&#40;</span><span style="color: #009900;">&quot;n&quot;</span>, Application.lastLogin, <span style="color: #0000FF;">Now</span><span style="color: #0000FF;">&#40;</span><span style="color: #0000FF;">&#41;</span><span style="color: #0000FF;">&#41;</span><span style="color: #0000FF;">&#41;</span> <span style="color: #0000FF;">GT</span> <span style="color: #FF0000;">30</span><span style="color: #0000FF;">&#41;</span><span style="color: #0000FF;">&gt;</span></span>
		<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">CFSET</span> Application.sfdc <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">createObject</span><span style="color: #0000FF;">&#40;</span><span style="color: #009900;">&quot;webservice&quot;</span>,<span style="color: #009900;">&quot;http://some.url/your-partner-file.wsdl&quot;</span><span style="color: #0000FF;">&#41;</span> <span style="color: #0000FF;">/&gt;</span></span>
		<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">CFSET</span> loginResult <span style="color: #0000FF;">=</span> Application.sfdc.login<span style="color: #0000FF;">&#40;</span><span style="color: #009900;">&quot;username&quot;</span>,<span style="color: #009900;">&quot;password&quot;</span><span style="color: #0000FF;">&#41;</span> <span style="color: #0000FF;">/&gt;</span></span>
&nbsp;
		<span style="color: #808080; font-style: italic;">&lt;!--- Create the SOAP Header that will contain the Session ID ---&gt;</span>
		<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">CFSET</span> authHeader <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">createObject</span><span style="color: #0000FF;">&#40;</span><span style="color: #009900;">&quot;java&quot;</span>,<span style="color: #009900;">&quot;org.apache.axis.message.SOAPHeaderElement&quot;</span><span style="color: #0000FF;">&#41;</span>.init<span style="color: #0000FF;">&#40;</span><span style="color: #009900;">&quot;SforceService&quot;</span>, <span style="color: #009900;">&quot;SessionHeader&quot;</span><span style="color: #0000FF;">&#41;</span> <span style="color: #0000FF;">/&gt;</span></span>
&nbsp;
		<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">CFSET</span> Application.sfdc.setHeader<span style="color: #0000FF;">&#40;</span>authHeader<span style="color: #0000FF;">&#41;</span> <span style="color: #0000FF;">/&gt;</span></span>
&nbsp;
		<span style="color: #808080; font-style: italic;">&lt;!--- Add (and populate) a text node called sessionId: ---&gt;</span>
		<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">CFSET</span> authHeader.addChildElement<span style="color: #0000FF;">&#40;</span><span style="color: #009900;">&quot;sessionId&quot;</span><span style="color: #0000FF;">&#41;</span>.addTextNode<span style="color: #0000FF;">&#40;</span>loginResult.getSessionId<span style="color: #0000FF;">&#40;</span><span style="color: #0000FF;">&#41;</span><span style="color: #0000FF;">&#41;</span> <span style="color: #0000FF;">/&gt;</span></span>
&nbsp;
		<span style="color: #808080; font-style: italic;">&lt;!--- Change the endpoint URL to what was returned by the login method: ---&gt;</span>
		<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">cfset</span> Application.sfdc._setProperty<span style="color: #0000FF;">&#40;</span><span style="color: #009900;">&quot;javax.xml.rpc.service.endpoint.address&quot;</span>,loginResult.getServerURL<span style="color: #0000FF;">&#40;</span><span style="color: #0000FF;">&#41;</span><span style="color: #0000FF;">&#41;</span> <span style="color: #0000FF;">/&gt;</span></span>
&nbsp;
		<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">CFSET</span> Application.lastLogin <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">Now</span><span style="color: #0000FF;">&#40;</span><span style="color: #0000FF;">&#41;</span> <span style="color: #0000FF;">/&gt;</span></span>
	<span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><span style="color: #990000; font-weight: bold;">CFIF</span><span style="color: #0000FF;">&gt;</span></span>
<span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><span style="color: #990000; font-weight: bold;">CFLOCK</span><span style="color: #0000FF;">&gt;</span></span>
&nbsp;
<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">CFTRY</span><span style="color: #0000FF;">&gt;</span></span>
	<span style="color: #808080; font-style: italic;">&lt;!--- Only one session at a time should call this method ---&gt;</span>
	<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">CFLOCK</span> timeout<span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;10&quot;</span> <span style="color: #0000FF;">scope</span><span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;Application&quot;</span> throwOnTimeout<span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;no&quot;</span> <span style="color: #0000FF;">type</span><span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;readOnly&quot;</span><span style="color: #0000FF;">&gt;</span></span>
&nbsp;
		<span style="color: #808080; font-style: italic;">&lt;!--- JDR: this gets the current user you used to login to the webservice ---&gt;</span>
		<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">cfset</span> rssfResponse1 <span style="color: #0000FF;">=</span> Application.sfdc.getUserInfo<span style="color: #0000FF;">&#40;</span><span style="color: #0000FF;">&#41;</span> <span style="color: #0000FF;">/&gt;</span></span>
&nbsp;
		<span style="color: #808080; font-style: italic;">&lt;!--- JDR: this gets some contacts from Salesforce ---&gt;</span>
		<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">cfset</span> rssfResponse2 <span style="color: #0000FF;">=</span> Application.sfdc.<span style="color: #0000FF;">query</span><span style="color: #0000FF;">&#40;</span><span style="color: #009900;">&quot;SELECT FirstName, LastName FROM Contact LIMIT 11&quot;</span><span style="color: #0000FF;">&#41;</span> <span style="color: #0000FF;">/&gt;</span></span>
&nbsp;
	<span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><span style="color: #990000; font-weight: bold;">CFLOCK</span><span style="color: #0000FF;">&gt;</span></span>
&nbsp;
	<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">cfoutput</span><span style="color: #0000FF;">&gt;</span></span>
	 <span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><a href="http://december.com/html/4/element/h3.html"><span style="color: #000000; font-weight: bold;">h3</span></a><span style="color: #0000FF;">&gt;</span></span>Current User Information<span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><a href="http://december.com/html/4/element/h3.html"><span style="color: #000000; font-weight: bold;">h3</span></a><span style="color: #0000FF;">&gt;</span></span>
	 <span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a><span style="color: #0000FF;">&gt;</span></span>getOrganizationName() | <span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><a href="http://december.com/html/4/element/strong.html"><span style="color: #000000; font-weight: bold;">strong</span></a><span style="color: #0000FF;">&gt;</span></span><span style="color: #0000FF;">#rssfResponse1.getOrganizationName<span style="color: #0000FF;">&#40;</span><span style="color: #0000FF;">&#41;</span>#</span><span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><a href="http://december.com/html/4/element/strong.html"><span style="color: #000000; font-weight: bold;">strong</span></a><span style="color: #0000FF;">&gt;</span></span><span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a><span style="color: #0000FF;">&gt;</span></span>
	 <span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a><span style="color: #0000FF;">&gt;</span></span>getUserEmail() | <span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><a href="http://december.com/html/4/element/strong.html"><span style="color: #000000; font-weight: bold;">strong</span></a><span style="color: #0000FF;">&gt;</span></span><span style="color: #0000FF;">#rssfResponse1.getUserEmail<span style="color: #0000FF;">&#40;</span><span style="color: #0000FF;">&#41;</span>#</span><span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><a href="http://december.com/html/4/element/strong.html"><span style="color: #000000; font-weight: bold;">strong</span></a><span style="color: #0000FF;">&gt;</span></span><span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a><span style="color: #0000FF;">&gt;</span></span>
	 <span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a><span style="color: #0000FF;">&gt;</span></span>getUserId() | <span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><a href="http://december.com/html/4/element/strong.html"><span style="color: #000000; font-weight: bold;">strong</span></a><span style="color: #0000FF;">&gt;</span></span><span style="color: #0000FF;">#rssfResponse1.getUserId<span style="color: #0000FF;">&#40;</span><span style="color: #0000FF;">&#41;</span>#</span><span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><a href="http://december.com/html/4/element/strong.html"><span style="color: #000000; font-weight: bold;">strong</span></a><span style="color: #0000FF;">&gt;</span></span><span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a><span style="color: #0000FF;">&gt;</span></span>
	 <span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a><span style="color: #0000FF;">&gt;</span></span>getUserFullName() | <span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><a href="http://december.com/html/4/element/strong.html"><span style="color: #000000; font-weight: bold;">strong</span></a><span style="color: #0000FF;">&gt;</span></span><span style="color: #0000FF;">#rssfResponse1.getUserFullName<span style="color: #0000FF;">&#40;</span><span style="color: #0000FF;">&#41;</span>#</span><span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><a href="http://december.com/html/4/element/strong.html"><span style="color: #000000; font-weight: bold;">strong</span></a><span style="color: #0000FF;">&gt;</span></span><span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a><span style="color: #0000FF;">&gt;</span></span>
&nbsp;
 	<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><a href="http://december.com/html/4/element/h3.html"><span style="color: #000000; font-weight: bold;">h3</span></a><span style="color: #0000FF;">&gt;</span></span>Get 10 Contact records:<span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><a href="http://december.com/html/4/element/h3.html"><span style="color: #000000; font-weight: bold;">h3</span></a><span style="color: #0000FF;">&gt;</span></span>
	<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><a href="http://december.com/html/4/element/ol.html"><span style="color: #000000; font-weight: bold;">ol</span></a><span style="color: #0000FF;">&gt;</span></span>
	<span style="color: #808080; font-style: italic;">&lt;!--- JDR: get the array length ---&gt;</span>
	<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">cfset</span> getLenReturn <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">arraylen</span><span style="color: #0000FF;">&#40;</span>rssfResponse2.getRecords<span style="color: #0000FF;">&#40;</span><span style="color: #0000FF;">&#41;</span><span style="color: #0000FF;">&#41;</span> - <span style="color: #FF0000;">1</span><span style="color: #0000FF;">&gt;</span></span>
&nbsp;
	<span style="color: #808080; font-style: italic;">&lt;!--- JDR: loop over the returned reston ---&gt;</span>
	<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">cfloop</span> <span style="color: #0000FF;">from</span><span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;1&quot;</span> <span style="color: #0000FF;">to</span><span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;#getLenReturn#&quot;</span> <span style="color: #0000FF;">index</span><span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;i&quot;</span><span style="color: #0000FF;">&gt;</span></span>
		<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><a href="http://december.com/html/4/element/li.html"><span style="color: #000000; font-weight: bold;">li</span></a><span style="color: #0000FF;">&gt;</span></span>#rssfResponse2.getRecords(i).get_any()[1].getValue()# #rssfResponse2.getRecords(i).get_any()[2].getValue()#<span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><a href="http://december.com/html/4/element/li.html"><span style="color: #000000; font-weight: bold;">li</span></a><span style="color: #0000FF;">&gt;</span></span>
	<span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><span style="color: #990000; font-weight: bold;">cfloop</span><span style="color: #0000FF;">&gt;</span></span>
&nbsp;
	<span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><a href="http://december.com/html/4/element/ol.html"><span style="color: #000000; font-weight: bold;">ol</span></a><span style="color: #0000FF;">&gt;</span></span>
	<span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><span style="color: #990000; font-weight: bold;">cfoutput</span><span style="color: #0000FF;">&gt;</span></span>	
&nbsp;
&nbsp;
	<span style="color: #808080; font-style: italic;">&lt;!--- Catch any errors ---&gt;</span>
	<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">CFCATCH</span> <span style="color: #0000FF;">type</span><span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;ANY&quot;</span><span style="color: #0000FF;">&gt;</span></span>
		<span style="color: #808080; font-style: italic;">&lt;!--- Reset the sfdc session ---&gt;</span>
		<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">CFSET</span> Application.sfdc <span style="color: #0000FF;">=</span> <span style="color: #009900;">&quot;&quot;</span> <span style="color: #0000FF;">/&gt;</span></span>
		<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">CFIF</span> NOT <span style="color: #0000FF;">IsDefined</span><span style="color: #0000FF;">&#40;</span><span style="color: #009900;">&quot;Application.isError&quot;</span><span style="color: #0000FF;">&#41;</span> OR Application.isError <span style="color: #0000FF;">NEQ</span> <span style="color: #009900;">&quot;true&quot;</span><span style="color: #0000FF;">&gt;</span></span>
						<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><a href="http://december.com/html/4/element/h1.html"><span style="color: #000000; font-weight: bold;">h1</span></a><span style="color: #0000FF;">&gt;</span></span>An error occurred<span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><a href="http://december.com/html/4/element/h1.html"><span style="color: #000000; font-weight: bold;">h1</span></a><span style="color: #0000FF;">&gt;</span></span>
						<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><a href="http://december.com/html/4/element/h2.html"><span style="color: #000000; font-weight: bold;">h2</span></a><span style="color: #0000FF;">&gt;</span></span>Error Details<span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><a href="http://december.com/html/4/element/h2.html"><span style="color: #000000; font-weight: bold;">h2</span></a><span style="color: #0000FF;">&gt;</span></span>
&nbsp;
						<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">CFDUMP</span> <span style="color: #000000; font-weight: bold;">VAR</span><span style="color: #0000FF;">=</span><span style="color: #009900;">&quot;#CFCATCH#&quot;</span> <span style="color: #0000FF;">/&gt;</span></span>
&nbsp;
			<span style="color: #333333;"><span style="color: #0000FF;">&lt;</span><span style="color: #990000; font-weight: bold;">CFSET</span> Application.isError <span style="color: #0000FF;">=</span> <span style="color: #009900;">&quot;true&quot;</span> <span style="color: #0000FF;">/&gt;</span></span>
		<span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><span style="color: #990000; font-weight: bold;">CFIF</span><span style="color: #0000FF;">&gt;</span></span>
	<span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><span style="color: #990000; font-weight: bold;">CFCATCH</span><span style="color: #0000FF;">&gt;</span></span>
<span style="color: #333333;"><span style="color: #0000FF;">&lt;/</span><span style="color: #990000; font-weight: bold;">CFTRY</span><span style="color: #0000FF;">&gt;</span></span></pre></td></tr></table></div>

<p>Let&#8217;s break this down a bit.</p>
<ol>
<li>The first cflock block setups up the initial session and connection to Salesforce.  Key things to take away from this block include that you&#8217;ll need to generate your Partner WSDL from Salesforce (<a href="http://www.salesforce.com/us/developer/docs/api/index_Left.htm#StartTopic=Content%2Fsforce_api_partner.htm|SkinName=webhelp">see documentation</a>) and put it somewhere you&#8217;ll have access to it (you&#8217;ll need to host it at the very least on your local web server for this to work).  Once you change the username and password, the rest is done for you.  You won&#8217;t need to edit anything else in this block.</li>
<li>Once we have our connection ready, we can call the services the Partner WSDL offers.  In this example, setup two calls, rssfResponse1 and rssfResponse2.</li>
<ol>
<li>rssfResponse1 calls getUserInfo(), which returns information about the user you used to create the login to the webservice</li>
<li>rssfResponse2 calls query(), which using SOQL queries our contacts, limiting the result to 11 rows.</li>
</ol>
<li>After we&#8217;ve made our web service calls, we can output the results.  To get a full view of what is returned in those responses, I recommend using cfdump for a quick look.</li>
<ol>
<li>rssfResponse1 only has a single result, so the output is relativity simple (you&#8217;re only running one current user when logging into the web service)</li>
<li>rssfResponse2 returns multiple records, so we need to get the total array length of the return, and loop over the result.  As you can see in the sample above, getting the first and last name is not as simple as you might be used to, but the above sample works well (a lot of the older examples that are out there I was not able to get working).  If the code looks vaguely familiar, it&#8217;s because I based it on <a href="http://wiki.developerforce.com/index.php/Accessing_Query_Results_from_a_Relationship_Query_from_the_Partner_WSDL_with_Axis_for_Java">Accessing Query Results from a Relationship Query from the Partner WSDL with Axis for Java</a> article available on Developerforce.</li>
</ol>
</ol>
<p>Using Salesforce.com web services with Coldfusion can be a somewhat frustrating experience (a lot of emails I&#8217;ve gotten in the past month prove that), so hopefully this article helps make just a little more sense of returning data with the Partner WSDL that Salesforce.com makes available.</p>
<div class="feedflare">
<a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=rCfVjmu1cbI:-pGTtgTP24M:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=rCfVjmu1cbI:-pGTtgTP24M:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=rCfVjmu1cbI:-pGTtgTP24M:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=rCfVjmu1cbI:-pGTtgTP24M:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=rCfVjmu1cbI:-pGTtgTP24M:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=rCfVjmu1cbI:-pGTtgTP24M:gIN9vFwOqvQ" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=rCfVjmu1cbI:-pGTtgTP24M:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?i=rCfVjmu1cbI:-pGTtgTP24M:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.justinribeiro.com/~ff/JustinRibeiro?a=rCfVjmu1cbI:-pGTtgTP24M:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/JustinRibeiro?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/JustinRibeiro/~4/rCfVjmu1cbI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://justinribeiro.com/chronicle/2009/10/07/using-the-partner-salesforce-web-service-from-coldfusion-to-return-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://justinribeiro.com/chronicle/2009/10/07/using-the-partner-salesforce-web-service-from-coldfusion-to-return-data/</feedburner:origLink></item>
	</channel>
</rss>
