<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title>coding in the rain</title>
	<link type="application/atom+xml" href="http://ascarter.net/atom.xml" rel="self" />
	<link type="text/html" href="http://ascarter.net/" rel="alternate" />
	<id>tag:ascarter.net,2009-12-31:/atom.xml</id>
	<updated>2012-04-26T01:10:12-07:00</updated>
	
	<entry>
		<title>Can WWDC Be Fixed?</title>
		<author>
			<name>Andrew Carter</name>
		</author>
		<link type="text/html" href="http://ascarter.net/2012/04/26/can-wwdc-be-fixed%3F.html" rel="alternate" />
		<updated>2012-04-26T01:08:14-07:00</updated>
		<id>tag:ascarter.net,2012-04-26:/2012/04/26/can-wwdc-be-fixed?</id>
		<content type="html">&lt;p&gt;Apple announced &lt;a href=&quot;http://developer.apple.com/wwdc/&quot;&gt;WWDC 2012&lt;/a&gt; this morning. The event will be held in San Francisco June 11 to 15. The tickets went on sale around 5:45 AM Pacific time. Fortunately for me, I was in Austin, TX and eating breakfast when the word got out (7:45 AM Central time). Since I haven't gone for a few years, I jumped on my chance and got my pass. The conference sold out in about 2 hours.&lt;/p&gt;

&lt;p&gt;Apple did make some good changes this year. They are no longer allowing resale of registrations. Also, they are capping each organization to 5 passes. These are both very good moves. However, it still doesn't solve the simple supply/demand problem. More people want to go than can get tickets. Today, the west coast paid the bigger price since many people weren't even awake during the entire time tickets were on sale.&lt;/p&gt;

&lt;p&gt;Clearly, something else should be used to allocate tickets. The following are some alternative methods to allocate passes.&lt;/p&gt;

&lt;h2&gt;Lottery&lt;/h2&gt;

&lt;p&gt;This is probably the simplest option. Allow people to pre-register for a ticket lottery. Apply the same rules as sales (no transfers and no more than 5 per organization). At a specific time, run the lottery and allocate the 5000 or so tickets. Give lottery winners 24 hours to redeem them. Any remaining tickets could either go up for general sale or further lottery.&lt;/p&gt;

&lt;p&gt;The problem here is that you may see more developers than really want to go enter the lottery. It is the most democratized form of allocation. There is no priority being given. There probably would be pressure to have VIP passes that circumvent the lottery. It could be hard to keep out some high profile companies.&lt;/p&gt;

&lt;h2&gt;One Pass per Active Developer Account&lt;/h2&gt;

&lt;p&gt;In the old days, you could buy an ADC developer account. In exchange, you would receive special ADC mailings 4 times a year, a significant hardware discount, and a WWDC pass. If there are less than 5000 organizations, give every active  account the opportunity to buy one pass. Put any remaining passes up for general sale or lottery.&lt;/p&gt;

&lt;h2&gt;Priority Allocation&lt;/h2&gt;

&lt;p&gt;Another scheme could be to favor first year developers. If you are in the first year of your developer account, you get a pass. The problem with this is that you could see individuals creating new organizations every year to get a pass.&lt;/p&gt;

&lt;h2&gt;Round Robin&lt;/h2&gt;

&lt;p&gt;If you went last year, you can't go this year. If the pool isn't big enough (i.e. less than 10,000 potential attendees), you could go to a system where you can attend 2 out of 3 years. The idea would be to sideline enough potential attendees to control access.&lt;/p&gt;

&lt;h2&gt;Local User Groups&lt;/h2&gt;

&lt;p&gt;The final solution I can think of is to organize user group events for the week of WWDC. You could do live streaming of sessions, spread Apple evangelists to key regions to host in person events, and other outreach tactics. The idea here would be to make it more of an active global event and rely less on the primary event.&lt;/p&gt;

&lt;p&gt;Of all the solutions, I think one pass per active account is the best solution. Since they are offering 5 per organization, it seems more fair to allow all organizations to have one pass and then offer what is left to others in an organization. I think they can probably combat the problem of people creating accounts just for WWDC by charging for the pass upfront as part of the subscription. You would need to be pretty serious about going to pay for the ticket up front. This would at least allow organizations that know they will send at least one person to lock down their spot.&lt;/p&gt;

&lt;p&gt;As many WWDC veterans will tell you, a huge amount of the value is the networking with other Mac and iOS developers. That alone is incentive to attend. Hopefully, Apple can find some sort of equitable solution to make sure as many people as possible can actively participate in WWDC.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>RailsConf 2012 Day 3</title>
		<author>
			<name>Andrew Carter</name>
		</author>
		<link type="text/html" href="http://ascarter.net/2012/04/26/railsconf-2012-day-3.html" rel="alternate" />
		<updated>2012-04-26T00:24:19-07:00</updated>
		<id>tag:ascarter.net,2012-04-26:/2012/04/26/railsconf-2012-day-3</id>
		<content type="html">&lt;p&gt;Today was the final day of RailsConf. The last day offered a couple great talks. &lt;a href=&quot;http://yehudakatz.com/&quot;&gt;Yehuda Katz&lt;/a&gt; talked about &lt;a href=&quot;http://dl.dropbox.com/u/2285145/The%20Next%20Five%20Years.pdf&quot;&gt;The Next Five Years&lt;/a&gt; for Rails. Honestly, Yehuda's talk should have been the day 3 keynote. It was probably the most honest and informative talk of the entire conference. Yehuda did a great job calling out what it is about Rails that attracted all of us to the platform in the first place. I agree with him that the next big thing should be making Rails just as good for JSON API services as it is for HTML. It's a mixed world more than ever. Building web services whose clients are primarily mobile devices only is increasing.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://twitter.com/qrush&quot;&gt;Nick Quaranto&lt;/a&gt; had a great tour of &lt;a href=&quot;http://speakerdeck.com/u/qrush/p/basecamp-next-code-spelunking&quot;&gt;Basecamp Next: Code Spelunking&lt;/a&gt;. It was actually nice to see that 37signals has some of the same kinds of tradeoffs in their software as everyone else. One of the big takeaways is to always be pragmatic about things like changing data stores. There were numerous things I want to investigate including all the cool JavaScript console tricks, using GitHub for API documentation (see &lt;a href=&quot;http://github.com/37signals/bcx-api&quot;&gt;37signals BCX API&lt;/a&gt;), and the &lt;a href=&quot;http://github.com/rails/strong_parameters&quot;&gt;strong parameters&lt;/a&gt; gem.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://bit.ly/railsconf-2012-redningja&quot;&gt;Jared Ning&lt;/a&gt; had a nice overview of &lt;a href=&quot;http://github.com/seattlerb/minitest&quot;&gt;minitest&lt;/a&gt;. If you hadn't seen it before, it was a good tour of what minitest is about and how it draws from both Test::Unit and RSpec. I'm already in the minitest camp so there wasn't a lot new for me. I liked the explanation Jared used to talk about mocking and stubbing. I agree with his advice - use mocks and stubs sparingly and only after you test against the real thing.&lt;/p&gt;

&lt;p&gt;Overall, it was another great RailsConf. As a developer that switches among multiple platforms and languages, it's always great to dive into nothing but my favorite language Ruby for a few days. Rails feels to me like it is continuing to mature. It's moving a little slower now but that's ok. There is still lots opinions among the faithful and that's healthy. As always, I look forward to apply what I've learned to our own projects.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>RailsConf 2012 Day 2</title>
		<author>
			<name>Andrew Carter</name>
		</author>
		<link type="text/html" href="http://ascarter.net/2012/04/25/railsconf-2012-day-2.html" rel="alternate" />
		<updated>2012-04-25T01:05:47-07:00</updated>
		<id>tag:ascarter.net,2012-04-25:/2012/04/25/railsconf-2012-day-2</id>
		<content type="html">&lt;p&gt;The second day of RailsConf 2012 was another packed day. A couple of the sessions were great and what I wanted to hear about. I also survived my first presentation at RailsConf.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://tenderlovemaking.com/&quot;&gt;Aaron Patterson&lt;/a&gt; presented the keynote in the morning. He didn't try to compete with his &lt;a href=&quot;http://en.oreilly.com/rails2011/public/schedule/detail/19058&quot;&gt;over-the-top presentation&lt;/a&gt; from last year. Aaron was downright subdued compared to his previous talks. He seemed to be encouraging a bit of a back to basics appeal. He talked about normalizing things like the queue interface in Rails among other topics.&lt;/p&gt;

&lt;p&gt;The first talk I went to was by &lt;a href=&quot;http://blowmage.com/&quot;&gt;Mike Moore&lt;/a&gt; on presenters and decorators. Mike gave a very good talk. It was in the spirit of how he does it. The lessons were great. He did an excellent job breaking down the decorator, presenter, and mediator patterns. It was great timing for me as I've been looking at these very things for a project I'm doing now.&lt;/p&gt;

&lt;p&gt;Next was &lt;a href=&quot;http://www.igvita.com/&quot;&gt;Ilya Grigorik&lt;/a&gt; on making the web faster. This was a good overall talk on leveraging a number of tools and techniques. Since Ilya is a Google engineer, he was heavily biased to the Google tool kit. However, his advice was valid despite what toolkit you might use. A key take-away was focusing on perceived load time for the user over most other performance metrics. It's a really good point - the user's experience trumps most anything else.&lt;/p&gt;

&lt;p&gt;After lunch, I attended &lt;a href=&quot;http://twitter.com/leinweber&quot;&gt;Will Leinweber's&lt;/a&gt; talk on schemaless SQL in Postgres. There are some pretty amazing things coming to PostgreSQL. The new key value hstore is very intriguing. They are also integrating V8 into the programming space of Postgres. This opens up some new scenarios that compete directly with solutions like MongoDB. It's early for much of this but it's a very forward looking approach for Postgres to be taking.&lt;/p&gt;

&lt;p&gt;My colleague Steve Jang and I presented a short tour of our automation project for Hulu devices called Bender. We use XMPP, Ruby, and JavaScript to create a communication framework for controlling devices and running scripts. I think the talk went well. We weren't sure if the material would be useful to people or not. We got some great questions and I'm glad we did the talk.&lt;/p&gt;

