<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8567611938103759047</id><updated>2011-08-02T09:27:52.981-07:00</updated><category term='ruby'/><category term='technology'/><category term='social media forecasting'/><category term='twitter activity forecasting'/><category term='twitter forecasting'/><category term='vacation'/><category term='the garland group'/><category term='social media simulations'/><category term='security'/><category term='programming'/><category term='banksimple'/><category term='mac os x'/><category term='hacking'/><category term='mongodb'/><category term='ruby yaml to_yaml to_xml to_json'/><category term='banking'/><category term='pdf'/><category term='lone star ruby conference'/><category term='not working'/><category term='raindrop'/><category term='pdf conversion'/><category term='special characters'/><category term='amazon kindle'/><category term='rack'/><category term='metrics'/><category term='off the grid'/><category term='social media predictions'/><category term='kindle2'/><category term='rails'/><category term='internet'/><category term='performance monitoring'/><category term='sabre'/><category term='twitter predictions'/><category term='development processes'/><category term='connectivity'/><category term='mozilla'/><category term='lsrc'/><category term='predictive metrics'/><category term='chef'/><category term='abstract analyzer'/><category term='reflective metrics'/><category term='markov model'/><category term='broken'/><title type='text'>Mark McSpadden</title><subtitle type='html'>Something clever, catchy, and clean.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://markmcspadden.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://markmcspadden.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mark</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_KT9sCWe7K9Y/SW1r2w_CgnI/AAAAAAAAAtw/0p11wmaC4WI/S220/Photo+7.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8567611938103759047.post-6873801782614885815</id><published>2010-05-28T13:44:00.000-07:00</published><updated>2010-05-28T13:44:19.481-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='banksimple'/><category scheme='http://www.blogger.com/atom/ns#' term='banking'/><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><title type='text'>Banking and Technology</title><content type='html'>Even though I don't work in the Financial Services Industry anymore, I still keep up with many of those that do and usually find it an interesting area to read up on and discuss. This week, Ron Shevlin posted "&lt;a href="http://marketingteaparty.com/2010/05/27/banking-is-not-a-technology-business"&gt;Banking is Not a Technology Business&lt;/a&gt;" where he discusses "technology companies" like Mint and &lt;a href="https://banksimple.net/"&gt;BankSimple&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I read the article, chewed on it for a while, and finally decided to comment. And then, when I actually started typing, my comment got freakishly long. Since it was turning into a blog post, I thought I make it one...&lt;br /&gt;&lt;br /&gt;(For context, it's probably valuable to read both the article and the comments of Ron's article.)&lt;br /&gt;&lt;br /&gt;----&lt;br /&gt;&lt;br /&gt;I don't have this 100% pulled together, but I'll give it a shot so I can get to the long weekend without this on my mind...&lt;br /&gt;&lt;br /&gt;As technology becomes a bigger part of the advancements that almost every industry is undertaking, I do believe that it opens opportunities for "technology companies" to invade the space.&lt;br /&gt;&lt;br /&gt;When I look at Apple in media distribution (and soon to be in advertising), Amazon in "everything" distribution, Google in the Advertising space I see companies that first and foremost are technology companies and have found ways to use their technology to make money in areas that lie outside of traditional hardware and paid software models. These technologies have impacted how these services are consumed and created in a big way.&lt;br /&gt;&lt;br /&gt;So companies are coming along that say "Look. The hardest part of industry/exchange/service is getting the technology right. I can be good at that and figure out the rest."&lt;br /&gt;&lt;br /&gt;Bankers have taken the exact opposite approach. I know banking...I'll outsource the technology...and that may be working...but I hear more than a few complaints about the strangle hold core vendors have on banks...so maybe it's not.&lt;br /&gt;&lt;br /&gt;I'm starting to think that as services become commoditized they become ripe for technology companies to not only invade the space, but become leaders and game changers. I hear many that say banking is moving towards (if not is already at) a commoditized level, so I think it's a very possible candidate. (However I do think that Bankings regulations help protect it from an all out invasion.)&lt;br /&gt;&lt;br /&gt;Now as far as being clueless, not making money etc...I couldn't agree more. That said, being clueless and naive are different...and sometimes it takes naivety to try something that shouldn't work but somehow does.&lt;br /&gt;&lt;br /&gt;At least I hope so...I'd hate to think I have to wait for 15-20 more years of experience in my field to do anything of significance in it...much less have an opportunity to extend what I know to other areas of industry. ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8567611938103759047-6873801782614885815?l=markmcspadden.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markmcspadden.blogspot.com/feeds/6873801782614885815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markmcspadden.blogspot.com/2010/05/banking-and-technology.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/6873801782614885815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/6873801782614885815'/><link rel='alternate' type='text/html' href='http://markmcspadden.blogspot.com/2010/05/banking-and-technology.html' title='Banking and Technology'/><author><name>Mark</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_KT9sCWe7K9Y/SW1r2w_CgnI/AAAAAAAAAtw/0p11wmaC4WI/S220/Photo+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8567611938103759047.post-8960853408217426176</id><published>2010-03-09T19:32:00.000-08:00</published><updated>2010-03-09T19:33:11.886-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='twitter forecasting'/><category scheme='http://www.blogger.com/atom/ns#' term='social media simulations'/><category scheme='http://www.blogger.com/atom/ns#' term='markov model'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter activity forecasting'/><category scheme='http://www.blogger.com/atom/ns#' term='social media forecasting'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter predictions'/><title type='text'>Wednesday is the Worst Day for Email</title><content type='html'>Last week after my &lt;a href="http://markmcspadden.blogspot.com/2010/02/twitter-forecasting-how-likely-is-it.html"&gt;Twitter Predictive dump&lt;/a&gt;, I ended up chatting with a few people about the whole thing. I'm super glad to be able to start having these conversations even if it only helps me realize how little I know about what I'm trying to do :)&lt;br /&gt;&lt;br /&gt;One of the conversations that came up was talk about regression analysis and email trends.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Still Learning&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First it's worth noting that&amp;nbsp;the Markov chain I've been toying with has very close ties with Bayesian inference model which is in fact are a type of regression...at least according to Wikipedia. Yes, snicker if you must, but I'm catching up on a lot of my Math on Wikipedia while I try and locate the right resources for what I'm attempting. (I did get a Math minor at A&amp;amp;M, but unfortunately none of the courses I remember covered this type of modeling and it's far outside the realm of any books I kept.) I did locate some courses on iTunesU that I'll checkout this week, but if you have any resources, let's have'em.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;No Email Wednesdays&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now when it comes to email, apparently Wednesday is the worst day to send it. It doesn't get opened on Wednesday. On top of that each day has it's own twists and turns that correlate to open rates.&lt;br /&gt;&lt;br /&gt;Now one way to look at this that each day should be part of any predictive model having to do with email. (And while we're at it twitter...or any other communication based activity.) We can help determine what tomorrow's activity will look like by factoring in what day tomorrow will be.&lt;br /&gt;&lt;br /&gt;In this case, the day of the week becomes one of many environmental variables to include in the model. I'm not against this, and I'm sure a mature model does include many environment variables to help predictions. (Think weather forecasting again.)&lt;br /&gt;&lt;br /&gt;However, what I'm most interested in right now are behavioral variables. What are the actions I can look at today to determine tomorrow? It may not be that much of a difference but it is in my head.&lt;br /&gt;&lt;br /&gt;In fact, in my head, by monitoring series of behaviors, we can actually prove a weekly pattern. Instead of Wednesday being the worst day for email because it's Wednesday, it's just part of an Active, Active, Dormant, Active.... behavioral pattern. (I guess after seeing this over and over, perhaps a behavioral pattern becomes so accepted that it becomes an environmental variable?)&lt;br /&gt;&lt;br /&gt;Like I said, there may be no difference there at all, but I thought I'd share my thoughts on it anyways. Keep'em coming.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8567611938103759047-8960853408217426176?l=markmcspadden.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markmcspadden.blogspot.com/feeds/8960853408217426176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markmcspadden.blogspot.com/2010/03/wednesday-is-worst-day-for-email.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/8960853408217426176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/8960853408217426176'/><link rel='alternate' type='text/html' href='http://markmcspadden.blogspot.com/2010/03/wednesday-is-worst-day-for-email.html' title='Wednesday is the Worst Day for Email'/><author><name>Mark</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_KT9sCWe7K9Y/SW1r2w_CgnI/AAAAAAAAAtw/0p11wmaC4WI/S220/Photo+7.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8567611938103759047.post-9044600346533480871</id><published>2010-02-28T19:42:00.000-08:00</published><updated>2010-02-28T19:47:57.980-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='twitter forecasting'/><category scheme='http://www.blogger.com/atom/ns#' term='social media simulations'/><category scheme='http://www.blogger.com/atom/ns#' term='social media forecasting'/><category scheme='http://www.blogger.com/atom/ns#' term='social media predictions'/><title type='text'>Twitter Forecasting: How likely is it that I'll tweet tomorrow?</title><content type='html'>For a while now I've been swirling around the notion of forecasting (or simulating) the activities of members in social media communities, especially Twitter. (Think of the weather. Now think of hurricane predictions. Now replace the hurricane with a twitter member and replace land with different twitter activities. Now you're thinking like I'm thinking. I'm on a horse.)&lt;br /&gt;&lt;br /&gt;In my quick glances across the web, I have seen a bit about social forecasting in general (and some really really smart people talking about it), and I've seen lots of forecasts in regard to the industry of social media, but not really anything addressing the forecasting of specific activities within a specific community.&lt;br /&gt;&lt;br /&gt;Trending is something that the industry is starting to get a hold of, but what I'm talking about goes beyond trending. Trending tells us what has happened. I'm interested in what will (or at least is likely to) happen. In my mind forecasting presents some exciting possibilities in being able to help everyone involved in social media communities from the community managers to the system admins.&lt;br /&gt;&lt;br /&gt;For community managers, the benefit lies in being able to work off of indicators that signal the rise of a community star or the trailing off of one. Whole simulations could be run based on activity in a member's first 24 hours.&lt;br /&gt;&lt;br /&gt;For systems admins it could help in identifying spikes before they happen or identifying the best days (or hours) to perform maintenance and updates.&lt;br /&gt;&lt;br /&gt;Maybe I'm overstating the possibilities, but I think it's big and it's exciting stuff to me. Let's get started.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;How likely is it that I'll tweet tomorrow?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It's a simple question but one that has lots of implications. It can help a community manager know whether I'm engaged or slipping away. It can help a systems admin know if I'll be requiring any computing resources.&lt;br /&gt;&lt;br /&gt;If we were to start by saying: "What's the probability I will tweet on any given day?" we'd find out that over the last 6 months I've tweeted on 57% of the days, just a little over half of the days. But our question isn't about "any given day" it's about tomorrow.&lt;br /&gt;&lt;br /&gt;We know "tomorrow" is one day in a series of my twitter engagement. So what if we knew whether or not I had already tweeted today? Would that make a difference in our probability? Am I more likely to tweet tomorrow if I've tweeted today? Less likely?&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Math modeling&lt;/span&gt; (no...not that kind of modeling)&lt;br /&gt;&lt;br /&gt;What if we could develop a simple model that helps us predict my future tweets by my given state? Turns out, we can...or at least we can try. In this case the key is to focus on the probability of transitioning from one state to the next: Given that I tweeted today, what's the likelihood that I tweet tomorrow? What about for the next 3 days?&lt;br /&gt;&lt;br /&gt;So that's what I did. I choose a Markov model (which I've looked at before, but never used...so please...if you see this and are some kind of Markov model expert, please let me know how I did) and starting working away at trying to come up with one that was more than just throwing numbers up in the air.&lt;br /&gt;&lt;br /&gt;Now...my model is currently based on a very small sample size (just my twitter activity), and therefore has a very high margin for error, but it's a start. (There are obvious problems with the "super" predictions due to my small sample.)&lt;br /&gt;&lt;br /&gt;Here's what I have:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dor &amp;nbsp;act &amp;nbsp;sup&lt;br /&gt;dormant [ 0.46 0.54 0.00 ]&lt;br /&gt;active &amp;nbsp;[ 0.40 0.59 0.01 ]&lt;br /&gt;super &amp;nbsp; [ 0.00 1.00 0.00 ]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I've created three states called "dormant", "active", and "super". A dormant user will not tweet in a given day. An active user will tweet 1 to 9 times. A super user will tweet 10 or more times in a day. The matrix represents the probability of moving from one state to the next.&lt;br /&gt;&lt;br /&gt;For example, if I tweet today, there is actually only a 40% that I won't tweet tomorrow. (In contrast, there is a 60% chance I tweet at least once.) If I'm dormant today, there's actually only a 54% that I tweet tomorrow.&lt;br /&gt;&lt;br /&gt;Let's look at this again. Our simple average says there's a 57% chance I tweet tomorrow, but our model says there could be as high as a 60% chance and as low as a 54% chance. While those all sound close together, when you are talking thousands or millions of users, those small percentage points can mean a lot.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;More to come...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To me this is only the beginning. Here's what I'm looking at for next steps:&lt;br /&gt;&lt;br /&gt;1) A model based of off all the people I follow on twitter. It gives me a larger sample size (that's not ginormous) and could be really cool to take a gander at.&lt;br /&gt;&lt;br /&gt;2) A functional programming model. I did all of my initial fetching and computation using Ruby which is my hammer in this programming world. However, once of the sparks that got me to actually start on this project was the opportunity have something concrete to apply a functional language to. I believe the crunching involved to predict large datasets would benefit greatly from a functional design and given their current hotness I'd love to let one loose on this thing.&lt;br /&gt;&lt;br /&gt;3) A model based of off a large twitter sampling. Lots of users. Lots of crunching.&lt;br /&gt;&lt;br /&gt;4) A web service? I'm still working on the best way to practically expose this data and work with it. I've got lots of ideas but none that are shining right now...&lt;br /&gt;&lt;br /&gt;5) Other models. I'd love to try some other models and test their effectiveness...&lt;br /&gt;&lt;br /&gt;That'll do it for now. I'd love to hear your feedback on this.&lt;br /&gt;&lt;br /&gt;----&lt;br /&gt;&lt;br /&gt;Also if you're interested I've posted the code I wrote this weekend up in a &lt;a href="http://gist.github.com/318062"&gt;gist&lt;/a&gt;. It was two files, but I've combined it for sharing. I did it in a style I'm going to call narrative programming, where the main concern is not reuse or architecture, but instead telling a story and following a train of thought from beginning to end.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8567611938103759047-9044600346533480871?l=markmcspadden.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markmcspadden.blogspot.com/feeds/9044600346533480871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markmcspadden.blogspot.com/2010/02/twitter-forecasting-how-likely-is-it.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/9044600346533480871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/9044600346533480871'/><link rel='alternate' type='text/html' href='http://markmcspadden.blogspot.com/2010/02/twitter-forecasting-how-likely-is-it.html' title='Twitter Forecasting: How likely is it that I&apos;ll tweet tomorrow?'/><author><name>Mark</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_KT9sCWe7K9Y/SW1r2w_CgnI/AAAAAAAAAtw/0p11wmaC4WI/S220/Photo+7.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8567611938103759047.post-5517544440785993974</id><published>2009-12-05T09:46:00.000-08:00</published><updated>2011-02-13T09:49:36.761-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sabre'/><title type='text'>On to the Next Adventure</title><content type='html'>Monday morning bright and semi-early I start my next professional adventure. I'll be joining Sabre Holding Company. Sabre is a travel technology company that has as much past (developing the first electronic reservation system) as it does present (travelocity) and future (checkout &lt;a href="http://www.tripcase.com/"&gt;tripcase&lt;/a&gt;) and I'm excited about the opportunities there.&lt;br /&gt;&lt;br /&gt;I'll be joining the Travel Studios group which is tasked with experimenting with emerging technologies and products. Specifically I'll be working on &lt;a href="http://www.cubeless.com/"&gt;Cubeless&lt;/a&gt;, an enterprise social network. I'm tellin' ya...these social network thingies...they're gonna catch on. ;)&lt;br /&gt;&lt;br /&gt;I'm really excited about joining this organization, group, and product team. Thanks to everyone that's been supportive during the transition and I look forward to the things to come as a Sabre-ite...Sabreon...Sabreian...Sabrenian... ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8567611938103759047-5517544440785993974?l=markmcspadden.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markmcspadden.blogspot.com/feeds/5517544440785993974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markmcspadden.blogspot.com/2009/12/on-to-next-adventure.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/5517544440785993974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/5517544440785993974'/><link rel='alternate' type='text/html' href='http://markmcspadden.blogspot.com/2009/12/on-to-next-adventure.html' title='On to the Next Adventure'/><author><name>Mark</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_KT9sCWe7K9Y/SW1r2w_CgnI/AAAAAAAAAtw/0p11wmaC4WI/S220/Photo+7.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8567611938103759047.post-4529340633600783200</id><published>2009-11-19T13:18:00.000-08:00</published><updated>2009-11-19T13:18:08.662-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='the garland group'/><title type='text'>Change</title><content type='html'>There's no easy way to talk about this without just saying it...Friday, December 4 will be my last day at The Garland Group. I've decided to start on a different adventure that I'll talk about more as it gets closer.&lt;br /&gt;&lt;br /&gt;Before I move on, I do want to expend just a few 1s and 0s on just how much I have enjoyed working at The Garland Group. Honestly, if I were to really get into every inch I've enjoyed, you'd probably think this "Garland Group" place doesn't really exist...it's just a fairy tale I've made up to make other work environments look silly. &lt;br /&gt;&lt;br /&gt;You probably wouldn't believe that you can work next to someone that's in a different state or complete projects without ever formalizing work hours. You'd never imagine that encouraging people to go to the grocery store in the middle of a Tuesday could lead to results above expectations. You'd think there is no way a small company headquartered in the Dallas suburbs could change the way an industry thinks and talks about Compliance and that Security could involve more Collaboration than combinations.&lt;br /&gt;&lt;br /&gt;Yes. I suppose it does sound a little far fetched, but it's been my reality. It's a tough place to say goodbye to and a hard group to part ways with. I have very much enjoyed my time at The Garland Group and though I am very excited about what is on the horizon, I'd be kidding myself if I said I won't miss it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8567611938103759047-4529340633600783200?l=markmcspadden.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markmcspadden.blogspot.com/feeds/4529340633600783200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markmcspadden.blogspot.com/2009/11/change.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/4529340633600783200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/4529340633600783200'/><link rel='alternate' type='text/html' href='http://markmcspadden.blogspot.com/2009/11/change.html' title='Change'/><author><name>Mark</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_KT9sCWe7K9Y/SW1r2w_CgnI/AAAAAAAAAtw/0p11wmaC4WI/S220/Photo+7.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8567611938103759047.post-2945324824235976287</id><published>2009-10-28T20:13:00.000-07:00</published><updated>2009-10-28T20:21:32.359-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='abstract analyzer'/><category scheme='http://www.blogger.com/atom/ns#' term='rack'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='mongodb'/><category scheme='http://www.blogger.com/atom/ns#' term='performance monitoring'/><title type='text'>Abstract Analyzer</title><content type='html'>Here's a project I've been plugging away at:&lt;br /&gt;&lt;br /&gt;&lt;object height="250" width="400"&gt; &lt;param name="movie" value="http://content.screencast.com/users/markmcspadden/folders/Jing/media/0c27bba9-2f16-419e-983a-2e5597380b13/jingswfplayer.swf"&gt;&lt;/param&gt;&lt;param name="quality" value="high"&gt;&lt;/param&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;/param&gt;&lt;param name="flashVars" value="thumb=http://content.screencast.com/users/markmcspadden/folders/Jing/media/0c27bba9-2f16-419e-983a-2e5597380b13/FirstFrame.jpg&amp;amp;containerwidth=1279&amp;amp;containerheight=799&amp;amp;content=http://content.screencast.com/users/markmcspadden/folders/Jing/media/0c27bba9-2f16-419e-983a-2e5597380b13/00000240.swf&amp;amp;advseek=true"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="scale" value="showall"&gt;&lt;/param&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt;&lt;param name="base" value="http://content.screencast.com/users/markmcspadden/folders/Jing/media/0c27bba9-2f16-419e-983a-2e5597380b13/"&gt;&lt;/param&gt;&lt;embed src="http://content.screencast.com/users/markmcspadden/folders/Jing/media/0c27bba9-2f16-419e-983a-2e5597380b13/jingswfplayer.swf" quality="high" bgcolor="#FFFFFF" width="400" height="250" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/markmcspadden/folders/Jing/media/0c27bba9-2f16-419e-983a-2e5597380b13/FirstFrame.jpg&amp;amp;containerwidth=400&amp;amp;containerheight=250&amp;amp;content=http://content.screencast.com/users/markmcspadden/folders/Jing/media/0c27bba9-2f16-419e-983a-2e5597380b13/00000240.swf&amp;amp;advseek=true" allowFullScreen="true" base="http://content.screencast.com/users/markmcspadden/folders/Jing/media/0c27bba9-2f16-419e-983a-2e5597380b13/" scale="showall"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;br /&gt;&lt;br /&gt;(Big version &lt;a href="http://www.screencast.com/users/markmcspadden/folders/Jing/media/17d7027e-f2c4-406c-8cf5-14098447dd67"&gt;here&lt;/a&gt;, or use the tiny full screen button in the bottom right of the movie)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Gem:&amp;nbsp;&lt;a href="http://gemcutter.org/gems/abstract_analyzer"&gt;http://gemcutter.org/gems/abstract_analyzer&lt;/a&gt;&lt;br /&gt;Source:&amp;nbsp;&lt;a href="http://github.com/markmcspadden/abstract-analyzer"&gt;http://github.com/markmcspadden/abstract-analyzer&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8567611938103759047-2945324824235976287?l=markmcspadden.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markmcspadden.blogspot.com/feeds/2945324824235976287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markmcspadden.blogspot.com/2009/10/abstract-analyzer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/2945324824235976287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/2945324824235976287'/><link rel='alternate' type='text/html' href='http://markmcspadden.blogspot.com/2009/10/abstract-analyzer.html' title='Abstract Analyzer'/><author><name>Mark</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_KT9sCWe7K9Y/SW1r2w_CgnI/AAAAAAAAAtw/0p11wmaC4WI/S220/Photo+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8567611938103759047.post-8913156093165387605</id><published>2009-10-24T00:13:00.000-07:00</published><updated>2009-10-24T00:34:54.290-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='raindrop'/><category scheme='http://www.blogger.com/atom/ns#' term='hacking'/><category scheme='http://www.blogger.com/atom/ns#' term='mozilla'/><title type='text'>Rolling with Raindrop</title><content type='html'>Today Mozilla announced a message aggregation project they've been working on called &lt;a href="http://labs.mozilla.com/raindrop/"&gt;Raindrop&lt;/a&gt;. Now, I find myself slower and slower to fall into the hype on these type of things, but after downloading the source and getting it up and running on my machine, I have to say it looks pretty cool.&lt;br /&gt;&lt;br /&gt;The install took a couple of hours, mostly due to my non-existent python chops and having to download and install Mercurial. But after a while I was up and running and pulling down my twitter feeds and emails into the same location. Way cool.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Spelunking&lt;/h4&gt;But what kind of nerd would I be if I just got it running and stopped at that? ;)&lt;br /&gt;&lt;br /&gt;In addition with directions on how to setup twitter and gmail aggregation, the default install comes with a single RSS feed baked in. But who can do with just one RSS feed right? So I set out to add another.&lt;br /&gt;&lt;br /&gt;It proved pretty difficult just to find where the initial feed was set (Textmate Ack in Project failed me) so I hopped into the Raindrop chat room where &lt;a href="http://twitter.com/skippyhammond/"&gt;Mark Hammond&lt;/a&gt; from the Raindrop team pointed me to the correct directory. (Mark also said he didn't know if anyone had even tried this yet, but I wasn't going to let that little detail stop me.)&lt;br /&gt;&lt;br /&gt;With his help I soon had 2 RSS feeds dumping into my Raindrop. Cool. Sure they were being dumped into a single box that had the wrong heading, but it was a start.&lt;br /&gt;&lt;br /&gt;The major thing that bugged me was that they are streaming in without links. Boooo. Feeds need links. So I start hacking at the JS and HTML implementation of those messages and before long I had an external link for each headline.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Missing the Point&lt;/h4&gt;I felt pretty accomplished, but I sat back and realized that I had missed the boat on the whole point of Raindrop. It's not just to aggregate data and then push you off to the outside world, from what I understand it's about being able to interact with all types of content from a single location. The external links had to go.&lt;br /&gt;&lt;br /&gt;A quick look at the twitter implementation revealed what I needed, a link to couchdb doc that actually holds each story. The Raindrop UI is setup to handle the display of these so after digging in and finding out where to get the document id I was in business. I could view entries from multiple feeds, open them within the Raindrop application, and even archive them. (I have no idea where they go when they are archived, I just know they leave the front page.)&lt;br /&gt;&lt;br /&gt;So all that work for this little diff:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;diff -r e07f7793ad1b client/lib/rdw/story/templates/GenericGroupMessage.html&lt;br /&gt;--- a/client/lib/rdw/story/templates/GenericGroupMessage.html  Fri Oct 23 15:10:01 2009 +1100&lt;br /&gt;+++ b/client/lib/rdw/story/templates/GenericGroupMessage.html  Sat Oct 24 02:23:34 2009 -0500&lt;br /&gt;@@ -4,7 +4,7 @@&lt;br /&gt;   &amp;lt;/div&amp;gt;&lt;br /&gt;   &amp;lt;div class=&amp;quot;message&amp;quot;&amp;gt;&lt;br /&gt;     &amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;&lt;br /&gt;-      &amp;lt;span class=&amp;quot;subject&amp;quot;&amp;gt;${subject}&amp;lt;/span&amp;gt;&lt;br /&gt;+      &amp;lt;span class=&amp;quot;subject&amp;quot;&amp;gt;${subject} &amp;lt;a href=&amp;quot;#${expandLink}&amp;quot; class=&amp;quot;expand&amp;quot; title=&amp;quot;${i18n.expand}&amp;quot;&amp;gt;${i18n.expand}&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;     &amp;lt;/div&amp;gt;&lt;br /&gt;   &amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;It doesn't seem like much, but it represents several hours of education and paradigm examination and I'm proud of it.&lt;br /&gt;&lt;br /&gt;Now, off to bed...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8567611938103759047-8913156093165387605?l=markmcspadden.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markmcspadden.blogspot.com/feeds/8913156093165387605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markmcspadden.blogspot.com/2009/10/rolling-with-raindrop.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/8913156093165387605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/8913156093165387605'/><link rel='alternate' type='text/html' href='http://markmcspadden.blogspot.com/2009/10/rolling-with-raindrop.html' title='Rolling with Raindrop'/><author><name>Mark</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_KT9sCWe7K9Y/SW1r2w_CgnI/AAAAAAAAAtw/0p11wmaC4WI/S220/Photo+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8567611938103759047.post-4093887392860977092</id><published>2009-10-16T08:37:00.000-07:00</published><updated>2009-10-16T08:37:42.699-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='metrics'/><category scheme='http://www.blogger.com/atom/ns#' term='reflective metrics'/><category scheme='http://www.blogger.com/atom/ns#' term='predictive metrics'/><category scheme='http://www.blogger.com/atom/ns#' term='development processes'/><title type='text'>Predictive and Reflective Development Metrics</title><content type='html'>We spent some time this week working on Development Metrics. Without getting into all the details, I did want to share one illumination that came from those discussions.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Two Types of Metrics&lt;/h4&gt;What I realized when looking at the various metrics and methodologies out there is that they fall into two main buckets I'm currently calling "Predictive" and "Reflective." (If there are better industry-standard words for these, feel free to let me know.)&lt;br /&gt;&lt;br /&gt;Predictive metrics are the measurements we put in place to gauge what we think is going to happen. Almost all code testing (Unit testing, interaction testing, etc.) provide us with predictive metrics.&lt;br /&gt;&lt;br /&gt;Reflective metrics measure what actually happened. &amp;nbsp;All production monitoring (errors, performance, etc) fall into this bucket.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;A Few Reasons to Care&lt;/h4&gt;Ok. That's great. Why does it matter?&lt;br /&gt;&lt;br /&gt;I noticed is that this distinction is very important when communicating to people less technical, especially if those people are decision makers. I'm you've heard something to the effect of: "Why did the website break if we have all these tests?" A predictive/reflective vocab can really help this conversation stay high level instead of diving into the depths of the short falls of testing.&lt;br /&gt;&lt;br /&gt;In addition, I think it can help decision making about where to utilize resources. When you look at resources in this light, it makes you realize how much effort you need to be spending on reflective metrics. Not that predictive metric don't mean anything, in fact I think that every reflective metric you care about needs to have a predictive process to guard it, but you may find your priorities lie in meeting your predictive metrics which may only be telling half the story. (And a wishful thinking version of the story at that.)&lt;br /&gt;&lt;br /&gt;Even if the two above aren't a ton of help to you, this 3rd realization kind of blew my mind. When looking at "feature development and deployment" it seemed pretty clear that this is a predictive process. You think you know what a user or client is asking for. You think you know how a feature will be utilized. These are predictions.&lt;br /&gt;&lt;br /&gt;On the other hand, user feedback and requests are reflective measurements. They let you know how things are actually being used and working and not working.&lt;br /&gt;&lt;br /&gt;Here's the kicker. How much time do you spend in feature meetings trying to hash out the right functionality? And how much time do you spend talking to users, getting feedback, and following up on feedback? Hmmmm......&lt;br /&gt;&lt;br /&gt;Would love to hear you metricize...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8567611938103759047-4093887392860977092?l=markmcspadden.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markmcspadden.blogspot.com/feeds/4093887392860977092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markmcspadden.blogspot.com/2009/10/predictive-and-reflective-development.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/4093887392860977092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/4093887392860977092'/><link rel='alternate' type='text/html' href='http://markmcspadden.blogspot.com/2009/10/predictive-and-reflective-development.html' title='Predictive and Reflective Development Metrics'/><author><name>Mark</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_KT9sCWe7K9Y/SW1r2w_CgnI/AAAAAAAAAtw/0p11wmaC4WI/S220/Photo+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8567611938103759047.post-4190976398412742061</id><published>2009-09-21T14:53:00.000-07:00</published><updated>2009-09-21T14:53:28.621-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='connectivity'/><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='off the grid'/><title type='text'>Working without the Internet</title><content type='html'>Last week I spent 3 days working from College Station, TX. I spent most of my time detached from the interwebs and found it actually very very productive.&amp;nbsp;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The perfect balanced seemed to be having limited and easy to turn on and off access. While I didn't have wifi most of the time, I had setup my phone to be a tethered modem. Now this isn't exactly in line with the User Agreement of my carrier and that fact kept me from having it on the whole time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The point is, I turned on the internet only when I needed it, which turned out to be less than 5 minutes every hour. Five minutes. That's crazy to me considering how many times per MINUTE I get dings and chirps and whistles all from internet driven activity.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Of course I wasn't doing many video conferences etc, but for getting actual work done, it seemed to workout really well.&amp;nbsp;I may start trying this more often....we'll see.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8567611938103759047-4190976398412742061?l=markmcspadden.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markmcspadden.blogspot.com/feeds/4190976398412742061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markmcspadden.blogspot.com/2009/09/working-without-internet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/4190976398412742061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/4190976398412742061'/><link rel='alternate' type='text/html' href='http://markmcspadden.blogspot.com/2009/09/working-without-internet.html' title='Working without the Internet'/><author><name>Mark</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_KT9sCWe7K9Y/SW1r2w_CgnI/AAAAAAAAAtw/0p11wmaC4WI/S220/Photo+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8567611938103759047.post-1257954268723066843</id><published>2009-08-30T20:13:00.000-07:00</published><updated>2009-08-30T20:14:22.098-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='lsrc'/><category scheme='http://www.blogger.com/atom/ns#' term='lone star ruby conference'/><title type='text'>Lone Star Ruby Conference</title><content type='html'>I just got home from the Lone Star Ruby Conference. Of course I'm suffering from all the post conference side effects...bags under my eyes and a brain that feels like it's going to explode.&lt;br /&gt;&lt;br /&gt;I just wanted to quickly get a few things out there:&lt;br /&gt;&lt;h4&gt;LSRC is such a well run conference&lt;/h4&gt;Of course, Lone Star Ruby Conference is a great conference but what strikes me is how well it is organized and run. Everyone associated with putting on the conference should be very proud of the work they do.&lt;br /&gt;&lt;h4&gt;It's always about the people.&lt;/h4&gt;Everyone always says it but that's because it's true. It was great getting to spend time with (in order of appearance) Jason, Wynn, Tim, Glenn, Dave, Mike, Marlon, Jim, Geof, Mike, Adam, James, Dana, Dan, Elena, Jeremy, Evan, Tim and Jeremy. (Sorry if I missed anyone!) Each person brings a whole set of smarts and experiences to our community and I'm always impressed just being privileged to their conversations.&lt;br /&gt;&lt;h4&gt;But it's also about the code.&lt;/h4&gt;Being fully immersed into Ruby land for 3 days is like a breath of fresh air. The training day before the conference was well worth it and each talk on Friday/Saturday, whether it was technical in nature or not, helped make me a better programmer.&lt;br /&gt;&lt;br /&gt;I know it will be a busy week catching up from being gone, but it was well worth it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8567611938103759047-1257954268723066843?l=markmcspadden.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markmcspadden.blogspot.com/feeds/1257954268723066843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markmcspadden.blogspot.com/2009/08/lone-star-ruby-conference.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/1257954268723066843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/1257954268723066843'/><link rel='alternate' type='text/html' href='http://markmcspadden.blogspot.com/2009/08/lone-star-ruby-conference.html' title='Lone Star Ruby Conference'/><author><name>Mark</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_KT9sCWe7K9Y/SW1r2w_CgnI/AAAAAAAAAtw/0p11wmaC4WI/S220/Photo+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8567611938103759047.post-4702602936514460890</id><published>2009-08-26T11:55:00.000-07:00</published><updated>2009-08-26T12:44:24.104-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby yaml to_yaml to_xml to_json'/><title type='text'>yaml.rb</title><content type='html'>I spent some time last week working on a problem that had me digging into Ruby's Standard Library implementation of yaml. I thought I'd take a few minutes to share some thoughts&lt;br /&gt;&lt;h4&gt;Deep Serialization&lt;/h4&gt;To me, this was the reason I was using yaml over json or xml in the first place. I was in Rails and was eager loading an ActiveRecord object. I'd expect the #to_xml or #to_json methods to create a deeply nested structured document including all the associations I eager loading. But that's not the case.&lt;br /&gt;&lt;br /&gt;However I was pleasantly surprised to find that #to_yaml did in fact do this. (It's not exactly apples to apples, #to_yaml is part of the Ruby Standard Library and #to_json and #to_xml are implemented in Rails.)&lt;br /&gt;&lt;br /&gt;This was the home run feature for me so yaml and I started to get close.&lt;br /&gt;&lt;h4&gt;Smart Class Transformations&lt;/h4&gt;Let's say our test.yml file looks like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;--- !ruby/object:Family&lt;br /&gt;kids:&lt;br /&gt;  !ruby/object:Kid&lt;br /&gt;    name: Beef&lt;br /&gt;- !ruby/object:Kid &lt;br /&gt;    name: OshGosh&lt;br /&gt;name: McSpadden&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If you fire up irb and do:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;require 'yaml'&lt;br /&gt;YAML.load(File.read(test.yml))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You'll get something like:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#&amp;lt;YAML::Object:0x580408 @ivars={"name"=&amp;lt;"McSpadden", "kids"=&amp;gt;[#&amp;lt;YAML::Object:0x580660 @ivars={"name"=&amp;gt;"OshGosh"}, @class="Kid"&amp;gt;]}, @class="Family"&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So we've got some kind of yaml object with @ivars that looks to hold all the good stuff. Wouldn't it be nice if it just gave us Family and Kid objects! Yes it would be, but right now, since we're just irb-ing, YAML has no idea what a Family or Kid object looks like. Let's try this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class Family; attr_accessor :name; end&lt;br /&gt;class Kid; attr_accessor :name; end&lt;br /&gt;&lt;br /&gt;YAML.load(File.read(test.yml))&lt;br /&gt;#=&amp;gt; #&amp;lt;Family:0x576624 @name="McSpadden", @kids=[#&amp;lt;Kid:0x5768a4 @name="OshGosh"&amp;gt;]&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;That's what I'm talking about!&lt;br /&gt;&lt;h4&gt;yaml-lab&lt;/h4&gt;I've found that when experimenting with new libraries it helps me to write a quick spec suite to test assumptions and understanding. In this vein, I've created a yaml-lab project on github with some of my experimentation. Feel free to clone it, fork it, whatever it. Here's the link &lt;a href="http://github.com/markmcspadden/yaml-lab/tree/master"&gt;yaml-lab on github&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;That's all for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8567611938103759047-4702602936514460890?l=markmcspadden.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markmcspadden.blogspot.com/feeds/4702602936514460890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markmcspadden.blogspot.com/2009/08/yamlrb.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/4702602936514460890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/4702602936514460890'/><link rel='alternate' type='text/html' href='http://markmcspadden.blogspot.com/2009/08/yamlrb.html' title='yaml.rb'/><author><name>Mark</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_KT9sCWe7K9Y/SW1r2w_CgnI/AAAAAAAAAtw/0p11wmaC4WI/S220/Photo+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8567611938103759047.post-2884571235775162631</id><published>2009-08-16T16:00:00.000-07:00</published><updated>2009-08-17T08:38:37.171-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='mac os x'/><category scheme='http://www.blogger.com/atom/ns#' term='chef'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>An Hour with Chef</title><content type='html'>Today I sat down and decided I would block out an hour to try out &lt;a href="http://wiki.opscode.com/display/chef/Home"&gt;Chef&lt;/a&gt;, an ultrahip, super buzzed "systems integration framework." I really don't have an immediate need for Chef (well at least not that I know of yet!) but I love the idea of managing servers "by writing code, not by running commands" and it's all open source, Ruby goodness under the sheets, so I thought I'd give it a whirl.&lt;br /&gt;&lt;br /&gt;I install the gem and head over to the "Configuring Chef" page. Right away I'm informed that working with Mac OS X probably is NOT going to go well out of the box. I do a few google searches and see there are a couple of Mac OS X cookbooks out there, but for this exercise, I decide to stay as close to official Opscode supported code as I can, so I dive in.&lt;br /&gt;&lt;br /&gt;I get my ~/solo.rb and ~/chef.json setup per the instructions and now it's time to run chef-solo.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;mark-mcspaddens-computer:~ mark$ sudo chef-solo -c ~/solo.rb -j ~/chef.json -r http://s3.amazonaws.com/chef-solo/bootstrap-latest.tar.gz&lt;br /&gt;Password:&lt;br /&gt;[Sun, 16 Aug 2009 16:05:47 -0500] INFO: Starting Chef Solo Run&lt;br /&gt;/tmp/chef-solo/cookbooks/ruby/recipes/default.rb:45:in `from_file': undefined method `each' for nil:NilClass (NoMethodError)&lt;br /&gt;from /usr/local/lib/ruby/gems/1.8/gems/chef-0.7.8/lib/chef/cookbook.rb:139:in `load_recipe'&lt;br /&gt;from /usr/local/lib/ruby/gems/1.8/gems/chef-0.7.8/lib/chef/recipe.rb:79:in `include_recipe'&lt;br /&gt;from /usr/local/lib/ruby/gems/1.8/gems/chef-0.7.8/lib/chef/recipe.rb:64:in `each'&lt;br /&gt;from /usr/local/lib/ruby/gems/1.8/gems/chef-0.7.8/lib/chef/recipe.rb:64:in `include_recipe'&lt;br /&gt;from /tmp/chef-solo/cookbooks/passenger_apache2/recipes/default.rb:26:in `from_file'&lt;br /&gt;from /usr/local/lib/ruby/gems/1.8/gems/chef-0.7.8/lib/chef/cookbook.rb:139:in `load_recipe'&lt;br /&gt;from /usr/local/lib/ruby/gems/1.8/gems/chef-0.7.8/lib/chef/recipe.rb:79:in `include_recipe'&lt;br /&gt;from /usr/local/lib/ruby/gems/1.8/gems/chef-0.7.8/lib/chef/recipe.rb:64:in `each'&lt;br /&gt; ... 16 levels...&lt;br /&gt;from /usr/local/lib/ruby/gems/1.8/gems/chef-0.7.8/lib/chef/application.rb:57:in `run'&lt;br /&gt;from /usr/local/lib/ruby/gems/1.8/gems/chef-0.7.8/bin/chef-solo:26&lt;br /&gt;from /usr/local/bin/chef-solo:19:in `load'&lt;br /&gt;from /usr/local/bin/chef-solo:19&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Awesome. Well, I was warned. Since this is just an educational exercise for me, and decide to dig in and see what I can find. So I pull up /tmp/chef-solo in TextMate, and look at /tmp/chef-solo/cookbooks/ruby/recipes/default.rb. Ok. I see what's going on here. We're trying to install some ruby packages and my OS isn't listed the case statement. Well I'm a Ruby developer and know I already have all the Ruby libs I'll need, so let's just add an else case with an empty array.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;# cookbooks/ruby/recipes/default.rb&lt;br /&gt;&lt;br /&gt;# Line 24: Start of case&lt;br /&gt;# Line 45: Add else case&lt;br /&gt;extra_packages = case node[:platform]&lt;br /&gt;when "ubuntu","debian"&lt;br /&gt; %w{&lt;br /&gt;   ruby1.8&lt;br /&gt;   ruby1.8-dev&lt;br /&gt;   rdoc1.8&lt;br /&gt;   ri1.8&lt;br /&gt;   libopenssl-ruby&lt;br /&gt; }&lt;br /&gt;when "centos","redhat","fedora"&lt;br /&gt; %w{&lt;br /&gt;   ruby-libs&lt;br /&gt;   ruby-devel&lt;br /&gt;   ruby-docs&lt;br /&gt;   ruby-ri&lt;br /&gt;   ruby-irb&lt;br /&gt;   ruby-rdoc&lt;br /&gt;   ruby-mode&lt;br /&gt; }&lt;br /&gt;else []&lt;br /&gt;end&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm pretty confident that will fix our error and not leave us without any libs we'll need, so let's try again this again, only this time we won't tell chef-solo to use the remote cookbook and by default it will use our local one instead. (Which is a big bonus...if I jack things up too bad, we just go back to the remote version.)&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;mark-mcspaddens-computer:~ mark$ sudo chef-solo -c ~/solo.rb -j ~/chef.json&lt;br /&gt;Password:&lt;br /&gt;[Sun, 16 Aug 2009 16:32:48 -0500] INFO: Starting Chef Solo Run&lt;br /&gt;[Sun, 16 Aug 2009 16:32:54 -0500] INFO: Installing gem_package[stompserver] version 0.9.9&lt;br /&gt;[Sun, 16 Aug 2009 16:33:03 -0500] INFO: Creating directory[/stompserver] at /stompserver&lt;br /&gt;[Sun, 16 Aug 2009 16:33:03 -0500] INFO: Setting mode to 755 for directory[/stompserver]&lt;br /&gt;[Sun, 16 Aug 2009 16:33:03 -0500] INFO: Creating directory[/stompserver/log] at /stompserver/log&lt;br /&gt;[Sun, 16 Aug 2009 16:33:03 -0500] INFO: Setting mode to 755 for directory[/stompserver/log]&lt;br /&gt;[Sun, 16 Aug 2009 16:33:03 -0500] INFO: Creating directory[/stompserver/log/main] at /stompserver/log/main&lt;br /&gt;[Sun, 16 Aug 2009 16:33:03 -0500] INFO: Setting mode to 755 for directory[/stompserver/log/main]&lt;br /&gt;[Sun, 16 Aug 2009 16:33:03 -0500] INFO: Creating template[/stompserver/run] at /stompserver/run&lt;br /&gt;[Sun, 16 Aug 2009 16:33:03 -0500] INFO: Setting mode to 755 for template[/stompserver/run]&lt;br /&gt;[Sun, 16 Aug 2009 16:33:03 -0500] INFO: Creating template[/stompserver/log/run] at /stompserver/log/run&lt;br /&gt;[Sun, 16 Aug 2009 16:33:03 -0500] INFO: Setting mode to 755 for template[/stompserver/log/run]&lt;br /&gt;[Sun, 16 Aug 2009 16:33:03 -0500] INFO: Creating a symbolic link from  -&gt; /etc/init.d/stompserver for link[/etc/init.d/stompserver]&lt;br /&gt;[Sun, 16 Aug 2009 16:33:03 -0500] INFO: Creating a symbolic link from /stompserver -&gt; /stompserver for link[/stompserver]&lt;br /&gt;[Sun, 16 Aug 2009 16:33:03 -0500] ERROR: service[stompserver] (/tmp/chef-solo/cookbooks/runit/definitions/runit_service.rb line 65) had an error:&lt;br /&gt;No such file or directory - /etc/init.d/stompserver status&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ok...something's going down with stompserver. Quick 'gem list' shows I have the gem. Let's see if the stompserver command works.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;mark-mcspaddens-computer:~ mark$ stompserver -h&lt;br /&gt;Usage: stompserver [options]&lt;br /&gt; -C, --config=CONFIGFILE          Configuration File (default: stompserver.conf)&lt;br /&gt; -p, --port=PORT                  Change the port (default: 61613)&lt;br /&gt; -b, --host=ADDR                  Change the host (default: localhost)&lt;br /&gt; -q, --queuetype=QUEUETYPE        Queue type (memory|dbm|activerecord|file) (default: memory)&lt;br /&gt; -w, --working_dir=DIR            Change the working directory (default: current directory)&lt;br /&gt; -s, --storage=DIR                Change the storage directory (default: .stompserver, relative to working_dir)&lt;br /&gt; -d, --debug                      Turn on debug messages&lt;br /&gt; -a, --auth                       Require client authorization&lt;br /&gt; -c, --checkpoint=SECONDS         Time between checkpointing the queues in seconds (default: 0)&lt;br /&gt; -h, --help                       Show this message&lt;br /&gt;mark-mcspaddens-computer:~ mark$ which stompserver&lt;br /&gt;/usr/local/bin/stompserver&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Ok I have stompserver, but I'm not getting a link into /etc/init.d/stompserver. So I hack around with trying to pass this directory into the runit_service command in the stompserver default recipe. After a few unsuccessful tries, resort to my old caveman ways and run a command:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;sudo ln -s /usr/local/bin/stompserver /etc/init.d/stompserver&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Time to run chef-solo again...it spins for a while...and spins for a long while...so I decide to investigate. I know the next command we're trying to hit is "/etc/init.d/stompserver status" So I run that in another Terminal and get:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;mark-mcspaddens-computer:~ mark$ /etc/init.d/stompserver status&lt;br /&gt;status&lt;br /&gt;MemoryQueue initialized&lt;br /&gt;TopicManager initialized&lt;br /&gt;QueueManager initialized&lt;br /&gt;Stomp protocol handler starting on 127.0.0.1 port 61613&lt;br /&gt;/usr/local/lib/ruby/gems/1.8/gems/eventmachine-0.12.0/lib/eventmachine.rb:500:in `start_tcp_server': no acceptor (RuntimeError)&lt;br /&gt;from /usr/local/lib/ruby/gems/1.8/gems/eventmachine-0.12.0/lib/eventmachine.rb:500:in `start_server'&lt;br /&gt;from /usr/local/lib/ruby/gems/1.8/gems/stompserver-0.9.9/bin/stompserver:34&lt;br /&gt;from /usr/local/lib/ruby/gems/1.8/gems/eventmachine-0.12.0/lib/eventmachine.rb:224:in `call'&lt;br /&gt;from /usr/local/lib/ruby/gems/1.8/gems/eventmachine-0.12.0/lib/eventmachine.rb:224:in `run_machine'&lt;br /&gt;from /usr/local/lib/ruby/gems/1.8/gems/eventmachine-0.12.0/lib/eventmachine.rb:224:in `run'&lt;br /&gt;from /usr/local/lib/ruby/gems/1.8/gems/stompserver-0.9.9/bin/stompserver:17&lt;br /&gt;from /etc/init.d/stompserver:19:in `load'&lt;br /&gt;from /etc/init.d/stompserver:19&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;[NOTE: After the steps that follow, I realize I probably got this error because chef-solo was still running while I tried it. But it's still always fun to see things step by step, so I'll include my next steps even through they're probably not necessary.]&lt;br /&gt;&lt;br /&gt;Super. I'm waaaayyyy past the "not running commands" so I do "sudo gem install eventmachine" and it upgrades me from 0.12.0 to 0.12.8. I kill the original chef-solo command (which is still just hanging) and next, I see if these acts have appeased stompserver.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;mark-mcspaddens-computer:~ mark$ /etc/init.d/stompserver status&lt;br /&gt;status&lt;br /&gt;MemoryQueue initialized&lt;br /&gt;TopicManager initialized&lt;br /&gt;QueueManager initialized&lt;br /&gt;Stomp protocol handler starting on 127.0.0.1 port 61613&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This sits there for a while, but no errors, and since we're trying to run some kind of server here, I take no news as good news. I kill off the stompserver and decide it's time to try chef-solo again. And it hangs. But I've got an idea.&lt;br /&gt;&lt;br /&gt;In one terminal I do "sudo /etc/init.d/stompserver status" and after that is rolling I open a different Terminal and run chef-solo. Looks like we're getting somewhere.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Sun, 16 Aug 2009 17:13:33 -0500] INFO: Starting Chef Solo Run&lt;br /&gt;[Sun, 16 Aug 2009 17:13:34 -0500] INFO: Creating a symbolic link from  -&gt; /etc/init.d/stompserver for link[/etc/init.d/stompserver]&lt;br /&gt;[Sun, 16 Aug 2009 17:13:34 -0500] INFO: Creating a symbolic link from /stompserver -&gt; /stompserver for link[/stompserver]&lt;br /&gt;[Sun, 16 Aug 2009 17:13:39 -0500] INFO: Installing package[apache2] version 2.2.10&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;So I've got stompserver behind me, but this Apache install is taking a bit of time...and then I get.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;[Sun, 16 Aug 2009 17:18:08 -0500] ERROR: service[apache2] (/tmp/chef-solo/cookbooks/apache2/recipes/default.rb line 30) had an error:&lt;br /&gt;wrong number of arguments (0 for 1)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Ok. Let's open up the apache2 cookbook and see what's up. I open up /tmp/chef-solo/cookbooks/apache2/recipes/default.rb and start trying a few ways on including "mac_os_x" and my specific system setup in into a few of the case statements, but after about 5 minutes I've still got the same error.&lt;br /&gt;&lt;br /&gt;----&lt;br /&gt;&lt;br /&gt;And my hour is up*. Kind of a bummer...but not really. To me, this is really kind of cool. Sure I would have loved to get my chef server configured, but getting to crack open a few recipes and even the chef source itself is a really cool exercise.&lt;br /&gt;&lt;br /&gt;Next time I go Chefing, I'll probably start with one of the Mac OS X cookbooks out there or fire up my Ubuntu laptop that normally sits idle in the office. Honestly, I would love to see an Opscode endorsed/supported/linked_to Mac OS X cookbook, it would have given me the confidence to start with one of those today. (But then again I may have missed out on some good code spelunking.)&lt;br /&gt;&lt;br /&gt;Overall I enjoyed my hour with Chef and look forward to trying this all again at a future date. I'm very surprised at how straight forward the framework seems to be and how easy it was to jump in and get dirty with it.&lt;br /&gt;&lt;br /&gt;All this talk about Chef, and cookbooks, and recipes has me hungry. Time for a snack! :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* A younger less disciplined me would have kept hacking until I got it working, but that really wasn't the point of the exercise. Also, the timestamps will show I went a little longer than an hour. My brother called and we chatted for a bit. Family &gt; Code...most of the time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8567611938103759047-2884571235775162631?l=markmcspadden.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markmcspadden.blogspot.com/feeds/2884571235775162631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markmcspadden.blogspot.com/2009/08/hour-with-chef.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/2884571235775162631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/2884571235775162631'/><link rel='alternate' type='text/html' href='http://markmcspadden.blogspot.com/2009/08/hour-with-chef.html' title='An Hour with Chef'/><author><name>Mark</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_KT9sCWe7K9Y/SW1r2w_CgnI/AAAAAAAAAtw/0p11wmaC4WI/S220/Photo+7.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8567611938103759047.post-1568672519012109931</id><published>2009-07-01T23:41:00.000-07:00</published><updated>2009-07-01T23:46:12.625-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pdf conversion'/><category scheme='http://www.blogger.com/atom/ns#' term='kindle2'/><category scheme='http://www.blogger.com/atom/ns#' term='amazon kindle'/><category scheme='http://www.blogger.com/atom/ns#' term='special characters'/><category scheme='http://www.blogger.com/atom/ns#' term='broken'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><category scheme='http://www.blogger.com/atom/ns#' term='not working'/><title type='text'>Kindle 2 PDF Conversion and Special Characters in the Filename</title><content type='html'>A quick note about an issue I just ran into while trying to convert PDFs into the special Kindle .azw format using the username@free.kindle.com email address.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When either the "(" or ")" or even the "-" characters were in my file name, I got an error. Removed them, and the pdf converted just fine.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Just an FYI.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8567611938103759047-1568672519012109931?l=markmcspadden.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markmcspadden.blogspot.com/feeds/1568672519012109931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markmcspadden.blogspot.com/2009/07/kindle-2-pdf-conversion-and-special.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/1568672519012109931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/1568672519012109931'/><link rel='alternate' type='text/html' href='http://markmcspadden.blogspot.com/2009/07/kindle-2-pdf-conversion-and-special.html' title='Kindle 2 PDF Conversion and Special Characters in the Filename'/><author><name>Mark</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_KT9sCWe7K9Y/SW1r2w_CgnI/AAAAAAAAAtw/0p11wmaC4WI/S220/Photo+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8567611938103759047.post-4428631699394266644</id><published>2009-06-30T12:07:00.000-07:00</published><updated>2009-06-30T12:15:06.526-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vacation'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Did you know we were gone?</title><content type='html'>Last week, Shevawn and I headed up to beautiful Lake Tahoe for a 4 day escape-the-heat-athon/anniversary-celebration. (&lt;a href="http://www.flickr.com/photos/markandshevawn/sets/72157620502031937/"&gt;Photos&lt;/a&gt; for those interested.)&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One of the decisions we made before we left was to NOT talk about our trip on facebook or twitter until we were back at home. The deal is that it's not that hard to find out where we live and letting everyone know we'd be out of state for several days didn't sound like a great idea for the security of our house and possessions.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So we didn't talk about it online, and you know what? It was kind of hard. We belong to these communities because we like the people in them (generally speaking) and we've grown accustomed to sharing what we are doing (and getting feedback) in real time. Sure, we shared things when we got back, but by then, those things were yesterday's news, old and stale in our now real-time information flow.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The question I have is this: Do you twitter/facebook leading up to and while you're on vacation? Why or Why not? &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8567611938103759047-4428631699394266644?l=markmcspadden.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markmcspadden.blogspot.com/feeds/4428631699394266644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markmcspadden.blogspot.com/2009/06/did-you-know-we-were-gone.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/4428631699394266644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/4428631699394266644'/><link rel='alternate' type='text/html' href='http://markmcspadden.blogspot.com/2009/06/did-you-know-we-were-gone.html' title='Did you know we were gone?'/><author><name>Mark</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_KT9sCWe7K9Y/SW1r2w_CgnI/AAAAAAAAAtw/0p11wmaC4WI/S220/Photo+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8567611938103759047.post-6640068790400378111</id><published>2009-06-29T21:42:00.001-07:00</published><updated>2009-06-29T21:49:14.059-07:00</updated><title type='text'>Well looks like the migration hasn't happened yet</title><content type='html'>Maybe we'll take care of that sometime soon.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you're looking for some of the old content from markmcspadden.net checkout this &lt;a href="http://www.google.com/search?client=safari&amp;amp;rls=en-us&amp;amp;q=site:markmcspadden.net&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8"&gt;google search&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I do hope to get it all migrated over at some point, but I'm not going to let that hold up future posts.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8567611938103759047-6640068790400378111?l=markmcspadden.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markmcspadden.blogspot.com/feeds/6640068790400378111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markmcspadden.blogspot.com/2009/06/well-looks-like-migration-hasnt.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/6640068790400378111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/6640068790400378111'/><link rel='alternate' type='text/html' href='http://markmcspadden.blogspot.com/2009/06/well-looks-like-migration-hasnt.html' title='Well looks like the migration hasn&apos;t happened yet'/><author><name>Mark</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_KT9sCWe7K9Y/SW1r2w_CgnI/AAAAAAAAAtw/0p11wmaC4WI/S220/Photo+7.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8567611938103759047.post-5602396476190088689</id><published>2009-01-13T20:33:00.000-08:00</published><updated>2009-01-13T20:34:22.289-08:00</updated><title type='text'>Migrating</title><content type='html'>I am working on migrating the old markmcspadden.net to this blogger site. Knowing how things go, it will probably be at least a month until it's all here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8567611938103759047-5602396476190088689?l=markmcspadden.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markmcspadden.blogspot.com/feeds/5602396476190088689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://markmcspadden.blogspot.com/2009/01/migrating.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/5602396476190088689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8567611938103759047/posts/default/5602396476190088689'/><link rel='alternate' type='text/html' href='http://markmcspadden.blogspot.com/2009/01/migrating.html' title='Migrating'/><author><name>Mark</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_KT9sCWe7K9Y/SW1r2w_CgnI/AAAAAAAAAtw/0p11wmaC4WI/S220/Photo+7.jpg'/></author><thr:total>0</thr:total></entry></feed>