&lt;p&gt;Tomorrow the conference wraps up. It's been great talking Rails with so many people. It's definitely a different conference than in the past but it is encouraging to see some different people leading the way.&lt;/p&gt;

&lt;hr /&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Updated 04.26.2012&lt;/em&gt;&lt;/strong&gt; -- My slides from our talk: &lt;a href=&quot;http://speakerdeck.com/u/ascarter/p/building-asynchronous-communication-layer&quot;&gt;Building Asynchronous Communication Layer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</content>
	</entry>
	<entry>
		<title>RailsConf 2012 Day 1</title>
		<author>
			<name>Andrew Carter</name>
		</author>
		<link type="text/html" href="http://ascarter.net/2012/04/23/railsconf-2012-day-1.html" rel="alternate" />
		<updated>2012-04-23T23:20:25-07:00</updated>
		<id>tag:ascarter.net,2012-04-23:/2012/04/23/railsconf-2012-day-1</id>
		<content type="html">&lt;p&gt;I'm in Austin, TX for &lt;a href=&quot;http://railsconf2012.com&quot;&gt;RailsConf 2012&lt;/a&gt;. This is always one of my favorite conferences. This year has a different tone. &lt;a href=&quot;http://oreilly.com&quot;&gt;O'Reilly&lt;/a&gt; is gone. &lt;a href=&quot;http://rubycentral.com&quot;&gt;RubyCentral&lt;/a&gt; is running the show on their own. The tracks seem to be consistent with past conferences but it certainly lacks the polish of the O'Reilly events. My company &lt;a href=&quot;http://hulu.com&quot;&gt;Hulu&lt;/a&gt; has a much larger presence than in the past. We are a sponsor and have a lot more people here at the conference. So I'm splitting some time working at our booth and attending sessions.&lt;/p&gt;

&lt;p&gt;The morning opened with &lt;a href=&quot;http://twitter.com/dhh&quot;&gt;David Heinemeier Hansson's&lt;/a&gt; keynote. He talked about progress both for us as programmers and the Rails community. I liked much of what he had to say. He stated that it's ok to disrupt and to not get too comfortable. He also emphasized that new programmers to the platform really need to learn even if it is hard or you make mistakes. I'd agree strongly with that. I'm not a fan of creating artificially easy on-ramps. I want to see Rails include anyone that wants to join but at the same time I expect that developers learn the right set of skills. Some of the talk was a bit preachy. But the sentiment of not settling and accepting change are good advice.&lt;/p&gt;

&lt;p&gt;The next talk I went to was &lt;a href=&quot;http://www.sarahmei.com&quot;&gt;Sarah Mei's&lt;/a&gt; presentation on &lt;a href=&quot;http://backbonejs.org&quot;&gt;Backbone.js&lt;/a&gt;. It was a very well done talk. Sarah is an excellent presenter striking a good balance between content and moving the audience through the topic. Sara gave a quick tour of what Backbone.js is about. She did a nice job of relating it to the Rails structure. She did such a good job I was starting to think maybe I should look at this framework much closer as a solution for my own projects. But then at the very end, she sort of torpedoed the entire talk saying that she probably wouldn't use it anymore. I appreciate the honesty but it was kind of a surprise given the strong case she made the previous 45 minutes.&lt;/p&gt;

&lt;p&gt;I then went to &lt;a href=&quot;http://markbates.com&quot;&gt;Mark Bates's&lt;/a&gt; talk on &lt;a href=&quot;http://coffeescript.org&quot;&gt;Coffee Script&lt;/a&gt;. I'm already a believer so this was not really new. It certainly reinforced how great Coffee Script is and I think Mark convinced at least one of my teammates to consider it seriously.&lt;/p&gt;

&lt;p&gt;I hit the first major speed bump at &lt;a href=&quot;https://twitter.com/andymaleh&quot;&gt;Andy Maleh's&lt;/a&gt; talk on Rails engines. He
did little to convince me to look at Rails engines. His solutions using engines sounded more like hacks to me. I didn't see a clear path to code reuse. It felt like trading one complexity for another.&lt;/p&gt;

&lt;p&gt;I went to &lt;a href=&quot;http://johnbender.us&quot;&gt;John Bender's&lt;/a&gt; talk on Progressive Enhancement for Mobile Web. John is active with &lt;a href=&quot;http://jquerymobile.com&quot;&gt;JQuery Mobile&lt;/a&gt;. He talked a lot about the state of targeting mobile browsers and had some very particular scorn for Android (as he said the &quot;new IE&quot;). One thing I wish he would have talked about more is progressive design. He talked almost exclusively about segregating mobile from desktop browsers. I think it is time to be thinking mobile first with progressive scaling up. It's disappointing to see separating a mobile site from the main site.&lt;/p&gt;

&lt;p&gt;Finally, the closing keynote for the day was by &lt;a href=&quot;http://twitter.com/richhickey&quot;&gt;Rich Hickey&lt;/a&gt;. Rich talked about simplifying but not from the programmer's perspective. He had a lot of great points - we often design software to make our lives as programmers easy but not necessarily the user. The tone of his talk though came off a little sanctimonious. I would have liked a little more acknowledgement of the pragmatism that often leads to the decisions we make.&lt;/p&gt;

&lt;p&gt;Overall, it was a good day. None of the talks were really eye opening but all were insightful and useful. I'm looking forward to more great presentations tomorrow. I'm also going to present myself for the first time at RailsConf. I'll be presenting on our work with XMPP, Ruby, and JavaScript.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Vita</title>
		<author>
			<name>Andrew Carter</name>
		</author>
		<link type="text/html" href="http://ascarter.net/2012/02/28/vita.html" rel="alternate" />
		<updated>2012-02-28T00:08:58-07:00</updated>
		<id>tag:ascarter.net,2012-02-28:/2012/02/28/vita</id>
		<content type="html">&lt;p&gt;Over the weekend, I picked up the new &lt;a href=&quot;http://us.playstation.com/psvita/&quot;&gt;PlayStation Vita&lt;/a&gt; handheld game console. The Vita has certainly met with much skepticism and has not been considered a major success in Japan. But I think Sony may really have something here.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://farm8.staticflickr.com/7194/6788117814_64c674e224_z.jpg&quot; alt=&quot;Vita 1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I've played video games for as long as I can remember. Games were what initially attracted me to programming. I've had many of the major consoles over the years. These days, most of my gaming is on the &lt;a href=&quot;http://en.wikipedia.org/wiki/PlayStation_3&quot;&gt;PlayStation 3&lt;/a&gt;. For portables, I've had the &lt;a href=&quot;http://en.wikipedia.org/wiki/PlayStation_Portable#PSP-2000&quot;&gt;PSP 2000&lt;/a&gt; and the &lt;a href=&quot;http://en.wikipedia.org/wiki/PSP_Go&quot;&gt;PSP Go&lt;/a&gt;. I enjoyed both PSP models but admit that I didn't play them for long periods of time. The lack of the second analog stick made many games not play well.&lt;/p&gt;

&lt;p&gt;Before the iPhone, the PSP was my portable movie device. I never used the other media capabilities that much (the iPod was already around when the PSP first came out). It was the first device I owned that started to transform how I would watch video. In many ways, it paved the way for what we take for granted now in smartphones and tablets.&lt;/p&gt;

&lt;p&gt;With gaming becoming so big on the iPhone, I think many have written off the dedicated gaming device. As much as I love the iPhone, I guess I'm the anomaly. I hate gaming on my iPhone. Angry Birds was fun for a few minutes but both the lack of depth in games coupled with difficult touch controls never matched how I wanted to play games.&lt;/p&gt;

&lt;p&gt;When the platform was announced last summer, I was intrigued. It looked like some very impressive hardware and the screen shots of &lt;a href=&quot;http://us.playstation.com/psvita/games-and-media/psv-uncharted-golden-abyss.html&quot;&gt;Uncharted: Golden Abyss&lt;/a&gt; were gorgeous. I read about the &lt;a href=&quot;http://www.gamasutra.com/view/news/39281/Media_Create_Disappointed_With_Japanese_PS_Vita_Opening_Week_Sales.php&quot;&gt;disappointing launch in Japan&lt;/a&gt;. However, I also started to read more and more first looks that talked about how impressive it was once it was in your hands.&lt;/p&gt;

&lt;p&gt;So I traded in my PSP Go and decided to take a chance on it.&lt;/p&gt;

&lt;h1&gt;Hardware&lt;/h1&gt;

&lt;p&gt;I think it is no exaggeration to say this is the most impressive gaming hardware ever made. What Sony has put in this package is incredible. Nothing like this has ever existed in portable form. The form factor is very comfortable to hold and play. The screen is beautiful. There is more than enough power to play graphically intense games.&lt;/p&gt;

&lt;p&gt;The Vita has touchscreens on both the front and back. Both are very good. The front touchscreen is on par with mobile phones. I think the iPhone's is superior but Vita's is perfectly usable. The front touchscreen is used for interacting with the system software. Most games seem to use it wisely.&lt;/p&gt;

&lt;p&gt;The rear touchscreen is innovative. &lt;a href=&quot;http://us.playstation.com/psvita/games-and-media/psv-ea-sports-fifa-soccer.html&quot;&gt;FIFA&lt;/a&gt; for example uses it as a way to place your shot. In FIFA, you control the player with the analog stick and hit the circle button to shoot. Once the shot is made, you can direct it with the same analog stick as you use to control movement. Good players can handle this. Bad players like myself shoot right over the crossbar. The rear touchscreen allows you to take the shot by putting your fingers behind the screen in the location you want to shoot. That's a very clever use of the control. I haven't mastered it but I think it could work very well. I'm intrigued with the idea of a future DualShock with a rear touchscreen as well.&lt;/p&gt;

&lt;p&gt;The Vita uses a lot of proprietary hardware. They have followed the unfortunate trend started in the PSP Go and have their own dock connector. Blame Apple. So you get to carry around yet another non-standard USB cable. I hate that on the iPhone and hate it here on the PS Vita.&lt;/p&gt;

&lt;p&gt;The other more significant disappointment is the memory card situation. First of all, you must have a card. The device has no built-in memory (unlike the PSP Go which has 16 GB). Memory cards are of course proprietary. So forget using a standard MicroSD card. The cards come in 4, 8, 16, or 32 GB.&lt;/p&gt;

&lt;p&gt;I bought a 32 GB card because I plan to buy games digitally. It adds $100 to the price but 32 GB should hold 8-16 games.&lt;/p&gt;

&lt;p&gt;The battery life is good but not great. It's got more than enough to make it through a long plane flight but not much more. It should be able to be charged from your computer but I haven had little luck charging it from anything other than the AC adapter.&lt;/p&gt;

&lt;h1&gt;Operating System&lt;/h1&gt;

&lt;p&gt;The PS Vita has abandoned the XMB interface and instead has a style clearly inspired by mobile phones. It's better than Android but not as intuitive as iOS. There are definitely times where it feels clunky.&lt;/p&gt;

&lt;p&gt;Apps are &quot;bubbles&quot; that can sit on vertical screens. Swiping right shows up to 6 active apps. Each app has a &quot;live area&quot; which has a few options and an option to launch the app. The PS button will bring up a blade style interface that seems totally out of place. The interface is entirely touch. I would prefer to use the D-Pad or the analog sticks.&lt;/p&gt;

&lt;p&gt;The included apps (Near, Chat) I could care less about. Sony couldn't help themselves and have included some stuff that you would use your mobile phone for not your game handheld. I guess that's not a surprise. But they are useless apps.&lt;/p&gt;

&lt;p&gt;I think the main operating system is the weakest element of the Vita. Fortunately, Sony has a history of refining the UI. The PS3 interface has evolved over time and I hope that Vita's OS will get better in subsequent releases.&lt;/p&gt;

&lt;h1&gt;Games&lt;/h1&gt;

&lt;p&gt;By most accounts, Vita has a very strong lineup of launch titles. I've been spending most of my time on &lt;a href=&quot;http://us.playstation.com/psvita/games-and-media/psv-uncharted-golden-abyss.html&quot;&gt;Uncharted&lt;/a&gt;, &lt;a href=&quot;http://us.playstation.com/psvita/games-and-media/psv-ea-sports-fifa-soccer.html&quot;&gt;FIFA&lt;/a&gt;, &lt;a href=&quot;http://us.playstation.com/psvita/games-and-media/psv-unit-13.html&quot;&gt;Unit 13&lt;/a&gt;, and &lt;a href=&quot;http://us.playstation.com/psvita/games-and-media/psv-lumines-electronic-symphony.html&quot;&gt;Lumines&lt;/a&gt;. In fact, the demos are complete enough I still haven't bought a full title yet. I'm playing through demos to pick which ones I want to buy.&lt;/p&gt;

&lt;p&gt;Games can be bought on memory cards or digitally (usually for about $5 less than physical). Game prices are high - nearly the cost of full PS3 console games (up to $45). I think Sony should have gone all digital and driven the prices down to $30 for the top end. I plan to buy titles digitally since I have no desire to manage cards. You can easily re-download games you bought on the PSN so I think a large memory card will work just fine.&lt;/p&gt;

&lt;p&gt;All the games I've tried have been very well done. FIFA is my favorite since I'm a longtime player. It was my favorite game on the previous PSP's as well. The new control interfaces fit the game well. It is the perfect example of a game that in my opinion doesn't work on the iPhone. There is simply no substitute for the analog sticks in a game like this. The large format screen also is much better to see all the action.&lt;/p&gt;

&lt;p&gt;Uncharted looks fantastic. It retains much of the appeal of the full PS3 versions. Unit 13 looks like it will be the launch shooter title. It's ok but doesn't seem to bring much new. Lumines is addictive. Rayman looks fun too.&lt;/p&gt;

&lt;p&gt;Some PSP titles are supported. The only previous title I own that works is Tomb Raider: Legend. There are some graphical enhancements when running a PSP title that are on par with running PS2 games on a PS3. One very nice feature is that you can remap the right analog stick to the D-Pad or the left stick. This could potentially make some older PSP titles much more fun to play.&lt;/p&gt;

&lt;p&gt;My biggest concern is that after the launch titles, there aren't any clear blockbusters on the horizon. No Gran Turismo, Fallout, or Elder Scrolls. I honestly think this hardware is up to the task. Hopefully someone like BioWare, Bungie, or Blizzard decides to bring titles out on the PS Vita. Diablo on this thing would be incredible.&lt;/p&gt;

&lt;h1&gt;Apps&lt;/h1&gt;

&lt;p&gt;The Vita supports general applications as well. I didn't spend too much time with them. The &lt;a href=&quot;http://netflix.com&quot;&gt;Netflix&lt;/a&gt; app is on par with their other mobile apps. The app is very slow but the streaming quality is very good. I'd love to look at building software for the Vita. I think the most appropriate apps for it will be media centric. The Vita is not a phone. Apps should have much more depth and take advantage of the large screen.&lt;/p&gt;

&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;I believe there is a place for dedicated gaming hardware in the iPhone era. Sony is targeting gamers very clearly with this device. I think comparing the Vita to the &lt;a href=&quot;http://amazon.com/kindle&quot;&gt;Kindle&lt;/a&gt; is a good exercise. The Kindle is a specific purpose device. It is all about reading. Similarly, the PS Vita is gaming. I think if expectations are adjusted to understand this, Sony can have a solid hit.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://farm8.staticflickr.com/7199/6788118038_71f90a6afb_z.jpg&quot; alt=&quot;Vita 2&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Sony didn't play it safe. It's great to see someone other than Apple listen to their users and deliver the product they want. If you are a PS3 gamer, the Vita is a lock. You will love it.&lt;/p&gt;

&lt;h2&gt;What's to Love&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Phenomenal hardware&lt;/li&gt;
&lt;li&gt;Great feel and controls&lt;/li&gt;
&lt;li&gt;Launch titles that are worth playing&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;And the Bad&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Mediocre battery life&lt;/li&gt;
&lt;li&gt;Expensive proprietary memory cards&lt;/li&gt;
&lt;li&gt;System software could use some improvements&lt;/li&gt;
&lt;li&gt;Lots of missing support for legacy PSP titles&lt;/li&gt;
&lt;/ul&gt;

</content>
	</entry>
	<entry>
		<title>Enough Is Enough</title>
		<author>
			<name>Andrew Carter</name>
		</author>
		<link type="text/html" href="http://ascarter.net/2012/02/20/enough-is-enough.html" rel="alternate" />
		<updated>2012-02-20T22:54:16-07:00</updated>
		<id>tag:ascarter.net,2012-02-20:/2012/02/20/enough-is-enough</id>
		<content type="html">&lt;p&gt;For years, people have used services like &lt;a href=&quot;http://www.google.com&quot;&gt;Google&lt;/a&gt;, &lt;a href=&quot;http://facebook.com&quot;&gt;Facebook&lt;/a&gt;, and &lt;a href=&quot;http://linkedin.com&quot;&gt;LinkedIn&lt;/a&gt; for free. Most users probably haven't thought at all about the real cost. Most of these services have a business model where the customers aren't the end users of the service. Instead, advertisers and companies provide the revenue.&lt;/p&gt;

&lt;h2&gt;Everything Has a Cost&lt;/h2&gt;

&lt;p&gt;There is a simple rule in economics - there is no such thing as a free lunch. You must pay. Frequently, it is by selling your information in some form. Google wants to mine it to serve a relevant ad. LinkedIn wants to sell you as a candidate to someone who wants to make a hire. Facebook wants to use your information to draw other users into the network so that they can sell ads to both of you.&lt;/p&gt;

&lt;p&gt;If you have been paying attention, this isn't news. In fact, you should already have understood this. But it's easy even for savvy users to accept these terms without fully thinking about the ramifications.&lt;/p&gt;

&lt;p&gt;It doesn't take much effort to find articles warning of the assault on our privacy. Google was featured just last week for &lt;a href=&quot;http://online.wsj.com/article_email/SB10001424052970204880404577225380456599176-lMyQjAxMTAyMDEwNjExNDYyWj.html&quot;&gt;circumventing Safari&lt;/a&gt;. They are also on record with a plan to &lt;a href=&quot;http://www.google.com/intl/en/policies/&quot;&gt;merge all privacy information&lt;/a&gt; beginning in March.&lt;/p&gt;

&lt;p&gt;I've been growing more and more uncomfortable with this price. I've used Gmail as my primary email for at least 5 years. I've had accounts with many of the other services like Facebook and LinkedIn. The deal they are striking though has reached a tipping point for me. I don't value what they offer enough to pay the price they are asking.&lt;/p&gt;

&lt;p&gt;Let's talk Facebook for a minute. I've always been lukewarm on the service. I like the basic concept - allow you to easily remain in contact with your friends and family. The problem is that it is a constant battle to try to control the amount of information that is shared. I fail to see the value anymore. I have other outlets to share if I want. I don't want to be constantly reviewing how Facebook works to decide what to do.&lt;/p&gt;

&lt;p&gt;LinkedIn is another service I no longer use. Maintaining a professional network of connections is another solid basic idea. The execution is again flawed. Overwhelmingly, the interactions I had on LinkedIn were recruiters spamming  based on keywords. My resume simply gave them something to sell in bulk to recruiting agencies. None of it is optimized for me as a job seeker to profit.&lt;/p&gt;

&lt;p&gt;Of all of the services, Google to me is the one that has taken the biggest turn for the worse. The current state of Google seems to openly mock the famous &lt;a href=&quot;http://investor.google.com/corporate/code-of-conduct.html&quot;&gt;&quot;Don't be evil&quot;&lt;/a&gt; motto. Google has of course been an advertising company since the very early days. It was a legitimate trade off for a long time. Users did indeed get value in return. But today's Google skews the value equation so far in their favor that I no longer see value in nearly anything Google does.&lt;/p&gt;

&lt;h2&gt;Taking Control&lt;/h2&gt;

&lt;p&gt;There really is another way. You can pay for services.&lt;/p&gt;

&lt;p&gt;David Heinemeier Hansson recently wrote about &lt;a href=&quot;http://37signals.com/svn/posts/3107-99-problems-but-money-aint-one&quot;&gt;venture funded startups&lt;/a&gt; and how they compromise users in favor of making money. It's a favorite topic for him. I agree with much of what he has to say. If the company is not structured to be sustained by providing value to you as a customer, it is highly unlikely the result will be pleasant.&lt;/p&gt;

&lt;p&gt;This problem is not just in the software world. It's at the root of the banking collapse or the current state of money corrupting politics. The customers in both cases aren't the people who are impacted.&lt;/p&gt;

&lt;p&gt;I think the first thing you should do is put a price on your own online dignity. Decide what it is worth to you to own your fate and control your data.&lt;/p&gt;

&lt;h2&gt;How to Switch&lt;/h2&gt;

&lt;p&gt;I've been making the transition away from these services for a few months now. I started by deleting my LinkedIn account. Haven't missed it at all. I next deleted my Facebook account. Similarly, I don't miss it at all.&lt;/p&gt;

&lt;p&gt;I've begun to get everything off Google. My goal is to delete my Google account by March 1. It is nearly impossible to not use Google in some form (much like it was nearly impossible to use Microsoft 10 years ago).&lt;/p&gt;

&lt;p&gt;For mail, I've always had a tension to using Gmail anyway. I wasn't a fan of the label system. I am using two different services - Apple's &lt;a href=&quot;http://icloud.com&quot;&gt;iCloud&lt;/a&gt; and &lt;a href=&quot;http://fastmail.fm&quot;&gt;FastMail&lt;/a&gt;. I've had a .Mac/MobileMe account since early 2000's. I simply switched my mail to using it instead of Gmail. It's been reliable and problem free. I prefer applications for mail over web browser so it integrates just fine into my workflow. In addition, I moved my domain email to FastMail. These guys are the perfect example of how services can work. They charge a reasonable amount ($40/year to host your own domain email), you get a service. It is generally faster than iCloud and also been rock solid.&lt;/p&gt;

&lt;p&gt;For calendars and address book, iCloud is my choice. Google's Calendar and Contacts were always incredibly buggy to me anyway. For instant messaging, FastMail provides a Jabber service so I can IM with GoogleTalk and other Jabber users. I also use Apple's AIM and iMessage services.&lt;/p&gt;

&lt;p&gt;For photos, I use &lt;a href=&quot;http://flickr.com&quot;&gt;Flickr&lt;/a&gt;. I pay for a pro account so again it feels like I have a good deal right now - I pay them some money every year, they let me host my photos. So far, they haven't violated that trust.&lt;/p&gt;

&lt;p&gt;For phone, I use iPhone. I simply can't imagine using an Android device given the new Google privacy policy. That is an incredibly risky thing to do. An Android phone is useless without the Google account. I honestly don't know how certain professions (lawyers, doctors, financial) could use Android given where they are going as a platform.&lt;/p&gt;

&lt;p&gt;For social, I still use &lt;a href=&quot;http://twitter.com&quot;&gt;Twitter&lt;/a&gt; but I'm keeping my eye on it. I fear they will head the same direction as the others. The one key advantage to Twitter though is that I am sharing just the messages I chose to send. I have always felt like I was in control with Twitter unlike Facebook. That said, I'd feel better if there were some other alternative. I think Twitter's basic form of communication is indeed valuable. But I can't see a single company being in charge of it as a good thing.&lt;/p&gt;

&lt;p&gt;There are unfortunately services that are hard to completely leave. The biggest problem is search. I am not really sure what to do. Many people recommend &lt;a href=&quot;http://duckduckgo.com&quot;&gt;DuckDuckGo&lt;/a&gt;. They are interesting but I know nothing about them - why should I trust them? How are they different than a fledgling Google? I trust Microsoft about as much as I trust Google. Besides, Bing doesn't seem like a good product. Yahoo is rebranded Bing. So I use Google for now but am running signed out. Maps are the same players, same problems.&lt;/p&gt;

&lt;p&gt;The one service that has me really stuck is RSS. Google Reader effectively killed all the other RSS services and now is stagnated. Most RSS readers use Google Reader as the sync service. I'm trying to find an alternative but it is bleak.&lt;/p&gt;

&lt;h2&gt;What Can You Do?&lt;/h2&gt;

&lt;p&gt;I freely admit I'm taking the extreme approach. I am actively trying to get rid of Google in particular. It goes without saying that I am very skeptical of pure social networks for many of the same reasons.&lt;/p&gt;

&lt;p&gt;I encourage you to at least take an inventory of what you use and why. Think about the real costs. Eliminate the services that are in conflict with you.&lt;/p&gt;

&lt;p&gt;We should be encouraging government policy to bring about legitimate privacy standards. I don't believe this will solve it but I do think there has to be some sort of real policy to help control what is happening with our privacy.&lt;/p&gt;

&lt;p&gt;In the end, users need to stand up for themselves and take responsibility.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>State of the Technical Interview</title>
		<author>
			<name>Andrew Carter</name>
		</author>
		<link type="text/html" href="http://ascarter.net/2011/11/09/state-of-the-techincal-interview.html" rel="alternate" />
		<updated>2011-11-09T09:53:25-07:00</updated>
		<id>tag:ascarter.net,2011-11-09:/2011/11/09/state-of-the-techincal-interview</id>
		<content type="html">&lt;p&gt;I've been spending a huge amount of time and energy lately on the interview process. My team has way more work than people. We are definitely resource constrained. We need developers. The problem is how do we fill those positions?&lt;/p&gt;

&lt;p&gt;I've done a lot of interviews over the years - both as interviewer and interviewee. I think I've seen both good and bad. Unfortunately, I think the technical interview process is broken.&lt;/p&gt;

&lt;h1&gt;What's Broken&lt;/h1&gt;

&lt;p&gt;Over the years, a playbook has emerged on how to do technical interviews. I think the big companies have led the way. Everyone seems to use it despite their size. It's a factory approach that is highly impersonal and results in an unpleasant experience overall for both candidate and interviewer. No one likes the process.&lt;/p&gt;

&lt;h2&gt;Screening&lt;/h2&gt;

&lt;p&gt;Everyone seems to have a screening process. Typically, companies use dedicated recruiting staff to filter candidates. The worst of them use tools like &lt;a href=&quot;http://www.linkedin.com&quot;&gt;LinkedIn&lt;/a&gt; to do nothing more than keyword searches. You see this all the time. I've been doing development for 15 years and I still get targeted with job descriptions for positions requiring &quot;1 to 5 years experience&quot;. It seems that there is no real analysis of the candidate's history. Clearly I'm not going to be interested in a job that is a junior position. I'd probably be overqualified and be unsatisfied.&lt;/p&gt;

&lt;p&gt;The other problem is total disregard for the candidate's history. If I have done my entire career in Seattle, what are the odds that I'm interested in moving to Virginia or New Jersey? Likely very low. Also, I'd clearly be a much more expensive hire since you would have to move me (and probably a family) across the country. On the other hand, if I moved from Seattle to Chicago to New York to Los Angeles over the course of ten years, I'd be far more likely to consider a job in Texas.&lt;/p&gt;

&lt;p&gt;The next problem is that the recruiter is often not qualified to adequately screen the candidate. If the recruiter can not intelligently discuss technical specifics or even understand the actual job, how can they accurately assess a candidate? The result here is that recruiters do not filter out candidates for fear of missing the right person.&lt;/p&gt;

&lt;h2&gt;Interrogation&lt;/h2&gt;

&lt;p&gt;I detest the current standard developer whiteboard session. It is nothing more than a brutal interrogation. No one writes code on the whiteboard. No one writes code without having their favorite editor or their web browser to look things up. No one (should) code alone. Yet all of this happens in the whiteboard interview.&lt;/p&gt;

&lt;h2&gt;Ignoring Previous Work&lt;/h2&gt;

&lt;p&gt;I've been the victim of this many times. This is the case where despite years of experience writing code in a language and shipping products, the candidate is put through coding trivia on the whiteboard. The better approach is to determine how accurate the resume entry is for the previous code. The more you trust that they have shipped or written the code before, the less time you need to waste on determining what is already true.&lt;/p&gt;

&lt;h2&gt;Fear of Missing the One&lt;/h2&gt;

&lt;p&gt;Among the worst problems is the fear that you are missing &quot;the One&quot;. No one wants to be the one that drafts Sam Bowie instead of Michael Jordan. So the tendency is to doubt your instincts or ignore warning signs.&lt;/p&gt;

&lt;p&gt;There is nothing wrong with giving candidates the benefit of the doubt. However, you have to decide. You will miss a good candidate. It will happen. But you are far more likely to hire a bad candidate because you put something in them that isn't there.&lt;/p&gt;

&lt;p&gt;The other form of this is when the interviewers don't make a clear Hire vs. No Hire decision. There is no in-between. The job is to decide. Either you hire them or you don't.&lt;/p&gt;

&lt;h2&gt;Hiring Just In Case&lt;/h2&gt;

&lt;p&gt;Despite evidence to the contrary, companies always seem to think the solution is to hire more. Adding more people means you can do more. Right? As the &lt;a href=&quot;http://en.wikipedia.org/wiki/The_Mythical_Man-Month&quot;&gt;Mythical Man-Month&lt;/a&gt; showed, adding more doesn't make you necessarily do more. For every engineer you add, you increase the cost in multiple dimensions. Another hidden cost is that every hour I spend interviewing candidates or reading resumes is an hour I can't write code. For every person you hire, that's more time I have to spend managing instead of working on code. Every person you hire changes your team dynamic. The team needs to absorb the change. Adding many new people at once is akin to starting over. All the dynamics are reset and have to stabilize. The more you add the harder it is.&lt;/p&gt;

&lt;h2&gt;Putting on a Facade&lt;/h2&gt;

&lt;p&gt;We all love our company. At least that's what we always say. We are all world class and hire only the best. We all have the smartest management. The best resources and processes.&lt;/p&gt;

&lt;p&gt;That's a lie.&lt;/p&gt;

&lt;p&gt;Pretending your company is something it is not just means your new hires will figure it out a month or two into the job and be very bitter.&lt;/p&gt;

&lt;h1&gt;What Works&lt;/h1&gt;

&lt;p&gt;It's not all bad. There are good things that can be done and work.&lt;/p&gt;

&lt;h2&gt;Multiple Opinions&lt;/h2&gt;

&lt;p&gt;Most companies get this one right. It is good to have more than one person evaluate candidates. Consensus on hiring is a good thing since it impacts the team. It is easy to miss traits or flaws. Interviewers project all the time and see themselves in the candidate.&lt;/p&gt;

&lt;h2&gt;Candidate Presentations&lt;/h2&gt;

&lt;p&gt;Having the candidate do a presentation on themselves is a great way to get to know them. We hired our designers totally different than our software engineers. The designer candidate would do a 30 minute presentation to the hiring team then do 30 minutes with each interviewer (3 of us).&lt;/p&gt;

&lt;p&gt;This was a great way to get to know the candidate. They have to prepare, tell you a story, and highlight their strengths. They should be able to put their best foot forward. A lackluster presentation shows you a lot about the candidate.&lt;/p&gt;

&lt;h2&gt;Portfolios&lt;/h2&gt;

&lt;p&gt;Reviewing a body of work is a great way to get to know what a candidate can do. &lt;a href=&quot;http://www.github.com&quot;&gt;GitHub&lt;/a&gt; allows any developer to have a portfolio of source code that can be reviewed. This is so much more valuable than an arbitrary trivia question on the white board.&lt;/p&gt;

&lt;h2&gt;Pair Programming&lt;/h2&gt;

&lt;p&gt;I've never done this but I've read about the technique. The idea is to have a candidate work with the interviewer on a problem or task using pair programming. It could be a real work assignment. I guarantee you will have a strong opinion one way or the other after working with someone like this.&lt;/p&gt;

&lt;p&gt;It seems to me a better way to do the code review would be to sit down at a computer and build something via pair programming. Maybe organize the candidate interviews over the course of the day to pair with 4 people and build a complete thing. A real world scenario like this should be much more like reality and let you intimately see how they work.&lt;/p&gt;

&lt;h2&gt;Referrals&lt;/h2&gt;

&lt;p&gt;The best candidates are people someone on your team has directly worked with and vouches for. No question. The good and bad is already known. The personality is a known quantity. These should always be your first choice. Beyond that, follow the graph. You are still much better off one or two levels removed from your employees than scanning LinkedIn.&lt;/p&gt;

&lt;h2&gt;Telling the Truth&lt;/h2&gt;

&lt;p&gt;Everyone lies.&lt;/p&gt;

&lt;p&gt;So just tell the truth instead. Don't present your company as something it is not. I do this a lot. Right now, our office is very much a startup. We have technical difficulties, we are remote from the main office, you wear lots of hats and change tasks frequently. I never hide that fact. Because if that's uncomfortable, you won't succeed here.&lt;/p&gt;

&lt;h2&gt;Hiring on Need&lt;/h2&gt;

&lt;p&gt;Hiring when in pain is good. Hiring just enough is best. So don't try to hire four more engineers. Hire just one. Spend the time to find just that one more person. If that's not enough, do it again. One at a time until you don't need another.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Impact</title>
		<author>
			<name>Andrew Carter</name>
		</author>
		<link type="text/html" href="http://ascarter.net/2011/10/05/impact.html" rel="alternate" />
		<updated>2011-10-05T23:31:32-07:00</updated>
		<id>tag:ascarter.net,2011-10-05:/2011/10/05/impact</id>
		<content type="html">&lt;p&gt;Like most of you, I did not know Steve Jobs. I never got to meet him. But this is what he meant to me.&lt;/p&gt;

&lt;p&gt;When I was 12 years old, I would go to the public library and spend hours entering programs into the TRS-80 computers. I would make the little turtle draw lines. Enter IF THEN GOTO. Maybe even make it sound a note.&lt;/p&gt;

&lt;p&gt;I would buy computer magazines like Byte. I'd read them cover-to-cover and study the programs in them. I didn't have a computer of my own to enter them. Many of the programs were for the Commodore 64. I thought I might be able to get my parents to get a C64 so I was sure to inform them on the values of having a computer in the house.&lt;/p&gt;

&lt;p&gt;At my school, we had these fantastic machines called Apple II's. I wanted nothing more than to play with these machines. My imagination was completely captivated.&lt;/p&gt;

&lt;p&gt;Christmas of 1984 everything changed. My parents bought the family an Apple IIc. It was an amazing machine - much more sophisticated than the Apple II's at my school. It was supposed to be for the family but it was mostly mine. ProDOS, BASIC, Wizardry, Wasteland, Zork.&lt;/p&gt;

&lt;p&gt;My Dad is a football coach. I liked football but I wasn't cut out be a football player. I've always been thankful my Dad was cool with that. I helped him out with the stats. I created a spreadsheet in AppleWorks that rivaled what you see today in the Sunday paper. He had no idea how it worked or what I had done. He'd go to meetings with other coaches and they would ask to buy the software. Who would pay for a spreadsheet?&lt;/p&gt;

&lt;p&gt;A friend's dad worked at Washington State University. They had a Macintosh. It was the most fantastic thing I'd ever seen. You could play TaxMan on it. You could make documents that looked exactly like they did when you printed them. It could speak to you.&lt;/p&gt;

&lt;p&gt;Every now and then, we would go to Spokane where they had dedicated computer stores. I'd sometimes get a new game. But I mostly got to play with the Macintosh. I'd bring home every pamphlet they had and spend hours studying what the Macintosh was and what it would be like to own one.&lt;/p&gt;

&lt;p&gt;When I went to college in the fall of 1989, I got an Apple IIc+. It had a turbo switch and a small 3.5&quot; floppy disks. It was portable (it had a handle).&lt;/p&gt;

&lt;p&gt;After my freshman year, Apple introduced the Macintosh Classic. A modern version of the Mac Plus. Since I was a university student, I could get a discount. You could now buy a Mac for under $1000. I wrote papers. I recorded sounds. I got a modem and could dial into the university Solaris machines and do my engineering homework.&lt;/p&gt;

&lt;p&gt;At school, there were these amazing black cubes called NeXT. I never got to use them but I wanted one really bad. They were the first computer I'd ever seen that seemed superior to a Macintosh.&lt;/p&gt;

&lt;p&gt;In 1992, I did a nine month internship for a local software company called Microsoft. I worked in the Macintosh Excel support group. I would help people do incredible things like creating Japanese-English dictionaries. Sometimes they would even do formulas and numbers. Microsoft generously would give interns a computer when they finished. I asked if I could keep the Macintosh IIsi instead of taking a Wyse PC. They said sure. I now had my own color Macintosh.&lt;/p&gt;

&lt;p&gt;In 1994, I graduated with a degree in Electrical Engineering and went to work for a huge consulting company. My first engagement was at McCaw Cellular where we wrote software on an operating system called NeXTStep. It was very different than anything else I'd ever used. I mostly wrote C code in terminal sessions to HP-UX machines. One of the team leads on the project had this amazing handheld computer called a Newton. He'd take notes on it during meetings and used a pen as the input. Looked like it belonged on Star Trek.&lt;/p&gt;

&lt;p&gt;I went back to Microsoft after that in 1995. Some random boring guys in suits were running Apple and all the games were now on DOS for PC's. So I bought a NEC computer. It was a piece of junk. Sometimes I could get TIE Fighter to work on it.&lt;/p&gt;

&lt;p&gt;Around 1998, I started to get into Linux. It was a lot like the old Solaris and HP-UX machines I used in college and my first job. I really liked it. From Linux, I went to FreeBSD. Then around 2002, I started to look at Mac OS X 10.2 Jaguar. It seemed to be an awesome mix of the stuff I liked in Linux and BSD with the Mac interface I used to love. And it had some of that really cool NeXT stuff mixed in. I bought a PowerMac G4 tower.&lt;/p&gt;

&lt;p&gt;I took a game development course in 2003. I'd always wanted to make games. Since the course was through the University of Washington, I could get discounts on Apple gear. So I bought my first laptop - a Powerbook running Panther. Not long after that, I got my first iPod. 20GB I think (it was stolen years later out of my car). All the U2 you could ever want on it.&lt;/p&gt;

&lt;p&gt;By 2005, I left Microsoft as I realized my interests clearly didn't align with theirs. Microsoft software and machines began to disappear from my life. I bought my wife her own iMac. Got a G5 tower, then an Intel MacBook Pro. All my jobs since, I've had a MacBook or an iMac. My Powerbook went from an oddity to ultra-mainstream.&lt;/p&gt;

&lt;p&gt;Today, I'm surrounded by Apple devices. My lifeline is my iPhone, the most important device I've ever owned. I carry around 100's of tech books on my iPad. My daughter at 6 years old has no idea anything other than Apple exists. She has an iPod Touch and an iPad. She's completely at home in them. She sends emails to Mom and Dad. She records herself singing in GarageBand on her iPad. She's really good at Doodle Jump.&lt;/p&gt;

&lt;p&gt;For nearly 30 years, some piece of Apple has been in my life. The Steves (Jobs and Wozniak) were always the good guys, heroes to those of us that wanted to do something more.&lt;/p&gt;

&lt;p&gt;I know that Steve Jobs didn't create all these things that impacted me and my family himself. But his leadership, his influence did. And it extends way beyond just these things from Apple. An entire generation of software developers has been inspired by Steve Jobs.&lt;/p&gt;

&lt;p&gt;Tonight I am sad. There will be a void that will not be filled for a very long time. But as I write about 30 years of my life, I can't help but enjoy these very happy memories, mileposts in my own life. I'll always equate Steve Jobs with the classic Apple tagline &quot;Think Different&quot;. I want to do my part to keep that thought alive.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Modern Ruby Development</title>
		<author>
			<name>Andrew Carter</name>
		</author>
		<link type="text/html" href="http://ascarter.net/2011/09/25/modern-ruby-development.html" rel="alternate" />
		<updated>2011-09-25T19:09:01-07:00</updated>
		<id>tag:ascarter.net,2011-09-25:/2011/09/25/modern-ruby-development</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://rubyonrails.org/&quot;&gt;Rails&lt;/a&gt; and &lt;a href=&quot;http://ruby-lang.org/&quot;&gt;Ruby&lt;/a&gt; have changed dramatically over the years. For those of us that have been building software on Ruby and Rails for some time, our development stack is likely due for an upgrade. Recently two things led me to review how I build Rails apps. First, I have a new project I intend to build with Rails 3.1. The other event was the release of &lt;a href=&quot;https://github.com/sstephenson/rbenv&quot;&gt;rbenv&lt;/a&gt; as an alternative to &lt;a href=&quot;http://beginrescueend.com/&quot;&gt;RVM&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The following is a walkthrough of how I configure my Mac OS X machines for Ruby and Rails development. It is very similar to the configuration that 37signals &lt;a href=&quot;http://37signals.com/svn/posts/2998-setting-up-a-new-machine-for-ruby-development&quot;&gt;recently described&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;Pre-requisites&lt;/h1&gt;

&lt;p&gt;I'm assuming you are using Mac OS X 10.7 Lion. Most of it will likely work fine under Linux (particularly Ubuntu). I have no idea nor do I care if it works on Windows. If you are using Windows for your Rails development, I think you are at a severe disadvantage. That's just reality.&lt;/p&gt;

&lt;h1&gt;Development Software Stack&lt;/h1&gt;

&lt;p&gt;The developer software stack is the toolset that allows you to efficiently create Ruby and Rails applications. For most Ruby developers, the key tools are a terminal shell, programmer's text editor, and web browser.&lt;/p&gt;

&lt;h2&gt;Xcode 4&lt;/h2&gt;

&lt;p&gt;On Mac OS X, you need &lt;a href=&quot;http://itunes.apple.com/us/app/xcode/id448457090?mt=12&quot;&gt;Xcode 4&lt;/a&gt;. Besides the Xcode IDE, it includes the compilers and libraries you will need to build software from source. It also includes developer tools like Git.&lt;/p&gt;

&lt;p&gt;Lion is transitioning to LLVM as the default compiler. Xcode also includes the legacy GCC compiler suite. There is an alternate community GCC only install but I don't feel it is worth the trouble. As of Mac OS X Lion, Xcode 4 is now installed via the Mac App Store.&lt;/p&gt;

&lt;h2&gt;zsh&lt;/h2&gt;

&lt;p&gt;Mac OS X defaults the terminal shell to &lt;a href=&quot;http://www.gnu.org/s/bash/&quot;&gt;bash&lt;/a&gt;. It also ships with a relatively up-to-date alternative called &lt;a href=&quot;http://www.zsh.org&quot;&gt;zsh&lt;/a&gt;. I recommend learning and using zsh. It has no disadvantages compared with bash and supports numerous programmer friendly features.&lt;/p&gt;

&lt;p&gt;If you want to set your login shell to zsh, go to &lt;strong&gt;System Preferences -&gt; Users and Groups&lt;/strong&gt;. Right-click on your user account and select &lt;strong&gt;Advanced Options&lt;/strong&gt;. Change the login shell dropdown to &lt;code&gt;/bin/zsh&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;Homebrew&lt;/h2&gt;

&lt;p&gt;A huge flaw of Mac OS X is the lack of a proper package manager. No mainstream Linux distribution is without a system to manage adding open source software. Given the lack of an official option from Apple, there are several community projects. The best is &lt;a href=&quot;http://mxcl.github.com/homebrew/&quot;&gt;Homebrew&lt;/a&gt;. The default Ruby on Rails stack does not require any packages from Homebrew. However, it is highly likely you will soon encounter a dependency that requires a library (like ImageMagick). It is recommended that you install Homebrew on your development machine. I previously wrote about &lt;a href=&quot;/2010/02/22/homebrew-for-os-x.html&quot;&gt;homebrew&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;rbenv / ruby-build&lt;/h2&gt;

&lt;p&gt;Mac OS X by default ships with &lt;code&gt;Ruby 1.8.7p249&lt;/code&gt;. It ships with Rubygems itself installed but no gems are installed by default. It is best to completely ignore the system Ruby for purposes of software development. The default &lt;code&gt;Ruby 1.8.7&lt;/code&gt; install is useful for writing general purpose scripts. Installing gems to the system Ruby will eventually lead to a mess.&lt;/p&gt;

&lt;p&gt;The Ruby interpreter is updated relatively frequently (at least much faster than Mac OS X). For the most part, &lt;code&gt;Ruby 1.9.2&lt;/code&gt; has become the default MRI version. The acceptance of &lt;code&gt;Ruby 1.9.3&lt;/code&gt; will likely also be relatively fast. There are various alternative Ruby implementations as well like &lt;a href=&quot;http://www.rubyenterpriseedition.com/&quot;&gt;REE&lt;/a&gt; and &lt;a href=&quot;http://jruby.org&quot;&gt;JRuby&lt;/a&gt;. Most Ruby interpreters can be downloaded as source code and compiled easily. However, it is still convenient to use a tool to manage Ruby installs.&lt;/p&gt;

&lt;p&gt;Until recently, &lt;a href=&quot;http://beginrescueend.com/&quot;&gt;RVM&lt;/a&gt; was the best choice. It certainly helped with managing multiple versions of Ruby but it is a mess of bash scripts that are far more invasive than I care for. Fortunately, Sam Stephenson's &lt;a href=&quot;https://github.com/sstephenson/rbenv&quot;&gt;rbenv&lt;/a&gt; and &lt;a href=&quot;https://github.com/sstephenson/ruby-build&quot;&gt;ruby-build&lt;/a&gt; offer a much more elegant and efficient way to manage your Ruby installs.&lt;/p&gt;

&lt;p&gt;rbenv is a very young project. I've been using it for over a month now and find it much more to my liking. Additionally, I did not appreciate the reaction of RVM's author Wayne Seguin. To me, when you build open source software, you should expect (and hope) that something better comes along to replace your software. I have no interest in supporting projects that are just as much about stroking the author's ego as getting things done. Sam Stephenson has proven with &lt;a href=&quot;http://www.prototypejs.org/&quot;&gt;Prototype.js&lt;/a&gt; that he is a pragmatic developer that is open to alternatives. That is an attitude I can get on board with.&lt;/p&gt;

&lt;p&gt;rbenv uses a very safe approach. The version of Ruby that will get used is dependent on the path and some environment variables. rbenv uses wrapper scripts (shims) that at runtime adjust the paths and environment variables depending on the version of ruby requested.&lt;/p&gt;

&lt;p&gt;I built a system similar to this several years ago. So I trust the approach. The advantage of rbenv is that it has smart wrappers to make it trivial to switch from one version of Ruby to another.&lt;/p&gt;

&lt;p&gt;rbenv itself does not install Ruby. It just switches between installed versions. You can either build Ruby from source yourself or use the sister project &lt;a href=&quot;https://github.com/sstephenson/ruby-build&quot;&gt;ruby-build&lt;/a&gt; to assist you in building a Ruby install. Most mainstream Ruby versions are easily installed. The ruby-build tool will download the source, build it, and install a base version of Rubygems for that Ruby version.&lt;/p&gt;

&lt;h2&gt;Bundler&lt;/h2&gt;

&lt;p&gt;Gem management has been a source of frustration to Ruby programmers for years. There have been several previous attempts at managing gems in the context of an application. The latest is &lt;a href=&quot;http://gembundler.com&quot;&gt;Bundler&lt;/a&gt;. For the most part, it is a good way to package and manage dependencies for your application. Unlike RVM, rbenv expects Bundler to be the preferred way for managing your gems. RVM had a somewhat conflicting concept called gemsets. For better or worse, I think the approach rbenv uses by using Bundler only at least makes gem management consistent.&lt;/p&gt;

&lt;h2&gt;Pow&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://pow.cx&quot;&gt;Pow&lt;/a&gt; is an incredibly simple Rack server specifically for Mac OS X. It is built using &lt;a href=&quot;http://nodejs.org/&quot;&gt;Node.js&lt;/a&gt;. It provides both an HTTP and a DNS server. It utilizes a special top-level domain (&lt;code&gt;.dev&lt;/code&gt;) so you can host your apps at &lt;code&gt;http://myapp.dev/&lt;/code&gt;. This is very powerful for building services that would expect to be on their own endpoints in production. Plus, it is ridiculously easy to add a new app.&lt;/p&gt;

&lt;h2&gt;Capistrano&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://capify.org&quot;&gt;Capistrano&lt;/a&gt; is still the best method in my opinion to deploy an application. This is separate from provisioning. It is the software to push your latest code to target servers and do any associated tasks with it. I won't talk about Capistrano much here since this article is about configuring a development machine. But Capistrano should likely be in the tool chain if you ever expect to deploy from your development environment.&lt;/p&gt;

&lt;h2&gt;Rails&lt;/h2&gt;

&lt;p&gt;It goes without saying, &lt;a href=&quot;http://rubyonrails.org/&quot;&gt;Rails&lt;/a&gt; is the main attraction. You will likely install multiple versions of Rails in each of your Ruby environments. Rails has strong support for selecting which Rails version and can be packaged via Bundler.&lt;/p&gt;

&lt;h2&gt;Git&lt;/h2&gt;

&lt;p&gt;For version control in the Ruby world, &lt;a href=&quot;http://git-scm.com&quot;&gt;Git&lt;/a&gt; is the best choice. The majority of open source code you will interact with in the Ruby community is in Git with most projects hosted on &lt;a href=&quot;http://github.com&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Editor&lt;/h2&gt;

&lt;p&gt;This is a very personal choice and I won't spend much on it here. I've used TextMate and MacVim in the past for Rails development. My current choice is &lt;a href=&quot;http://barebones.com/products/bbedit/&quot;&gt;BBEdit 10&lt;/a&gt; from BareBones. Ideally, your editor can easily find files by name, support a project view, and have solid Ruby syntax highlighting. In nearly 5 years of Ruby development, I've never wanted to use an IDE. You'll be fine without it.&lt;/p&gt;

&lt;h1&gt;Walkthrough&lt;/h1&gt;

&lt;p&gt;Given the above stack, here is a guided walkthrough of how to configure your machine. Ideally, get your computer into a clean configuration state. If you have experimented with tools like &lt;a href=&quot;http://beginrescueend.com/&quot;&gt;RVM&lt;/a&gt;, make sure you clean up. The best case is a clean install of Mac OS X Lion with Xcode 4.&lt;/p&gt;

&lt;p&gt;If you have previously installed RVM, remove all traces by issuing the following command:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;% rvm implode
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Ruby Environment&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Install Xcode 4 from Mac App Store&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clone rbenv&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  git clone git://github.com/sstephenson/rbenv.git ~/.rbenv  
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add rbenv and shims to &lt;code&gt;PATH&lt;/code&gt; and enable autocompletion&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  # Add following lines to .zshrc for zsh
  export PATH=&quot;$HOME/.rbenv/bin:$PATH&quot;
  eval &quot;$(rbenv init -)&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Restart your shell. rbenv should now be available.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clone and install ruby-build&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  % git clone git://github.com/sstephenson/ruby-build.git
  % cd ruby-build
  % sudo ./install.sh
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The ruby-build tool is installed to &lt;code&gt;/usr/local&lt;/code&gt;. A new &lt;code&gt;rbenv install&lt;/code&gt; command is available to install ruby builds to rbenv&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;List available versions of Ruby&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  % rbenv install
  usage: rbenv install VERSION
         rbenv install /path/to/definition

  Available versions:
    1.8.6-p420
    1.8.7-p249
    1.8.7-p352
    1.9.1-p378
    1.9.2-p290
    1.9.3-dev
    1.9.3-preview1
    jruby-1.6.3
    jruby-1.6.4
    rbx-1.2.4
    rbx-2.0.0-dev
    ree-1.8.7-2011.03
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install a Ruby version&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  % rbenv install 1.9.2-p290
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rebuild rbenv shim binaries. This must be done every time a new Ruby is installed. Also run if gems that have binaries are installed.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  % rbenv rehash
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set global Ruby if you want to use something other than the system Ruby as the default&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  % rbenv global 1.9.2-p290
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set local Ruby for a project. This will write the version to &lt;code&gt;.rbenv-version&lt;/code&gt; in the current directory. You can safely add &lt;code&gt;.rbenv-version&lt;/code&gt; to source control if all your developers are using rbenv.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  % cd my_project
  % rbenv local 1.9.2-p290
  % cat .rbenv-version
  1.9.2-p290
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Update rubygems and default gems&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  # Assumes that you are running under the Ruby version you want to update
  % gem update --system
  % gem update
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install bundler&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  % gem install bundler
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Configure a Ruby Application&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Create a Gemfile at root of your project&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  source &quot;http://rubygems.org&quot;
  gem &quot;jekyll&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install gems via bundler to a local &lt;code&gt;vendor&lt;/code&gt; directory. Create binary stubs so you can use &lt;code&gt;bin/command&lt;/code&gt; instead of &lt;code&gt;bundle exec&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  % bundle install --path vendor/bundle
  % bundle install --binstubs
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configure source control for bundler&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  % echo &quot;.bundle\nvendor/bundle/ruby\n&quot; &amp;gt;&amp;gt; .gitignore
  % git add Gemfile Gemfile.lock
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Be sure to use &lt;code&gt;bin/command&lt;/code&gt; for anything that is under Bundler's control. Examples include &lt;code&gt;bin/rake&lt;/code&gt; or &lt;code&gt;bin/rails&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;Configure Rails Application&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Install Rails&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  % RBENV_VERSION=1.9.2-p290 rbenv exec gem install rails
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create Rails app&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  % RBENV_VERSION=1.9.2-p290 rbenv exec rails new my_project
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set rbenv version and run local bundle install&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  % cd my_project
  % rbenv local 1.9.2-p290
  % bundle install --path vendor/bundle
  % bundle install --binstubs
  % echo &quot;vendor/bundle/ruby\n&quot; &amp;gt;&amp;gt; .gitignore
  % git init .
  % git add .
  % git commit -m &quot;Initial commit&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install pow. It is installed in &lt;code&gt;~/Library/Application Support/pow&lt;/code&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  % curl get.pow.cx | sh
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configure pow to work with rbenv. &lt;strong&gt;WARNING&lt;/strong&gt; - Use full path - don't use &lt;code&gt;~/myapp&lt;/code&gt;. Pow will fail!&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  % echo 'export PATH=&quot;/Users/andrew/.rbenv/shims:/Users/andrew/.rbenv/bin:$PATH&quot;' &amp;gt; ~/.powconfig
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add your app under pow by simply creating a symlink&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  % ln -s /path/to/myapp ~/.pow/myapp
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your Rails app should now be available under &lt;code&gt;http://myapp.dev&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h1&gt;Summary&lt;/h1&gt;

&lt;p&gt;This should get you up and running. The combination of rbenv and ruby-build give you a huge amount of flexibility for easily creating sandbox environments for your applications.&lt;/p&gt;
</content>
	</entry>
	<entry>
		<title>Cascadia Ruby Conference 2011</title>
		<author>
			<name>Andrew Carter</name>
		</author>
		<link type="text/html" href="http://ascarter.net/2011/08/03/cascadia-ruby-conference-2011.html" rel="alternate" />
		<updated>2011-08-03T09:25:30-07:00</updated>
		<id>tag:ascarter.net,2011-08-03:/2011/08/03/cascadia-ruby-conference-2011</id>
		<content type="html">&lt;p&gt;Last week I attended the &lt;a href=&quot;http://cascadiarubyconf.com/&quot;&gt;Cascadia Ruby 2011&lt;/a&gt; conference in Seattle. This event seems to be part of a growing trend of regional conferences. It's great to go to a conference like this without the time and expense of traveling.&lt;/p&gt;

&lt;p&gt;I enjoyed the conference very much. As always, some sessions were much better than others. Overall, the quality was high and the enthusiasm for the event was great. I'm not doing as much Ruby or Rails at work as I'd like (too much Python lately). Part of my motivation was to keep plugged into the Ruby community since that's where I want to be and what I want to work with.&lt;/p&gt;

&lt;p&gt;I was a little surprised at how many talks were not particularly technical. Frankly, it was a little uncomfortable how personal some of the stories were. If anything, it seems to point to some issues for developers overall that aren't being discussed. There were some lessons to learn but I wasn't in that mode and I think the impact of those presentations was a little lost on me.&lt;/p&gt;

&lt;p&gt;I'll highlight some of the talks I found particularly good. I've embedded the videos that are available (courtesy of &lt;a href=&quot;http://confreaks.net/&quot;&gt;Confreaks&lt;/a&gt;). I'll edit this post to add missing videos as the come available. If you want to see all the available talks, go to the &lt;a href=&quot;http://confreaks.net/events/cascadiaruby2011&quot;&gt;Cascadia event page&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;Shipping at the Speed of Life - Corey Donohoe&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://twitter.com/atmos&quot;&gt;Corey Donohoe&lt;/a&gt; of &lt;a href=&quot;http://github.com&quot;&gt;GitHub&lt;/a&gt; gave a very entertaining talk on techniques they use to manage a large number of deployments and constant churn. At the heart of it is automation. They have developed a smart agent called Hubot. Using tools like &lt;a href=&quot;http://campfirenow.com/&quot;&gt;Campfire&lt;/a&gt;, they are able to send conversational messages to get status, start deployments, and otherwise interact with their production systems.&lt;/p&gt;

&lt;p&gt;I've done things like this in the past with systems I've built (although no where near the scale of GitHub). I think the advantage is reducing human error by encapsulating work into consumable components. The danger of course is getting lost in building the automation tools. It's very seductive to keep adding more tasks to the automation handlers.&lt;/p&gt;

&lt;div class='video'&gt;
    &lt;div class='video-player'&gt;
    &lt;video id=&quot;html5-player&quot; width=&quot;640&quot; height=&quot;480&quot; controls=&quot;controls&quot; preload=&quot;none&quot; poster=&quot;http://confreaks.net/system/videos/images/608/preview/vlcsnap-2011-07-30-13h31m49s94.png?1312057979&quot;&gt;
        &lt;source src=&quot;http://confreaks.net/system/assets/datas/1726/original/608-cascadiaruby2011-shipping-at-the-speed-of-life-small.mp4&quot; type=&quot;video/mp4&quot; /&gt;
        Your browser does not support the video tag.
    &lt;/video&gt;
    &lt;/div&gt;
    &lt;div class='video-title'&gt;
    &lt;a href=&quot;http://confreaks.net/videos/608-cascadiaruby2011-shipping-at-the-speed-of-life?player=html5&quot;&gt;Shipping at the Speed of Life&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class='video-presenters'&gt;
    &lt;a href=&quot;http://confreaks.net/presenters/63-corey-donohoe&quot;&gt;Corey Donohoe&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class='video-note'&gt;
    Source: &lt;a href=&quot;http://confreaks.net&quot;&gt;Confreaks&lt;/a&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h1&gt;Confident Code - Avdi Grimm&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://twitter.com/avdi&quot;&gt;Avdi Grimm&lt;/a&gt; did a presentation &lt;strike&gt;inspired by his book &lt;a href=&quot;http://exceptionalruby.com&quot;&gt;Exceptional Ruby&lt;/a&gt;&lt;/strike&gt; on using assertive coding techniques. He included a &lt;a href=&quot;https://github.com/avdi/cowsay&quot;&gt;sample project&lt;/a&gt; that demonstrated many techniques for reducing code cruft like constantly checking for nil, using Decorator patterns, and applying pre-conditions. I'm definitely going to pick up his book. There were many great tips in the talk. I'm a big fan of streamlining error checking so that the code is of positive nature with negative cases filtered out.&lt;/p&gt;

&lt;div class='video'&gt;
    &lt;div class='video-player'&gt;
    &lt;video id=&quot;html5-player&quot; width=&quot;640&quot; height=&quot;480&quot; controls=&quot;controls&quot; preload=&quot;none&quot; poster=&quot;http://confreaks.net/system/videos/images/614/preview/vlcsnap-2011-08-02-20h59m34s58.png?1312346854&quot;&gt;
        &lt;source src=&quot;http://confreaks.net/system/assets/datas/1780/original/614-cascadiaruby2011-confident-code-small.mp4&quot; type=&quot;video/mp4&quot; /&gt;
        Your browser does not support the video tag.
    &lt;/video&gt;
    &lt;/div&gt;
    &lt;div class='video-title'&gt;
    &lt;a href=&quot;http://confreaks.net/videos/614-cascadiaruby2011-confident-code?player=html5&quot;&gt;Confident Code&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class='video-presenters'&gt;
    &lt;a href=&quot;http://confreaks.net/presenters/378-avdi-grimm&quot;&gt;Avdi Grimm&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class='video-note'&gt;
    Source: &lt;a href=&quot;http://confreaks.net&quot;&gt;Confreaks&lt;/a&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h1&gt;The Unix Chainsaw - Gary Bernhardt&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://twitter.com/garybernhardt&quot;&gt;Gary Bernhardt&lt;/a&gt; was probably the most entertaining talk of the conference. Gary's core premise - Unix hasn't killed anyone (yet). So you should learn it and love it. He gave several examples of the power of putting together shell actions. He also wisely addressed the notion that these are often &quot;half assed&quot; solutions. However, as he repeated over and over, it's the right part of the ass.&lt;/p&gt;

&lt;p&gt;Gary also announced he is now fulltime on a new company &lt;a href=&quot;http://destroyallsoftware.com/&quot;&gt;Destroy All Software&lt;/a&gt;. His company will feature screencasts and learning tools for Unix in the spirit of &lt;a href=&quot;http://railscasts.com&quot;&gt;Railscasts&lt;/a&gt; or &lt;a href=&quot;http://peepcode.com&quot;&gt;PeepCode&lt;/a&gt;. It should be a very useful resource.&lt;/p&gt;

&lt;div class='video'&gt;
    &lt;div class='video-player'&gt;
    &lt;video id=&quot;html5-player&quot; width=&quot;640&quot; height=&quot;480&quot; controls=&quot;controls&quot; preload=&quot;none&quot; poster=&quot;http://confreaks.net/system/videos/images/615/preview/vlcsnap-2011-08-02-21h00m17s170.png?1312344106&quot;&gt;
        &lt;source src=&quot;http://confreaks.net/system/assets/datas/1783/original/615-cascadiaruby2011-the-unix-chainsaw-small.mp4&quot; type=&quot;video/mp4&quot; /&gt;
        Your browser does not support the video tag.
    &lt;/video&gt;
    &lt;/div&gt;
    &lt;div class='video-title'&gt;
    &lt;a href=&quot;http://confreaks.net/videos/615-cascadiaruby2011-the-unix-chainsaw?player=html5&quot;&gt;The Unix Chainsaw&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class='video-presenters'&gt;
    &lt;a href=&quot;http://confreaks.net/presenters/429-gary-bernhardt&quot;&gt;Gary Bernhardt&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class='video-note'&gt;
    Source: &lt;a href=&quot;http://confreaks.net&quot;&gt;Confreaks&lt;/a&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h1&gt;Powerful (but Easy) Data Visualization with the Graph Gem - Aja Hammerly&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://twitter.com/kushali&quot;&gt;Aja Hammerly&lt;/a&gt; demonstrated how to use the graph gem with &lt;a href=&quot;http://www.graphviz.org/&quot;&gt;Graphviz&lt;/a&gt;. It was probably not something I would think I would be interested in. But between Aja's enthusiasm and all the cool things she did with it, I definitely want to look at using it. Aja showed how her company uses graphs to visualize workflows and states. Graphviz is about graphs in the computer science sense. The gem can generate DOT files (the format for Graphviz). The Ruby library was a little different in that it was a lot like the fixed function pipeline style of say OpenGL. But it makes sense.&lt;/p&gt;

&lt;p&gt;It's always very enlightening to see complex structures visually. I use graphical tools for Git frequently to better understand what is going on. It makes sense to use these for your own workflows as well.&lt;/p&gt;

&lt;div class='video'&gt;
    &lt;div class='video-player'&gt;
    &lt;video id=&quot;html5-player&quot; width=&quot;640&quot; height=&quot;480&quot; controls=&quot;controls&quot; preload=&quot;none&quot; poster=&quot;http://confreaks.net/system/videos/images/617/preview/vlcsnap-2011-08-05-00h49m20s232.png?1312530716&quot;&gt;
        &lt;source src=&quot;http://confreaks.net/system/assets/datas/1801/original/617-cascadiaruby2011-powerful-but-easy-data-visualization-with-the-graph-gem-small.mp4&quot; type=&quot;video/mp4&quot; /&gt;
        Your browser does not support the video tag.
    &lt;/video&gt;
    &lt;/div&gt;
    &lt;div class='video-title'&gt;
    &lt;a href=&quot;http://confreaks.net/videos/617-cascadiaruby2011-powerful-but-easy-data-visualization-with-the-graph-gem?player=html5&quot;&gt;Powerful (but Easy) Data Visualization with the Graph Gem&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class='video-presenters'&gt;
    Aja Hammerly
    &lt;/div&gt;
    &lt;div class='video-note'&gt;
    Source: &lt;a href=&quot;http://confreaks.net&quot;&gt;Confreaks&lt;/a&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h1&gt;Size Doesn't Matter, or: The ins and outs of Minitest - Ryan Davis&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://blog.zenspider.com/&quot;&gt;Ryan Davis&lt;/a&gt; presented a very nice tour of &lt;a href=&quot;http://bfts.rubyforge.org/minitest/&quot;&gt;Minitest&lt;/a&gt;. Let me be upfront - I dislike &lt;a href=&quot;http://rspec.info/&quot;&gt;RSpec&lt;/a&gt; and I &lt;strong&gt;hate&lt;/strong&gt; &lt;a href=&quot;http://cukes.info/&quot;&gt;Cucumber&lt;/a&gt;. Both are very &quot;magical&quot;. RSpec makes more sense to me but I don't find that the syntax is any more useful than xUnit. Cucumber is conceptually an interesting idea. But in practice, I've found it to be very difficult to build tests let alone understand what is going on.&lt;/p&gt;

&lt;p&gt;Ryan highlighted some of the same things in his talk. Minitest is very transparent. It's not hard to see what it is doing. As Ryan pointed out, the goal is to get the failures as close to your code as possible. I completely agree with that philosophy.&lt;/p&gt;

&lt;p&gt;Minitest does support RSpec-style BDD syntax so it seems poised to work equally well for xUnit and BDD testing. I like that it is (or going to be?) part of the Ruby distribution. I was a little confused on if I need to do anything to get it under Ruby 1.9.x/Rails 3.&lt;/p&gt;

&lt;p&gt;One other item that Ryan touched on was the use of mocks. He asserted that mocks should be a last resort and at the highest level possible. That seems like good advice. I try to use mocks for external services. One thing I would love to follow up on though is how to construct your code to support mocks in the correct sense. Do you design models that use a data source pattern so that you can use a mock service instead? Many times I've written my code as a wrapper to a service and backed myself into a corner when it came to mocking the service.&lt;/p&gt;

&lt;div class='video'&gt;
    &lt;div class='video-player'&gt;
    &lt;video id=&quot;html5-player&quot; width=&quot;640&quot; height=&quot;480&quot; controls=&quot;controls&quot; preload=&quot;none&quot; poster=&quot;http://confreaks.net/system/videos/images/618/preview/vlcsnap-2011-08-05-00h51m16s98.png?1312531034&quot;&gt;
        &lt;source src=&quot;http://confreaks.net/system/assets/datas/1804/original/618-cascadiaruby2011-size-doesn-t-matter-small.mp4&quot; type=&quot;video/mp4&quot; /&gt;
        Your browser does not support the video tag.
    &lt;/video&gt;
    &lt;/div&gt;
    &lt;div class='video-title'&gt;
    &lt;a href=&quot;http://confreaks.net/videos/618-cascadiaruby2011-size-doesn-t-matter?player=html5&quot;&gt;Size Doesn't Matter&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class='video-presenters'&gt;
    &lt;a href=&quot;http://confreaks.net/presenters/20-ryan-davis&quot;&gt;Ryan Davis&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class='video-note'&gt;
    Source: &lt;a href=&quot;http://confreaks.net&quot;&gt;Confreaks&lt;/a&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h1&gt;Code and Creativity - Geoffrey Grossenbach&lt;/h1&gt;

&lt;p&gt;&lt;a href=&quot;http://twitter.com/topfunky&quot;&gt;Geoffrey Grossenbach&lt;/a&gt; closed the conference with a presentation on coding related to creativity. I think Geoffrey approaches his craft more like an artist. Unstructured time allows information to be processed and ideas to form. He encouraged you to not feel like that time was wasted. Making connections needs space to form.&lt;/p&gt;

&lt;p&gt;There is a conflict between the artist and the engineer in our profession. So much of what we do is pure creativity. Yet it often feels like it is not encouraged. Geoffrey discussed sources of inspiration, managing the creative process, and embracing the ebb and flow of creativity.&lt;/p&gt;

&lt;p&gt;It's easy to listen to Geoffrey and think &quot;of course he can do that, he's got freedom I don't have&quot;. That may be true. But I think that the advice applies to anyone. Applying creative techniques as much as you can is entirely worthwhile. You might just have to be creative in embracing your creativity.&lt;/p&gt;

&lt;div class='video'&gt;
    &lt;div class='video-player'&gt;
    &lt;video id=&quot;html5-player&quot; width=&quot;640&quot; height=&quot;480&quot; controls=&quot;controls&quot; preload=&quot;none&quot; poster=&quot;http://confreaks.net/system/videos/images/621/preview/vlcsnap-2011-08-07-16h44m18s12.png?1312760843&quot;&gt;
        &lt;source src=&quot;http://confreaks.net/system/assets/datas/1839/original/621-cascadiaruby2011-code-and-creativity-small.mp4&quot; type=&quot;video/mp4&quot; /&gt;
        Your browser does not support the video tag.
    &lt;/video&gt;
    &lt;/div&gt;
    &lt;div class='video-title'&gt;
    &lt;a href=&quot;http://confreaks.net/videos/621-cascadiaruby2011-code-and-creativity?player=html5&quot;&gt;Code and Creativity&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class='video-presenters'&gt;
    &lt;a href=&quot;http://confreaks.net/presenters/431-geoffrey-grossenbach&quot;&gt;Geoffrey Grossenbach&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class='video-note'&gt;
    Source: &lt;a href=&quot;http://confreaks.net&quot;&gt;Confreaks&lt;/a&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;hr /&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Updated 08.04.2011 21:15&lt;/em&gt;&lt;/strong&gt; -- Added Confident Code and The Unix Chainsaw video links.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Updated 08.04.2011 22:25&lt;/em&gt;&lt;/strong&gt; -- Confident Code is not based on the Exceptional Ruby book.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Updated 08.05.2011 13:49&lt;/em&gt;&lt;/strong&gt; -- Added Easy Data Visualization with Graph and Size Doesn't Matter video links.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;em&gt;Updated 08.08.2011 08:06&lt;/em&gt;&lt;/strong&gt; -- Added Code and Creativity video links.&lt;/li&gt;
&lt;/ul&gt;

</content>
	</entry>
</feed>
