<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SmartLogic Solutions Blog &#187; Conferences</title>
	<atom:link href="http://blog.smartlogicsolutions.com/category/events/events-conferences/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.smartlogicsolutions.com</link>
	<description>News and updates from the people at SmartLogic Solutions</description>
	<lastBuildDate>Tue, 30 Nov 2010 21:39:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Nick&#8217;s Highlights from Windy City Rails</title>
		<link>http://blog.smartlogicsolutions.com/2010/09/11/nicks-highlights-from-windy-city-rails/</link>
		<comments>http://blog.smartlogicsolutions.com/2010/09/11/nicks-highlights-from-windy-city-rails/#comments</comments>
		<pubDate>Sat, 11 Sep 2010 23:07:21 +0000</pubDate>
		<dc:creator>Nick Gauthier</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Nick Gauthier]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.smartlogicsolutions.com/?p=972</guid>
		<description><![CDATA[I attended and spoke at Windy City Rails. I tried to take more notes this time. Out of 6 talks an lightning talks, I have ~500 lines of notes. Enjoy!. Jake Scrugges &#8211; Metrics Based Refactoring: What To Do With Your Code Metrics Metric-Fu is a ruby metric bundle rake metrics:all => generates a master [...]]]></description>
			<content:encoded><![CDATA[<p>I attended and spoke at Windy City Rails. I tried to take more notes this time. Out of 6 talks an lightning talks, I have ~500 lines of notes. Enjoy!.<br />
<span id="more-972"></span></p>
<h2>Jake Scrugges &#8211; Metrics Based Refactoring: What To Do With Your Code Metrics</h2>
<ul>
<li>Metric-Fu is a ruby metric bundle</li>
<li>rake metrics:all<br />
=> generates a master report of a bunch of metrics</li>
<li>There are a lot of metrics, where do you start?</li>
<li>Everyone wants to refactor, but where do you start?</li>
<li>Flay
<ul>
<li>Analyzes code duplication</li>
<li>Finds violations of DRY</li>
<li>Solutions: Extract Method, Modules, etc.</li>
<li>Single Responsibility Principle</li>
</ul>
</li>
<li>Churn
<ul>
<li>Looks through your commits to see what stuff changes the most</li>
<li>Files that change the most are &#8220;God Objects&#8221; &#8211; stuff that does everything</li>
<li>Any time anything changes, the God Object has to change</li>
<li>Bad smell, should be smaller objects with greater focus</li>
<li>Tells you where your most volatile code is</li>
</ul>
</li>
<li>Rcov
<ul>
<li>Main reason metric-fu blows up</li>
<li>Problem is, metric-fu is mostly static analysis, but rcov is running the code</li>
<li>Rcov runs the test suite, which is sometimes hard to get working</li>
<li>Rcov makes sure your coverage is good where it needs to be (most complicated and volatile code)</li>
<li>Writing tests for the sake of coverage is harmful</li>
<li>Write tests when you are in the code and you understand it (not a week later, &#8220;let&#8217;s write some tests!&#8221;)</li>
</ul>
</li>
<li>Flog and Saikuro
<ul>
<li>Both are complexity management</li>
<li>Saikuro (pronounced cyclo as in cyclomatic complexity) measures cyclomatic complexity</li>
<li>Saikuro = number of paths through the code, and cyclomatic complexity is exponential in growth</li>
<li>Flow looks at branching, but uses ABC</li>
<li>Assignments</li>
<li>Branches</li>
<li>Calls</li>
<li>Flog generates a score based on ABC</li>
<li>&lt; 20 is good, 20-40 is a grey area, 40-60 is a warning, 60+ is FIX IT!</li>
<li>How do you fix it?</li>
<li>Extract method</li>
<li>Missing object (need a new class to handle this behavior)</li>
<li>If that doesn&#8217;t work, re-architect</li>
<li>Seriously, you don&#8217;t need complicated methods in <em>any</em> app</li>
<li>Director method: calls a couple of sub methods, doesn&#8217;t do much actual work</li>
<li>Take care not to over-factor. If you are a guest in the code, just clean it<br />
as necessary. You don&#8217;t need to fully re-organize.</li>
</ul>
</li>
<li>Reek, Roodi, and RailsBestPractices
<ul>
<li>Reek: if it could possibly be a problem, I&#8217;ll tell you</li>
<li>Roodi: only if I&#8217;m really sure, I&#8217;ll tell you</li>
<li>RailsBestPractices: just rails stuff</li>
<li>All parse the code and look for design problems</li>
<li>Very ambitious! Code trying to understand what you&#8217;re trying to do</li>
<li>Awesome because you can look up the definition of the problem and see how to fix it.</li>
<li>Trouble because it&#8217;s a machine trying to identify human problems, which is difficult</li>
</ul>
</li>
<li>Continuous Integration
<ul>
<li>Metric-fu on your code</li>
<li>Most CI&#8217;s allow you to have artifacts for a build</li>
<li>J.S. runs his nightly at midnight</li>
</ul>
</li>
<li>Pay attention to trends over time
<ul>
<li>Is your refactoring making things better?</li>
<li>Did the last feature skyrocket flay scores?</li>
<li>How is the influx of new developers affecting the code quality</li>
<li>Did the highly paid consultants produce good work?</li>
</ul>
</li>
<li>Take metrics as advice (not law)
<ul>
<li>It is a tool, use it intelligently (like a GPS system)</li>
<li>Don&#8217;t let a manager get in charge of this</li>
<li>Up to you and your team to establish conventions and stick to them</li>
</ul>
</li>
<li>Coming soon
<ul>
<li>Fail the build on bad metrics</li>
<li>Resisted for a while because there may be false negatives</li>
<li>Failing a build is a serious incident, needs to mean something</li>
<li>Metrics are not as definitive as tests</li>
</ul>
</li>
<li>Coming later (and/or soonish)
<ul>
<li>Meta metrics</li>
<li>Imagine a report that flagged a method as having high churn, poor coverage, and high complexity</li>
<li>This method is trouble waiting to happen</li>
<li>No so easy to write this feature</li>
<li>J.S. needs help!</li>
<li>Need to re-architect the system to understand classes and methods, not just lines of code</li>
</ul>
</li>
<li>Questions
<ul>
<li>Can you use other source control?</li>
<li>I think so, check out the churn gem</li>
<li>How is the performance?</li>
<li>Not great, but you only have to run it once a day</li>
<li>If you don&#8217;t have test coverage, now what?</li>
<li>start w/ rehacktoring (refactoring w/o tests)</li>
<li>do that until you understand it enough to write tests</li>
<li>write tests!</li>
<li>What about front-end heavy stuff? Javascript?</li>
<li>No idea! These are all ruby tools. Maybe there are JS tools out there?</li>
<li>You should test your javascript. Sapphire is the &#8220;new hot thing&#8221;.</li>
</ul>
</li>
</ul>
<h2>John McCaffrey &#8211; Analyzing and Improving the Performance of your Rails Application</h2>
<ul>
<li><a href="http://railsperformance.blogspot.com">http://railsperformance.blogspot.com</a></li>
<li>O(n) queries is bad</li>
<li>Code he refactored went from 2811 to 17 queries per action</li>
<li>Leverage: small amounts of work for large amounts of value</li>
<li>Delay directly correlates w/ loss of revenue
<ul>
<li>Bing: 1s = 2.8% decrease, 2s = 4.3%</li>
<li>Google: users that had a delay for a short period of time, actually searched less even after the delay was removed.</li>
<li>Yahoo: added a 400ms delay and users bailed before the pages even loaded</li>
<li>Shopzilla: reduced delay from 6s to 1.2s.</li>
<li>Conversion rate rate up 7-12%</li>
<li>Saved infrastructure costs by 50%</li>
<li>Release cost decreased</li>
</ul>
</li>
<li>Fred Wilson (VC): Speed is #1 of the 10 golden principles of successful web apps</li>
<li>So where to begin?</li>
<li>Anti-patterns:
<ul>
<li>&#8220;Scalability can be sprinkled on later&#8221;</li>
<li>Guessing, not testing</li>
<li>Ad-hoc, unstructured</li>
</ul>
</li>
<li>&#8220;Premature optimization is the root of all evil&#8221; &#8211; Donald Knuth</li>
<li>&#8220;If you can not measure it, you can not improve it&#8221; &#8211; Lord Kelvin</li>
<li>Measure</li>
<li>Repeatable tests</li>
<li>Isolate your changes</li>
<li>(Scientific method!)</li>
<li>Visibility is important for working on a team</li>
<li>Response time = latency</li>
<li>Requests per second = throughput</li>
<li>Load, utilization, scalability, throughput, concurrency, capacity</li>
<li>Performance != Scalability
<ul>
<li>Performance = response time</li>
<li>Scalability = ability to grow to more requests</li>
<li>Adding more workers will not improve latency</li>
</ul>
</li>
<li>Twitter: dynamic html = 250ms, but 3369ms is static assets
<ul>
<li>Don&#8217;t waste your time on the 250ms, go for the big slow chunks</li>
</ul>
</li>
<li>Walmart: 3 redirects, 388ms dynamic, 4580ms static content</li>
<li>Use YSlow
<ul>
<li>Do less work</li>
<li>Distribute content</li>
<li>Cache</li>
<li>Compress</li>
<li>Fight queued work</li>
</ul>
</li>
<li>Google page speed
<ul>
<li>similar to yslow</li>
<li>includes paint events</li>
<li>separates out ads and trackers from your site</li>
<li>&#8220;how fast it feels&#8221;</li>
<li>If the web is faster, they make more money</li>
</ul>
</li>
<li><a href="http://www.showslow.com/">http://www.showslow.com/</a> tracks your site (or competitors, will check every 24h)</li>
<li><a href="http://webpagetest.com/">http://webpagetest.com/</a> runs page speed and yslow for you, and show progressive rendering</li>
<li><a href="http://gtmetrix.org">http://gtmetrix.org</a></li>
<li><a href="http://zoompf.com">http://zoompf.com</a> </li>
<li><a href="http://loadimpact.com">http://loadimpact.com</a> </li>
<li><a href="http://gomez.com">http://gomez.com</a> </li>
<li>See Greg Pollack&#8217;s Scaling Rails series</li>
<li>Majority of the Alexa top 1,000 sites don&#8217;t do even the easiest things
<ul>
<li>42% don&#8217;t gzip</li>
<li>44% >2 css files</li>
<li>56% serve css from a cookied domain</li>
<li>62% don&#8217;t minify</li>
</ul>
</li>
<li>Gzip is the simplest and smartest thing you can do</li>
<li>Minify js
<ul>
<li>jsmin, yuicompressor, sprockets</li>
<li>Asset packager</li>
<li>javascript_include_tag :cache => &#8220;cache/all&#8221;</li>
</ul>
</li>
<li>Sprited images</li>
<li>Spriteme.org</li>
<li>JqueryUI gives you sprited images</li>
<li>Image optimization
<ul>
<li>Smush.it</li>
</ul>
</li>
<li>Expires and browser caching</li>
<li>Set a far-future expire to tell the browser it can cache it</li>
<li>Combined with a query string lets you version a file</li>
<li>Rails Caching: make the static parts of your dynamic content cached</li>
<li>railslab.newrelic.com</li>
<li>request-log-analyzer</li>
<li>Rack::Bug</li>
<li>NewRelic</li>
<li>Scout</li>
<li>Get on the heroku mailing list / blog to learn about scaling issues</li>
<li>Apache bench</li>
<li>httperf</li>
<li>jmeter</li>
<li>Database issues
<ul>
<li>Bad queries</li>
<li>Not utilizing explain</li>
<li>Inadequate indexes</li>
<li>N+1 queries</li>
<li>Selecting more data than needed</li>
<li>Inconsistent queries for the same data</li>
<li><a href="http://github.com/dsboulder/query_reviewer/">http://github.com/dsboulder/query_reviewer/</a> </li>
</ul>
</li>
<li><a href="http://github.com/eladmeidar/rails_indexes">http://github.com/eladmeidar/rails_indexes</a>
<ul>
<li>rake tasks to find missing indexes</li>
<li>columns that need to be sorted</li>
<li>lookup fields</li>
<li>columns used in a group-by</li>
</ul>
</li>
<li><a href="http://github.com/samdanavia/ambitions_query_indexer">http://github.com/samdanavia/ambitions_query_indexer</a> haven&#8217;t tried it yet, check it out</li>
<li><a href="http://github.com/sdsykes/slim_scrooge">http://github.com/sdsykes/slim_scrooge</a> Instruments your code and looks for bad &#8220;select *&#8221;</li>
<li>Aman Gupta</li>
<li>Joe Damato</li>
<li><a href="http://timetobleed.com/">http://timetobleed.com/</a></li>
<li><a href="http://memprof.com/">http://memprof.com/</a> </li>
<li>yajl-ruby for C++ extension json parsing</li>
<li>Ruby 1.9 for massive performance</li>
</ul>
<h2>Kevin Gisi &#8211; It&#8217;s time to repay your debt</h2>
<ul>
<li>We&#8217;re leveraging an awesome framework and language, and it&#8217;s time to give back</li>
<li>Releasing gems is easy</li>
<li>(Showing some code to refactor out into a gem)</li>
<li>Ruby community has an incredible (and overwhelming) amount of choice</li>
<li>Choice is good and important</li>
<li>There exist incomplete and unstable solutions</li>
<li>You should release a &#8220;product&#8221;, not an incomplete solution
<ul>
<li>Aesthetics</li>
<li>Utility</li>
</ul>
</li>
<li>Agile: Do the bare minimum to get something delivered
<ul>
<li>(Nick: isn&#8217;t it to embrace change?)</li>
</ul>
</li>
<li>Delivered: coded, deployed, supported, tested, extensible, usable by the client</li>
<li>Treat open source libraries and client deliverables</li>
<li>The Lazy programmer&#8217;s manifesto
<ul>
<li>I want to write code once</li>
<li>I want to be able to read code w/o docs</li>
<li>I want to be able to rely on libraries</li>
<li>I wants to use adaptable solutions for numerous problems</li>
<li>I want to always be working on something new</li>
</ul>
</li>
<li>Idea filtering
<ul>
<li>To share</li>
<li>business value</li>
<li>practical use</li>
<li>To learn</li>
<li>no requirements</li>
<li>don&#8217;t post it publicly (community does not value your stupid web framework)</li>
</ul>
</li>
<li>Testing
<ul>
<li>We all say we do it (it&#8217;s time to start)</li>
<li>RSpec and Cucumber are easy to set up</li>
<li>Design verification tool</li>
</ul>
</li>
<li>(really turning into a rant at this point)</li>
<li>Extensible
<ul>
<li>Write clean code (don&#8217;t post spikes)</li>
<li>Peer review</li>
<li>Follow the Unix philosophy: do one thing really well</li>
<li>Leverage other gems</li>
</ul>
</li>
<li>Documentation
<ul>
<li>Who&#8217;s looking at your code?</li>
<li>RDoc, YARD, etc</li>
<li>Getting Started</li>
<li>Blog post!</li>
</ul>
</li>
<li>Supported
<ul>
<li>If you can&#8217;t maintain your app, don&#8217;t post it</li>
</ul>
</li>
<li>Be Honest
<ul>
<li>Hand over the reigns if you can&#8217;t support it</li>
<li>Be a net positive</li>
<li>Don&#8217;t announce things that aren&#8217;t done</li>
</ul>
</li>
<li>If you have to
<ul>
<li>Put it in a limited venue</li>
<li>Add a disclaimer</li>
</ul>
</li>
<li>The internet doesn&#8217;t filter bad ideas very well
<ul>
<li>It does make things hard to do if they don&#8217;t work well</li>
<li>Having enough eyes</li>
</ul>
</li>
<li>&#8220;Ruby treats you like a grown up programmer&#8221; &#8211; Matz</li>
<li>What happens when grown-ups have too much fun?</li>
<li>How to be a good parent
<ul>
<li>Avoid sensory overload</li>
<li>Sometimes spoon feed</li>
<li>Remember you&#8217;re used to the status quo</li>
<li>Be a mentor <a href="http://railsmentors.org">http://railsmentors.org</a> </li>
<li>Provide solutions to problems, not blocks of code</li>
</ul>
</li>
<li>(I wish this was a &#8220;how to do a good job&#8221; and not &#8220;you suck, stop sucking&#8221;. I think he wants to be the king of the rubygems app store)</li>
</ul>
<h2>Lightning Talks</h2>
<h3>Micah Martin &#8211; Limelight</h3>
<ul>
<li>Tool to build GUIs in ruby</li>
<li>Built a gui calculator in 5 minutes</li>
</ul>
<h3>Sean Scofield &#8211; The Awesome Power of Rails Engines</h3>
<ul>
<li>Engines make it easy for frameworks to be built on top of rails</li>
<li>Engine is a complete application that can provide the stuff rails apps provide</li>
<li>app directory is auto loaded</li>
<li>You can supply models, views, controllers in your engine</li>
<li>You can override locale by dropping it in app</li>
<li>Engines extending engines, for example Spree</li>
<li>Bundler ties it all together</li>
</ul>
<h3>Mike Buselli &#8211; Brush::Pipeline</h3>
<ul>
<li>Running external OS commands</li>
<li>sys
<ul>
<li>lower level, more convenient for specific takss</li>
<li>chaining commands</li>
</ul>
</li>
<li>pipeline
<ul>
<li>better at chaining commands</li>
<li>pipeline ['head', 'README'], ['tail', '-n2']</li>
<li>Each part of the pipeline can run in different directories</li>
<li>stderr and stdout redirection</li>
<li>argv[0] renaming</li>
<li>restrict access to open files</li>
<li>Works great on POSIX including cygwin</li>
</ul>
</li>
</ul>
<h3>Chris Hallendy and Nick Lewis &#8211; Realtime Apps</h3>
<ul>
<li>Demo of node.js &lt;-> Redis &lt;-> Rails</li>
</ul>
<h3>Joe Fiorini (sp?) &#8211; Web Katas</h3>
<ul>
<li>Problem: web developers don&#8217;t know http</li>
<li>Rails is big and awesome, but it&#8217;s hard to troubleshoot</li>
<li>It allows us to ignore how http works.</li>
<li>Code Katas <a href="http://bit.ly/codekatas">http://bit.ly/codekatas</a> </li>
<li>No-framework webapp development (Rack) to learn how http cookies work</li>
<li>More Katas
<ul>
<li>Auth token</li>
<li>See Other response status</li>
<li>Move permanently</li>
<li>Session state handling</li>
<li><a href="http://bit.ly/webkatas">http://bit.ly/webkatas</a></li>
</ul>
</li>
</ul>
<h3>Jim Remsik &#8211; Improv: Comedy to Coding</h3>
<ul>
<li>Programming is a people problem</li>
<li>You write code for other people</li>
<li>We use ruby because it is expressive and easy for others to read and maintain</li>
<li>Improv after-hours at hashrock</li>
<li>Yes-and, drop your preconcieved notions at the door</li>
<li>Support your team</li>
</ul>
<h3>Malcolm Arnold &#8211; Ruby Nuby</h3>
<ul>
<li>Brand new social movement dedicated to teaching ruby on rails to disadvantaged youths</li>
<li>Maximize social good by spreading ruby</li>
</ul>
<h3>Praveen Alavilli &#8211; Monetizing your apps</h3>
<ul>
<li>&#8220;chase your dream, money will follow&#8221;</li>
<li>Still a mystery to a lot of people how the money follows</li>
<li>Indirect
<ul>
<li>advertising</li>
<li>offers</li>
<li>referalls</li>
</ul>
</li>
<li>Direct
<ul>
<li>e/m-commerce</li>
<li>freemium</li>
<li>causium (donate money to a cause)</li>
<li>pay as you use</li>
<li>free to use pay for service</li>
<li>premium content</li>
<li>digital goods</li>
<li>virtual currency</li>
<li>subscriptions</li>
</ul>
</li>
<li>Challenge: apply these models to your use cases</li>
<li>Gateway (i.e. Payflow, Authorize.net)</li>
<li>Checkout (Google, PayPal, Amazon)</li>
<li>Platform (PayPal, Amazon)</li>
<li>Also services on top (Chargify, Spreedly, Freshbooks)</li>
<li>Choose one that works the best</li>
<li>Your users need to be able to pay somehow, should not be hard to pay</li>
<li>PCI compliance for charging directly</li>
<li>secure and privacy enabling</li>
<li>Adaptive Payments API</li>
</ul>
<h2>Ryan Singer &#8211; Weaving Design and Development</h2>
<ul>
<li>UI Design and Programming, working together</li>
<li>(telling a story about working with a startup and doing design for them)</li>
<li>Designer says &#8220;let&#8217;s change this button&#8221; while pairing with dev, dev makes the change instantly</li>
<li>XP is focused on delivery</li>
<li>In XP, feedback loops are not as important</li>
<li>Feedback can be difficult if you are purely focused on delivery</li>
<li>Shared code base, code runs on designers computers</li>
<li>Avoid the designer w/ folders full of PSDs and static content
<ul>
<li>Becomes a spec, then the dev has to implement it</li>
</ul>
</li>
<li>Static files are like spikes, for exploration and experimentation</li>
<li>Actual changes need to keep up with the codebase</li>
<li>At 37Signals, no sync problem, because the designers are working in the code base</li>
<li>HAML and Mustache are out, because designers can&#8217;t deal with them</li>
<li>Templates with logic</li>
<li>Avoid helpers writing HTML and presenters writing html</li>
<li>Start together, don&#8217;t bring the designers in late, or the developers in late</li>
<li>Architecture before design leaves UX to too late in the process</li>
<li>Designers starting everything before programmers start, it may be impossible or impractical to code</li>
<li>P&amp;D decide on domain language and basic model</li>
<li>P stub models, controllers, routes, and templates</li>
<li>D few days lead on designing and building templates</li>
<li>Simultaneous
<ul>
<li>P design and build models, controllers, routes, helpers, dynamic templates</li>
<li>D design and build templates and helpers</li>
<li>Repeat this process continuously</li>
</ul>
</li>
<li>Share the codebase</li>
<li>All views are in templates w/ logic (ERB or similar, not HAML)</li>
<li>Start together for domain language and models for communication</li>
<li>constantly committing to the same codebase</li>
<li>Train designers in git and ruby and other things</li>
<li>Designers are motivated to learn so they can make changes directly: it gives them more power</li>
</ul>
<h2>Nick Gauthier &#8211; Grease your Suite</h2>
<h2>Les Hill and Jim Remsik &#8211; Sustainably Awesome</h2>
<ul>
<li>Comfortable and productive environment is crucial</li>
<li>sustainable pace is important. 40h weeks.</li>
<li>cargo culting</li>
<li>Pet friendly</li>
<li>The point is not to do what we do, but to recognize our goals. Don&#8217;t cargo cult these tips!</li>
<li>Casual</li>
<li>No Micromanagement</li>
<li>Don&#8217;t penny pinch</li>
<li>Keep a budget and spend it wisely</li>
<li>$400 per week grocery budget</li>
<li>No death marches</li>
<li>No meetings (except daily standup and project standup and monthly company status meeting)</li>
<li>No hierarchy</li>
<li>No future-proofing (software and organizational practices)</li>
<li>What do you do when a developer rm -rfs?
<ul>
<li>No sudo for devs?</li>
<li>3 manager approval before running a script?</li>
<li>Develop a backup solution and a common machine image?</li>
</ul>
</li>
<li>&#8220;Process is an embedded reaction to prior stupidity&#8221; &#8211; Clay Shirky</li>
<li>A project came along that needed work done ASAP</li>
<li>Crafted an MVP and built it without changing their process</li>
<li>The MVP did not overlap with their mockups and specs</li>
<li>Started with story cards and team boards</li>
<li>Moved to pivotal tracker</li>
<li>Tim Pope had a suggestion about how to work stories in pivotal that worked really well</li>
<li>Always open to try new things and experiment with new processes</li>
<li>Enjoy your work</li>
<li>Don&#8217;t hire people you don&#8217;t like, or without passion</li>
<li>Hire smart people that get things done</li>
<li>Must be a great cultural fit</li>
<li>Hiring
<ul>
<li>phone screening</li>
<li>week long &#8220;test drive&#8221;</li>
<li>gems you use are important</li>
<li>editors you use are important</li>
<li>test driven (and test-first) style</li>
<li>hang out after hours to check for a cultural fit</li>
</ul>
</li>
<li>&#8220;If I&#8217;m not saying &#8216;hell yeah!&#8217; about something, then I say no&#8221; &#8211; Derek Sivers</li>
<li>Firing: due to lack of communication or mistake, probably on both sides</li>
<li>Fire fast, but with compassion</li>
<li>Approach building a team the same way you build software</li>
</ul>
<h2>Yehuda Katz &#8211; Rails 3</h2>
<ul>
<li>Rails core family is getting bigger</li>
<li>Rails 2 was very intertwined</li>
<li>Broke things up cleanly</li>
<li>Instead of Railties being a big glue layer w/ initialization stack, it became a small part or Rails 3 and specifies the framework for applications and engines</li>
<li>Engines are special plugins now that inherit from Railties</li>
<li>Applications inherit from Engines</li>
<li>Railtie lets you add features to rails</li>
<li>Railties provide a series of Hooks</li>
<li>Inheriting from Railtie doesn&#8217;t do anything, but it has lots of functionality</li>
<li>Railtie lets you configure the application, such as pull in generators</li>
<li>Rake Tasks are another Railtie Hook
<ul>
<li>Extra stuff you want to have happen in rake, and not on boot<br />
rake_tasks do<br />
load &#8220;my_stuff/my_tasks.rake&#8221;<br />
end</li>
</ul>
</li>
<li>before_configuration hook = right inside Rails::Application, before user stuff happens, but you know about rails root and stuff.</li>
<li>config.to_prepare : in dev, run every time, in production, run once (i.e. compass template compilation)</li>
<li>Framework loading: ActiveSupport.on_load = i.e. when action mailer loads, monkey patch in some code. Then you don&#8217;t have to try to detect ActionMailer, you just say, when it loads do stuff.</li>
<li>Don&#8217;t do if(defined) because it depends on order</li>
<li>Decouple via Instrumentation</li>
<li>ActiveSupport::Notifications.instrument(&#8220;receive.action_mailer&#8221;) do |payload|; #callback; end</li>
<li>Worth Noting: we worked really hard making things mostly backwards compatible</li>
<li>The old way may appear to work, even if it doesn&#8217;t</li>
<li>AbstractController is decoupled from ActionController</li>
<li>ActionDispatch = Rack++</li>
<li>ActiveModel lets other persistence engines connect to ActionController. Only need to support ~5 methods</li>
<li>Tight Integration without Coupling</li>
<li>Integration first, decouple later</li>
<li>Migrating:
<ol>
<li>Install Rails 2.3.9.</li>
<li>bundler</li>
<li>rails_xss</li>
<li>Deprecations &#8211; get the count to 0</li>
<li>Upgrade</li>
<li>Deprecations again!</li>
</ol>
</li>
<li>Helpers should call partials, not generate html</li>
<li>Rails 3.1: We&#8217;re not burned out!
<ul>
<li>Engines</li>
<li>@drogus did all the engine work</li>
<li>Engine Migrations</li>
<li>Static assets (w/o copying). Leave it in the engine, and Rack::Static will find it</li>
<li>Self-contained engine</li>
<li>Built-in http caching, to get away from filesystem caching</li>
<li>fresh_when? calculates an etag from the post and returns 304 if not fresh</li>
<li>caching at the browser layer</li>
<li>etag can be based on an AR object</li>
<li>If you have Varnish, you can turn off Rack::Cache and fresh_when will be built in</li>
<li>This also means that when you turn on Akamai, you already have all the code that makes it work well</li>
<li>Enables Edge-Cached SCSS</li>
<li>Rack::Cache is like Memcache, but uses HTTP semantics</li>
<li>Assets </li>
<li>ERB == SCSS (I have content that needs to be processed before it hits the browser) </li>
<li>Solution: build in compilation pipeline</li>
<li>app.css.scss (like app.html.erb)</li>
<li>posts/index.css.scss</li>
<li>Treats CSS the same as HTML for templating</li>
<li>SCSS template handler => http response => rack::cache</li>
<li>It just works w/ varnish and the like</li>
<li>Spriting</li>
<li>Compass and lemonade are merging w/ a new sprite api</li>
<li>Put all your images in images/sprites/ 1, 2, 3, 4, .png</li>
<li>Lets you include all the images as a sprite</li>
<li>Gives you a bunch of css classes to use the sprites</li>
<li>SCSS can take CSS, and then add stuff in</li>
<li>You don&#8217;t need imagemagick, there is a pure ruby PNG spriting library</li>
<li>AutoFlush &#8211; it&#8217;s cool, read his blog, running out of time</li>
<li>flush content to the browser as it is rendering</li>
<li>Tradeoffs you have to deal with, like exceptions</li>
<li>Browser can be working on your CSS while you are doing SQL queries</li>
<li>Keep content_for at the top of the template</li>
<li>Exceptron</li>
<li>Stolen from merb</li>
<li>ExceptionsController to render and take actions when exceptions happen</li>
<li>Performance</li>
<li>We did pretty well in 3.0, definitely some trouble spots</li>
<li>More mechanisms for performance</li>
<li>Big Arel rewrite for 3.1</li>
<li>Possible to get to 2x faster over 3.0</li>
</ul>
</li>
</ul>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://blog.smartlogicsolutions.com/2010/09/07/nicks-highlights-from-ruby-hoedown/" rel="bookmark" class="crp_title">Nick&#8217;s Highlights from Ruby Hoedown</a></li><li><a href="http://blog.smartlogicsolutions.com/2009/11/23/web-2-0-expo-nyc-wrap-up/" rel="bookmark" class="crp_title">Web 2.0 Expo NYC Wrap Up</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/06/11/multithreading-in-ruby-on-rails/" rel="bookmark" class="crp_title">Multithreading in Ruby on Rails</a></li><li><a href="http://blog.smartlogicsolutions.com/2009/03/13/slow-actions-in-rails-projects/" rel="bookmark" class="crp_title">Slow Actions in Rails Projects</a></li><li><a href="http://blog.smartlogicsolutions.com/2010/02/01/setting-up-ubuntu-9-10-for-ruby-on-rails-development/" rel="bookmark" class="crp_title">Setting Up Ubuntu 9.10 for Ruby On Rails Development</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.smartlogicsolutions.com/2010/09/11/nicks-highlights-from-windy-city-rails/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nick&#8217;s Highlights from Ruby Hoedown</title>
		<link>http://blog.smartlogicsolutions.com/2010/09/07/nicks-highlights-from-ruby-hoedown/</link>
		<comments>http://blog.smartlogicsolutions.com/2010/09/07/nicks-highlights-from-ruby-hoedown/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 13:11:46 +0000</pubDate>
		<dc:creator>Nick Gauthier</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Nick Gauthier]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.smartlogicsolutions.com/?p=963</guid>
		<description><![CDATA[I attended and spoke at Ruby Hoedown 2010. Below are my notes from the conference. Day One (Nuby Hoedown) David A. Black &#8211; The Well-Grounded Nuby Seven key points, with code examples Every expression evaluates to an object if statements and class definitions return objects operations are messages (==, +, etc) methods are messages (to_s) [...]]]></description>
			<content:encoded><![CDATA[<p>I attended and spoke at Ruby Hoedown 2010. Below are my notes from the conference.</p>
<p><span id="more-963"></span></p>
<h2>Day One (Nuby Hoedown)</h2>
<h3>David A. Black &#8211; The Well-Grounded Nuby</h3>
<ul>
<li>Seven key points, with code examples</li>
<li>Every expression evaluates to an object</li>
<li>if statements and class definitions return objects</li>
<li>operations are messages (==, +, etc)</li>
<li>methods are messages (to_s)</li>
<li>a[2] is equivalent to a.<a href="2"></a></li>
<li>case is really if, elsif, etc, which is really x1.===(x0), x2.===(x0), etc.</li>
<li>String === String is false! Classes define === as meaning &#8220;is the argument an instance of me&#8221;</li>
<li>Objects have lookup paths they use to find the method among their associated modules and classes</li>
<li>Super means keep searching for the next method up. Not necessarily the super class, could just be<br />
in a module that was included the most recently.</li>
<li>instance.extend(module) will include the module into that instance, not the entire class</li>
<li>every object has a singleton class that represents the instance. So the above in actually including<br />
the module into the instance&#8217;s singleton class.</li>
<li>there is always a &#8220;self&#8221;. defaults to main:Object</li>
</ul>
<h3>Kevin W. Gisi &#8211; Dynamic Ruby for Nubies</h3>
<ul>
<li>DSLs help bridge the gap between an idea and code, as a layer of abstraction</li>
<li>I got lost :-(</li>
</ul>
<h3>Lunch</h3>
<ul>
<li>Om nom nom</li>
</ul>
<h3>Nick Gauthier &#8211; The Six Ws of Testing</h3>
<ul>
<li>I think it went well. Very low on technical content but many Nubies came to talk to me afterward and said they enjoyed it. I&#8217;m sure I bored the technical folks to tears. But hey, it&#8217;s the Nuby Hoedown!</li>
</ul>
<h3>Matt Yoho &#8211; Gem Authoring and Deployment</h3>
<ul>
<li>&#8220;require&#8221; loads code once, it is smart</li>
<li>&#8220;load&#8221; loads the code without doing any checks</li>
<li>You should not &#8220;require &#8216;rubygems&#8217;&#8221; it should already be on the load path</li>
<li>Don&#8217;t use jeweler, use a real gemspec
<p>http://yehudakatz.com/2010/04/02/using-gemspecs-as-intended/</p>
<p>Unsure about this, maybe the gemspec has enough automation you don&#8217;t have to do this any more?</li>
<li>Aruba lets you write cuke specs within cuke specs. Helps with command line applications</li>
</ul>
<h3>Hack Session of DOOM</h3>
<ul>
<li>Two features and one bug on hydra!</li>
</ul>
<h3>Scott Chacon &#8211; Getting Git</h3>
<ul>
<li>http://gitref.org</li>
<li>http://progit.org</li>
<li>schacon@gmail.com (put conf name in subj when emailing questions)</li>
<li>tree -a for nice tree list of a directory</li>
<li>check out his slides for example of cool showoff styling and layout
<p>http://github.com/schacon/showoff-wrangling-git</li>
<li>Email him to ask what he uses for his diagrams and highlights (backgrounds)</li>
<li>Would be really cool to allow a [dot] keyword in showoff to interpret the following graphviz code as a diagram</li>
<li>git log branchA ^branchB<br />
show commits reachable by A but not by B<br />
for example, I&#8217;m working on branch my-feature<br />
git log my-feature ^master<br />
is the stuff I&#8217;ve done that&#8217;s not in master yet</li>
<li>git branch &#8211;merged<br />
show me all branches that have been merged (safe to delete)</li>
<li>git branch &#8211;no-merged<br />
show me all branches that have not been merged</li>
</ul>
<h2>Day Two</h2>
<h3>Bryan Liles &#8211; Coding in Anger (or is that Desperation?)</h3>
<ul>
<li>Bryan Liles sings country</li>
<li>&#8220;run through the problem, take no prisoners&#8221; &#8230; &#8220;and undoubtedly do some bad things&#8221;</li>
<li>&#8220;we build straw houses&#8221;</li>
<li>&#8220;if you do it the wrong way just to get it done, you&#8217;ll get hit in the future&#8221;</li>
<li>Cargo Cult: &#8220;we&#8217;re all guilty of it&#8221; and &#8220;it&#8217;s bad&#8221;
<ul>
<li>Copy-pasting other people&#8217;s code without understanding it</li>
<li>&#8220;Copying code is not bad&#8221;</li>
<li>&#8220;It might do the right thing, but it might not be doing the right thing&#8221;</li>
<li>Read the code first</li>
<li>Respect the copyright</li>
<li>Understand what you copy</li>
<li>Don&#8217;t &#8220;copy and paste&#8221;</li>
<li>UNDERSTAND WHAT YOU COPY</li>
</ul>
</li>
<li>&#8220;It takes a big man to understand humility&#8221; </li>
<li>Break a task down and constantly refine task estimates</li>
<li>A desperate coder is a bad coder</li>
</ul>
<h4>bonus lightning talk: You are your own sales person</h4>
<ul>
<li>you are the product</li>
<li>you are the salesperson</li>
</ul>
<h3>Justin Love &#8211; You already use Closure</h3>
<ul>
<li>Block based programming</li>
<li>containment: f = File.read vs File.open do |f| &#8230;; end</li>
<li>You can call a proc with []<br />
proc.call(a,b) is equivalent to proc[a,b]</li>
<li>duwanis in IRC: &#8220;rack of lambda&#8221;</li>
</ul>
<h3>Nick Gauthier &#8211; Grease your Suite</h3>
<h3>Matthew Bass &#8211; A/B Testing for Developers</h3>
<ul>
<li>Choose a metric</li>
<li>Do some experiments</li>
<li>Compare the metrics</li>
<li>Vanity for rails A/B testing</li>
</ul>
<h3>Yossef Mendelssohn &#8211; The Perpetual Novice</h3>
<ul>
<li>Dryfus skill acquisition model</li>
<li>Novice level: follow the rules, do what you&#8217;re told</li>
<li>Adv. Beginner: limited ability to perceive different aspects of the situation</li>
<li>Competence: multitasking, handle more information, see how actions are related to goals</li>
<li>Proficiency: higher level view of the task, prioritize, adapt</li>
<li>Expert: no longer relying on rules and guidelines, deep &amp; tacit understanding, intuition</li>
<li>be mindful of your scenario: other people (or yourself) need to deal with the work you&#8217;ve done</li>
<li>unconscious incompetence: you don&#8217;t know what you&#8217;re doing and you don&#8217;t know that you don&#8217;t know it</li>
<li>conscious incompetence: you don&#8217;t know what you&#8217;re doing, but you know that you don&#8217;t know what you&#8217;re doing</li>
<li>conscious competence: you can do it and you understand it, but you have to think about it</li>
<li>unconscious competence: it is second nature to you. You know what you&#8217;re doing and you don&#8217;t have to try</li>
<li>Dunning-krueger effect:
<ul>
<li>when you don&#8217;t know what you don&#8217;t know, you don&#8217;t appreciate the skill itself, and are therefore very confident of yourself.</li>
<li>If you understand the skills, the more competent people think they are not very competent</li>
</ul>
</li>
<li>You need to practice, outside your main work</li>
<li>Focus on getting better, the entire time</li>
<li>low level people working together can be dangerous</li>
<li>a skilled person working with a lower level person need to work at the lower person&#8217;s level</li>
<li>Shuhari
<ul>
<li>Shu: learning fundamental techique, rules and guidelines (acceptance)</li>
<li>Ha: detach, digress, and break from tradition. think for yourself</li>
<li>Ri: transcendence: moved past rules and guidelines (no form)</li>
</ul>
</li>
<li>Shoshyu: beginner&#8217;s mind. In the beginner&#8217;s mind there are many possibilities. In an expert&#8217;s mind, there are few.
<ul>
<li>Experts have a tendency to stop asking questions</li>
<li>Beginners always ask questions</li>
</ul>
</li>
<li>Something doesn&#8217;t suck just because it&#8217;s old</li>
</ul>
<h3>Starcraft interlude</h3>
<ul>
<li>Nick Gauthier vs Bryan Liles and Saxon</li>
</ul>
<h3>Ben Scofield &#8211; Keynote</h3>
<ul>
<li>Practice is important for mastery</li>
<li>Practice is not fun</li>
<li>mastery is know how to do things, not just knowing what was done</li>
<li>mastery is not required</li>
<li>as a company, deciding what not to do is as important (or more) as deciding what to do</li>
<li>Pick out what is most important to succeed, and outsource the rest</li>
<li>errbit : open source alternative to hoptoad</li>
<li>as a company, focus on the most important stuff</li>
<li>live intentionally: think about what you&#8217;re spending your time on.</li>
<li>Embrace adequacy (and mediocrity)</li>
</ul>
<h2>Day Three</h2>
<p>Family friendly ruby conf in disney world. $189/night @ contemporary. Free conference.</p>
<p>http://magic-ruby.com</p>
<h3>Michael Jackson &#8211; Parsing Expressions in Ruby</h3>
<ul>
<li>Different school of thought alternative to regular expressions</li>
<li>Regexes are great but complicated ones get really gross, even after 10 or 12 characters</li>
<li>parsing expressions are:
<ul>
<li>declarative</li>
<li>recursive</li>
<li>readable</li>
<li>easy to maintain</li>
<li>not ambiguous</li>
<li>slow :-) (in ruby)</li>
</ul>
</li>
<li>Citrus gem</li>
</ul>
<h3>John Willis &#8211; Configuration Management in the Cloud with Chef</h3>
<ul>
<li>infrastructure as code</li>
<li>need to be able to share with teammates</li>
<li>can&#8217;t have &#8220;the deploy guy&#8221;</li>
<li>Chef is a library for configuration management</li>
<li>Chef client runs on the system (to accept commands and configuration)</li>
<li>Chef server is a RESTful API</li>
<li>Each system you configure is a Node</li>
<li>Attributes are searchable</li>
<li>Knife is the tool you use to interact with the API</li>
<li>Nodes have Roles, which describe what a Node should be</li>
<li>Nodes have a Run List
<ul>
<li>What Roles or Recipes to apply in Order</li>
</ul>
</li>
<li>A Resource is a Package or a Service</li>
<li>E.G. Package &#8220;sudo&#8221; &#8220;1.6.8p12&#8243; and it figures out what package manager to use</li>
<li>Services support actions (e.g. apache supports &#8220;restart&#8221; and &#8220;status&#8221;)</li>
<li>Resources take action through providers</li>
<li>Data bags store arbitrary data
<ul>
<li>E.G. put a user w/ their ssh key in a data bag, so you can add them as a user on the server</li>
</ul>
</li>
<li>Cookbooks are shareable</li>
<li>&#8220;Open source for infrastructure&#8221;</li>
<li>Open training</li>
<li>Cloud service independence (swap from slicehost to rackspace just by adding credentials)</li>
<li>http://www.opscode.com
<ul>
<li>5 chef servers for free</li>
</ul>
</li>
<li>@opscode @botchagalupe</li>
<li>Chef beats puppet on cloud support (more vendors)</li>
</ul>
<h3>Backchannel notes</h3>
<ul>
<li>Whiskydisk for deploy</li>
</ul>
<h3>Alex Sharp &#8211; Refactoring in Practice</h3>
<ul>
<li>Shantytown application: you want to bulldoze it, but people live there</li>
<li>testing in crucial for refactoring</li>
<li>avoid the EPIC refactor</li>
<li>changing the implementation without changing its behavior</li>
<li>deprecate action
<ul>
<li>for example, hoptoad a deprecation warning on old calls to actions</li>
<li>helpful when there are ajax calls you are not sure about</li>
</ul>
</li>
<li>take out small chunks and get them under test</li>
<li>lack of framework knowledge &#8211; often using existing solutions is an easy refactor</li>
<li>Domain driven development &amp; domain modeling</li>
<li>Document the smells</li>
<li>delete code that you aren&#8217;t using</li>
</ul>
<h3>Brian Hogan &#8211; There&#8217;s a Wheel for that Already</h3>
<ul>
<li>&#8220;I don&#8217;t want to use that because I don&#8217;t like how it looks&#8221;</li>
<li>How often is &#8220;better&#8221; really just an opinion</li>
<li>Forwardable &#8211; delegate a method to another class</li>
<li>Rails.root.join(&#8216;config&#8217;, &#8216;x.yml&#8217;)</li>
<li>dir, base = path.split</li>
<li>open-uri wraps net/http, net/https, net/ftp</li>
<li>Tempfile (like tmpdir, but just for one file)</li>
<li>x = Tempfile.new(&#8216;hydra.yml&#8217;)</li>
<li>OpenStruct.new(Yaml.load(&#8216;config.yml&#8217;))</li>
<li>Observer<br />
@@@ ruby<br />
def initialize<br />
  add_observer MyObserver.new<br />
end<br />
&#8230; later<br />
call: &#8220;changed&#8221; !</li>
<li>bash alias for serving static files via webrick<br />
I wasn&#8217;t able to write it down quick enough.</li>
<li>PStore for storing data</li>
<li>CSV is great if it doesn&#8217;t need to be faster</li>
<li>Home Run for datetime speedup via C extension</li>
<li>Oh no, I had to catch my flight and I missed the rest of this awesome talk!</li>
</ul>
<h3>Glenn Vanderburg &#8211; Keynote</h3>
<ul>
<li>Wasn&#8217;t there. See notes from Lone Star Ruby Conf. It was probably the same talk</li>
</ul>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://blog.smartlogicsolutions.com/2010/09/11/nicks-highlights-from-windy-city-rails/" rel="bookmark" class="crp_title">Nick&#8217;s Highlights from Windy City Rails</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/08/04/introducing-environmentalize-an-intuitive-environment-focused-config-structure-for-your-rails-applications/" rel="bookmark" class="crp_title">Introducing environmentalist: an intuitive, environment-focused config structure for your rails applications</a></li><li><a href="http://blog.smartlogicsolutions.com/2010/08/30/nicks-highlights-from-lone-star-ruby-conf/" rel="bookmark" class="crp_title">Nick&#8217;s Highlights from Lone Star Ruby Conf</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/06/23/dont-abuse-the-session/" rel="bookmark" class="crp_title">Don&#8217;t Abuse the Session</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/07/10/merging-a-has_many-relationship-into-one-instance/" rel="bookmark" class="crp_title">Merging a :has_many relationship into one instance</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.smartlogicsolutions.com/2010/09/07/nicks-highlights-from-ruby-hoedown/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Nick&#8217;s Highlights from Lone Star Ruby Conf</title>
		<link>http://blog.smartlogicsolutions.com/2010/08/30/nicks-highlights-from-lone-star-ruby-conf/</link>
		<comments>http://blog.smartlogicsolutions.com/2010/08/30/nicks-highlights-from-lone-star-ruby-conf/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 21:12:05 +0000</pubDate>
		<dc:creator>Nick Gauthier</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Nick Gauthier]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://blog.smartlogicsolutions.com/?p=954</guid>
		<description><![CDATA[I recently attended and spoke at Lone Star Ruby Conf 2010. I took notes on anything technical I thought would be useful to bring back and use day-to-day at SmartLogic. Keep in mind there were many excellent talks that aren&#8217;t on this list, it&#8217;s just a snippet of things I wanted to look into more. [...]]]></description>
			<content:encoded><![CDATA[<p>I recently attended and spoke at Lone Star Ruby Conf 2010. I took notes on anything technical I thought would be useful to bring back and use day-to-day at SmartLogic. Keep in mind there were many excellent talks that aren&#8217;t on this list, it&#8217;s just a snippet of things I wanted to look into more.</p>
<p><span id="more-954"></span></p>
<h2>Day one</h2>
<h3>Adam Keys &#8211; Rails&#8217; Next Top Model: Using ActiveModel and ActiveRelation</h3>
<ul>
<li>Rails 3 &#8211; ActiveSupport::Concern</li>
<li>Accessors + Concern cleans up code</li>
<li>New encryption classes for secure keys and encrypted data transfer</li>
<li>ActiveModel::Validator for non AR validations</li>
<li>validates_with MyValidator</li>
<li>ActiveModel::Serialization for hydra?</li>
<li>serialization: require ‘attributes’ and ‘attributes=’</li>
<li>serializable_hash =&gt; to_json, to_xml, from_json, from_xml</li>
<li>ActiveRelation (AREL)</li>
</ul>
<h3>Jesse Crouch &#8211; Building fast, lightweight data-driven apps using the Infochimps API</h3>
<p>Infochimps API to create linkedin’ 2nd degree network with twitter data. Check it out at <a href="http://trst.me">http://trst.me</a></p>
<h3>Aman Gupta &#8211; Debugging Ruby: Understanding and Troubleshooting the VM and your Application</h3>
<p>Slides: http://dl.dropbox.com/u/635/debugging_ruby-lsrc.pdf</p>
<ul>
<li>lsof -nPp : get open files for a specific pid</li>
<li>strace: observe functions being called. Can see reads and writes between processes, like rails hitting mysql</li>
<li>compile ruby w/ &#8211;enable-pthreads (not by default in debian or in rvm)</li>
<li>See http://rvm.beginrescueend.com/rubies/installing/ end of page for how to do this via RVM</li>
<li>tcpdump for networking</li>
<li>google perftools for ruby profiling</li>
<li>pprof ruby =&gt; graphical output</li>
<li>home_run for C based time parsing</li>
<li>perftools.rb for ruby diagrams of usage time</li>
<li>gdb.rb to executive ruby from gdb, when running ruby via gdb</li>
<li>bleak house: ruby memory leak detector</li>
<li>rack-perftools: rack middleware for perftools.rb</li>
<li>google perftools for forking</li>
</ul>
<h3>Caleb Clausen – What every Ruby programmer should know about threads</h3>
<ul>
<li>Thread safe objects: mutex, queue, sizequeue, condition variable</li>
<li>Semaphores to signal between threads</li>
<li>Mutex to lock and unlock resources</li>
</ul>
<h3>Jesse Wolgamott &#8211; Battle of NoSQL stars: Amazon&#8217;s SDB vs Mongoid vs CouchDB vs RavenDB</h3>
<ul>
<li>CouchDB is ACID, has great replication</li>
<li>Mongo has great rails support</li>
</ul>
<h2>Day two</h2>
<h3>James Edward Gray II &#8211; Ruby in the Wild</h3>
<ul>
<li>Logarithmic graphs!</li>
<li>Rubyists like to do a lot of stuff from scratch</li>
<li>&#8220;I&#8217;ve always been a fan of sqlite&#8221; &#8211; wha?</li>
<li>For fun, scatch an itch, try something new</li>
<li>&#8220;I try to make it a fun place [to work]&#8220;</li>
<li>Greg Brown wearing a Boh hat for his interview</li>
<li>Core of rake written in 30 mins</li>
<li>Rake file list in place of Dir.glob for hydra? (FileList ?)</li>
<li>File matching to compare input (source) and output (binary). Maybe for Sauron?</li>
</ul>
<h3>Chat with Scott Bellware</h3>
<p>I had a great chat with Scott Bellware about Agile, Lean, and his own style of OO integration testing. He recommended this book:</p>
<p><a href="http://www.amazon.com/gp/product/1935401009?ie=UTF8&#038;force-full-site=1">The Principles of Product Development Flow: Second Generation Lean Product Development</a></p>
<p>Also, he sent me a link to how he does his OO testing scenarios:</p>
<p><a href="http://github.com/sbellware/preview-signup">http://github.com/sbellware/preview-signup</a></p>
<p>I flew back after lunch on day two, so I&#8217;ll have to catch the rest in the videos!</p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://blog.smartlogicsolutions.com/2010/09/07/nicks-highlights-from-ruby-hoedown/" rel="bookmark" class="crp_title">Nick&#8217;s Highlights from Ruby Hoedown</a></li><li><a href="http://blog.smartlogicsolutions.com/2009/11/23/web-2-0-expo-nyc-wrap-up/" rel="bookmark" class="crp_title">Web 2.0 Expo NYC Wrap Up</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/09/19/fork-pools-in-ruby-on-rails/" rel="bookmark" class="crp_title">Fork Pools in Ruby on Rails</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/06/11/multithreading-in-ruby-on-rails/" rel="bookmark" class="crp_title">Multithreading in Ruby on Rails</a></li><li><a href="http://blog.smartlogicsolutions.com/2007/05/07/sls-welcomes-scott-davis-to-the-team/" rel="bookmark" class="crp_title">SLS Welcomes Scott Davis to the Team</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.smartlogicsolutions.com/2010/08/30/nicks-highlights-from-lone-star-ruby-conf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BohConf 2010: A Retrospective</title>
		<link>http://blog.smartlogicsolutions.com/2010/06/22/railsconf-bohconf-2010-a-retrospective/</link>
		<comments>http://blog.smartlogicsolutions.com/2010/06/22/railsconf-bohconf-2010-a-retrospective/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 14:54:10 +0000</pubDate>
		<dc:creator>John Trupiano</dc:creator>
				<category><![CDATA[Baltimore]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[John Trupiano]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[bohconf]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[railsconf]]></category>
		<category><![CDATA[smartlogic]]></category>
		<category><![CDATA[unconf]]></category>
		<category><![CDATA[unconference]]></category>

		<guid isPermaLink="false">http://blog.smartlogicsolutions.com/?p=913</guid>
		<description><![CDATA[After an exhilarating week of hosting the Rails community in Baltimore for RailsConf, I thought it&#8217;d be helpful to share the lessons that we learned organizing BohConf. Community Code Drives Rock! We had a strong showing of open source authors including Wayne Seguin, Gregory Brown, Aslak Hellesøy, Chris Eppstein, Nick Gauthier and various members of [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_948" class="wp-caption alignright" style="width: 160px"><a href="http://blog.smartlogicsolutions.com/wp-content/uploads/2010/06/nerdy_boh_02.png"><img src="http://blog.smartlogicsolutions.com/wp-content/uploads/2010/06/nerdy_boh_02-150x150.png" alt="BohConf 2010" title="BohConf 2010" width="150" height="150" class="size-thumbnail wp-image-948" /></a><p class="wp-caption-text">BohConf 2010</p></div>
<p>After an exhilarating week of hosting the Rails community in Baltimore for <a href="http://en.oreilly.com/rails2010">RailsConf</a>, I thought it&#8217;d be helpful to share the lessons that we learned organizing <a href="http://bohconf.com">BohConf</a>.</p>
<h3>Community Code Drives Rock!</h3>
<p>We had a strong showing of open source authors including <a href="http://github.com/wayneeseguin">Wayne Seguin</a>, <a href="http://github.com/sandal">Gregory Brown</a>, <a href="http://github.com/aslakhellesoy">Aslak Hellesøy</a>, <a href="http://github.com/chriseppstein">Chris Eppstein</a>, <a href="http://github.com/ngauthier">Nick Gauthier</a> and various members of <a href="http://github.com/thoughtbot">Thoughtbot crew</a>.  Wayne (<a href="http://github.com/wayneeseguin/rvm">rvm</a>) and Greg (<a href="http://github.com/sandal/prawn">prawn</a>) in particular raved about the contributions they were able to make to their projects.  Hey, I even got a new release of <a href="http://github.com/jtrupiano/timecop">Timecop</a> out thanks to a patch from <a href="http://github.com/lmarburger">Larry Marburger</a>.  Other well known OSS authors that dropped by included <a href="http://github.com/technoweenie">Rick Olson</a>, <a href="http://github.com/peakpg">Patrick Peak</a>, and <a href="http://github.com/technicalpickles">Josh Nichols</a>. If you were there and we missed you, please drop us a line in the comments!</p>
<p><span id="more-913"></span></p>
<h3>Employ Signage Everywhere</h3>
<div id="attachment_939" class="wp-caption alignright" style="width: 310px"><a href="http://blog.smartlogicsolutions.com/wp-content/uploads/2010/06/IMAG0022.jpg"><img src="http://blog.smartlogicsolutions.com/wp-content/uploads/2010/06/IMAG0022-300x179.jpg" alt="The Vim session at Monday&#039;s BarCamp (photo courtesy of Nick Gauthier)" title="The Vim session at Monday&#039;s BarCamp" width="300" height="179" class="size-medium wp-image-939" /></a><p class="wp-caption-text">The Vim session at Monday's BarCamp (photo courtesy of Nick Gauthier)</p></div>
<p>One problem that we had was that people entering BohConf did not have a sense of what was actually taking place.  Despite having a <a href="http://wiki.github.com/smartlogic/BohConf/schedule">schedule posted online</a>, it was often not clear what was underway.  During the community code drives, we should have had signs next to each table pointing out which OSS authors were there to work on which projects.  During the BarCamps, we could have similarly posted signs that indicated which discussions were happening at which tables.</p>
<h3>Publish Live Updates to the Website</h3>
<p>The thing about being internet (nerd) famous is that that doesn&#8217;t necessarily mean that anyone knows what you look like.  It would have been cool to post photos on the website of the OSS authors who were currently working the Community Code Drive.  Similarly we could have posted the current BarCamp sessions on the website.  A countdown to the start and end of the programming contest would have been cool too.</p>
<h3>Programming Contests Rock!</h3>
<div class="wp-caption alignright" style="width: 310px"><object width="300" height="241"><param name="movie" value="http://www.youtube.com/v/oqBDtAWb2u8&#038;hl=en_US&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/oqBDtAWb2u8&#038;hl=en_US&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="300" height="241"></embed></object><p class="wp-caption-text">Aaron Scruggs' programming challenge submission</p></div>
<p>Give a bunch of nerds a dataset, a deadline, and no rules, and you get some pretty awesome efforts.  Our client <a href="http://spotcrime.com/">SpotCrime</a> made available a dataset of crimes in Maryland in the past couple of months.  <a href="https://twitter.com/wearefound">Tim Johnson</a> submitted a <a href="http://tweetphoto.com/26375355">processing.rb time lapse visualization</a>, <a href="http://github.com/ascruggs">Aaron Scruggs</a> submitted a super cool and clever <a href="http://talesofastartupjunky.com/blog/?p=33">gource visualization</a>, and Greg Brown and several members of his crew (Jia, Jordan and Chenoa) showed a lot of creativity with their submission of <a href="http://spotthebaddy.heroku.com/">Spot the Baddy</a>, a simple but fun interactive game where you can catch the bad guy!</p>
<h3>Advertise the Programming Contest Better</h3>
<p>While we were very happy with the submissions that we received for the programming contest, we felt that not nearly enough people were aware that it was taking place.  Which also means that nobody knew we were giving out a $100 visa card to the best submission.</p>
<h3>A Schedule is Important</h3>
<p>When running an unconf for three days, you cannot simply throw out all semblance of organization and expect a success.  With various people responsible for different aspects of BohConf, it was very helpful to be able to refer to the schedule when explaining what was happening at BohConf.  Furthermore, it allowed us to communicate specifics well ahead of time via Twitter to those who wished to participate.</p>
<h3>Code Retreats Rock!</h3>
<div id="attachment_935" class="wp-caption alignright" style="width: 310px"><a href="http://www.flickr.com/photos/oreillyconf/4682963441/in/set-72157624231740192/"><img src="http://blog.smartlogicsolutions.com/wp-content/uploads/2010/06/4682963441_e6a9191b5d-300x199.jpg" alt="Matt Scilipoti running the Code Retreat (photo courtesy of James Duncan Davidson)" title="Matt Scilipoti running the Code Retreat" width="300" height="199" class="size-medium wp-image-935" /></a><p class="wp-caption-text">Matt Scilipoti running the Code Retreat (photo courtesy of James Duncan Davidson)</p></div>
<p>&#8230;but perhaps it wasn&#8217;t the best choice to displace another BarCamp session.  After a wildly successful BarCamp Monday afternoon, many folks returned Tuesday looking for another.  Though the code retreat was clearly appreciated by the dozen or so folks that participated, there seemed to be a lot more interest in the BarCamp.</p>
<h3>Momentum Slowed</h3>
<p>Considering that Monday was tutorial day, it was unrealistic to expect us to maintain the same level of participation Tuesday and Wednesday.  Not only was there a big dropoff from Monday to Tuesday, but there was another one from Tuesday to Wednesday. BarCamp Wednesday afternoon was less successful than Monday&#8217;s, the discussion groups dissipated before we even got to the last session.  It&#8217;s also worth noting that those of us running BohConf were running on fumes by that point which likely contributed to the loss of momentum.</p>
<h3>We Didn&#8217;t Market SmartLogic Well Enough</h3>
<p>While <a href="http://smartlogicsolutions.com">SmartLogic</a> is instrumental to the <a href="http://bmoreonrails.org">B&#8217;more on Rails</a> community (as a sponsor and organizer), BohConf was actually undertaken entirely by <a href="http://smartlogicsolutions.com/our-team">our team at SmartLogic</a>.  We felt that we missed a big opportunity to establish our company and individuals as more visible members of the Rails community.  Our team members should have all had shirts, and we should have given away stickers and buttons to all attending BohConf.</p>
<h3>Encourage Conversation</h3>
<div id="attachment_946" class="wp-caption alignright" style="width: 310px"><a href="http://blog.smartlogicsolutions.com/wp-content/uploads/2010/06/IMAG0024.jpg"><img src="http://blog.smartlogicsolutions.com/wp-content/uploads/2010/06/IMAG0024-300x179.jpg" alt="A group discussion at BohConf (photo courtesy of Nick Gauthier)" title="A group discussion at BohConf" width="300" height="179" class="size-medium wp-image-946" /></a><p class="wp-caption-text">A group discussion at BohConf (photo courtesy of Nick Gauthier)</p></div>
<p>A large format session at an event like RailsConf scales pretty well. As far as you can project a speakers image (in time and space), that&#8217;s how many people you can reach. Open space events like BohConf scale less well because the effects are personal. The benefit of attending this kind of event is a lot more subjective, because each person&#8217;s experience is different. This means it&#8217;s vital that you give plenty of opportunities for people to start conversations. The BarCamp format isn&#8217;t about presentation topics as ending points, they&#8217;re conversation starters. The folks who got the most out of the event seemed to be the ones most open to meeting new people and sharing their story.
</p>
<p>A fantastic way to get people involved is to simply encourage them to ask, &#8220;What are you working on?&#8221; Follow up with, &#8220;tell me about that&#8221; and most geeks, passionate about their craft and otherwise quiet, will talk for an hour.</p>
<h3>Don&#8217;t Be Shy about Asking for Help Promoting</h3>
<p>Though we had about 100 followers prior to the start of BohConf, we failed to reach a large segment of the RailsConf attendees before the conference started.  Attendee after attendee that I spoke to were hearing about BohConf for the very first time.  We should have reached out to Chad, DHH and others to talk about BohConf in the weeks leading up to it. Even a few tweets would&#8217;ve given the event a nice bump.</p>
<h3>Get a Bigger Room Next Time</h3>
<p>Despite the waning momentum as the days went on, we were still overpacked in the conference room that we had available.  Luckily on Monday we were able to hijack the adjacent media room for our use.  Otherwise we would have had to turn away to half of the 80+ folks hanging out during the peak.</p>
<h3>Finally</h3>
<p>We had an absolute blast organizing BohConf for the community.  Practically all feedback we received was overwhelmingly positive.  And there are rumors that we&#8217;ll be asked to put it on again next year.  Whether or not we&#8217;re the ones to undertake it, we hope that these notes will aid those embarking on similar endeavors.</p>
<p>An extra special thanks to <a href="http://github.com/abachman">Adam Bachman</a>, <a href="http://github.com/ngauthier">Nick Gauthier</a>, <a href="http://smartlogicsolutions.com/ryan">Ryan DeStefano</a> and <a href="http://github.com/mattscilipoti">Matt Scilipoti</a> for their efforts in helping to run BohConf.</p>
<p>If you have any comments or critiques of BohConf, please leave a comment below.  Thanks to all those who attended!</p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://blog.smartlogicsolutions.com/2009/05/05/smartlogic-wants-to-clean-up-twitter-introduces-shouldirtcom/" rel="bookmark" class="crp_title">SmartLogic Wants to Clean Up Twitter, Introduces ShouldIRT.com</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/11/12/watch-multiple-logs-in-a-single-terminal/" rel="bookmark" class="crp_title">Watch Multiple Logs in a Single Terminal</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/10/14/facebox-with-prototype/" rel="bookmark" class="crp_title">Facebox With Prototype</a></li><li><a href="http://blog.smartlogicsolutions.com/2009/12/10/why-were-excited-about-the-maryland-tech-crawl/" rel="bookmark" class="crp_title">Why We&#8217;re Excited about the Maryland Tech Crawl</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/08/21/getting-subclipse-to-work-in-gandymede-eclipse-34/" rel="bookmark" class="crp_title">Getting Subclipse to Work in Gandymede (Eclipse 3.4)</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.smartlogicsolutions.com/2010/06/22/railsconf-bohconf-2010-a-retrospective/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Web 2.0 Expo NYC Wrap Up</title>
		<link>http://blog.smartlogicsolutions.com/2009/11/23/web-2-0-expo-nyc-wrap-up/</link>
		<comments>http://blog.smartlogicsolutions.com/2009/11/23/web-2-0-expo-nyc-wrap-up/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 17:30:19 +0000</pubDate>
		<dc:creator>Yair Flicker</dc:creator>
				<category><![CDATA[Cloud 2.0]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Lean Startup]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[prototyping]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[cloud20]]></category>
		<category><![CDATA[data-visualization]]></category>
		<category><![CDATA[ericries]]></category>
		<category><![CDATA[ignite]]></category>
		<category><![CDATA[leanstartup]]></category>
		<category><![CDATA[measure]]></category>
		<category><![CDATA[reports]]></category>
		<category><![CDATA[sketch]]></category>
		<category><![CDATA[sketchboard]]></category>
		<category><![CDATA[toddzakiwarfel]]></category>
		<category><![CDATA[web20]]></category>

		<guid isPermaLink="false">http://blog.smartlogicsolutions.com/?p=775</guid>
		<description><![CDATA[John and I went to the Web 2.0 Expo in New York City last week to learn about new trends in Web 2.0 and to try meet interesting people in the industry. We had fun, and I even won a Flip Ultra HD from the folks at a party hosted by Rackspace and Neustar. This [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.smartlogicsolutions.com/john" title="John Trupiano">John</a> and I went to the Web 2.0 Expo in New York City last week to learn about new trends in Web 2.0 and to try meet interesting people in the industry.  We had fun, and I even won a Flip Ultra HD from the folks at a party hosted by <a href="http://www.rackspace.com/">Rackspace</a> and <a href="http://www.neustar.biz/">Neustar</a>.  This post includes my notes from various sessions from the weekend.</p>
<h2>Ignite NYC</h2>
<p><span id="more-775"></span><br />
Web 2.0 Expo kicked off with <a href="http://ignitenyc.tumblr.com/">Ignite NYC</a> on Monday (11/16) night.  We&#8217;re a big fan of Ignite talks (having created the websites for Ignites in <a href="http://www.ignitebaltimore.com/">Baltimore</a>, <a href="http://www.ignite-dc.com/">DC</a>, <a href="http://www.igniteannapolis.com/">Annapolis</a> and <a href="http://www.igniterailsconf.com/">RailsConf</a>) so it was exciting to check out Ignite in the Big Apple.  The <a href="http://ignitenyc.tumblr.com/">Ignite NYC website</a> lists the speakers but doesn&#8217;t mention what they spoke about (we&#8217;d be happy to host your website).  Unfortunately I didn&#8217;t take notes at this event and I&#8217;m not going to go through all the youtube videos right now, so I don&#8217;t have much to share.</p>
<h2>Web 2.0 Sessions</h2>
<h3>NoSQL: The Shift to a Non-relational World</h3>
<p>This talk, given by Dwight Merriman, was about non-relational databases, which is a different paradigm from traditional databases like MySQL, Oracle, MS Access, MS SQL Server, etc.  Non-relational databases are interesting to me as I think they might be applicable to some of our client projects.  My notes:</p>
<ul>
<li>No joins</li>
<li>Uses map reduce instead</li>
<li>When considering scaling out &#8211; think about &#8220;CAP&#8221; &#8211; you can pick any two of the following but you can never achieve 100% of all three:
<ul>
<li><strong>C</strong>onsistency: ensuring that data on multiple database servers are consistent</li>
<li><strong>A</strong>vailable: you want the database to be available when you need it</li>
<li><strong>P</strong>artition-tolerant: partitioning the database to run across multiple servers</li>
</ul>
<li>CAP constraints are most relevant when writing to the database.  If you&#8217;re only reading from the database, it&#8217;s easy to have all three.</li>
</ul>
<h3>The Lean Startup: a Disciplined Approach to Imagining, Designing, and Building New Products</h3>
<p>This talk was given by Eric Ries (<a href="http://twitter.com/ericries">@ericries</a>), who blogs at <a href="http://www.startuplessonslearned.com/">Lessons Learned</a>.  He is someone with whom many tech entrepreneurs are smitten, and I must say I myself was impressed.  My notes:</p>
<ul>
<li>Continuous Deployment</li>
<ul>
<li>Devs can check code in, gets deployed everywhere within 20 minutes</li>
<li>Cluster will detect bad changes to the code, revert them, email everyone</li>
<li>The example Eric gave was that if someone messes up the UI of the checkout<br />
      screen, e.g. changes the &quot;pay now&quot; button such that users can&#8217;t see it<br />
      and this causes the company not to receive payments, the system will automatically<br />
      revert itself after 20 minutes or so. </li>
</ul>
<li>Lean Startups</li>
<ul>
<li>Commodity Technology Stack</li>
<li>Customer Development</li>
<li>Agile Product Development</li>
</ul>
<li>Agile Product Development</li>
<ul>
<li>Principles from Lean Manufacturing, Agile, and TPS</li>
<li>Unit of Progress: A line of Working Code (as opposed to advancing the plan in waterfall).&nbsp; Problem: known, Solution: unknown.
    </li>
</ul>
<li>Product Development at Lean Startup</li>
<ul>
<li>Unit or Progress: Validated Learning About Customers ($$$)</li>
<li>Problem, Solution: unknown.</li>
<li>Hypotheses, Experiments, Insights feed into XP, which feeds Data, Feedback, Insights back into Problem Definition / Customer Development cycle</li>
<li>Problem team: (formerly sales, marketing, product development) &#8211; cross functional team
    </li>
<li>Solution team: (formerly engineering, ops) &#8211; but should also include marketing &#8211; cross functional team</li>
</ul>
<li>Pivot: one turn through this feedback loop</li>
<ul>
<li>Ideas &#8211; build &#8211; code &#8211; measure &#8211; data &#8211; learn &#8211; back to ideas</li>
<li>Minimize total time through the loop</li>
</ul>
<li>AAA&#8217;s of metrics:</li>
<ul>
<li>Actionable</li>
<li>Accessible &#8211; must make sense to anyone, and must be accessible by anybody in the company (everyone should be able to pull the report)</li>
<ul>
<li>Most useful thing is to kill pet projects and help people see that pet projects are bad ideas.</li>
</ul>
<li>Auditable &#8211; &quot;metrics are people too&quot; &#8211; reports come from tangibles<br />
      &#8211; when someone sees a report, they must be believable and must stand up<br />
      to any questions.&nbsp; People must be able to audit them because initial<br />
      human reaction is to doubt and deny, etc.</li>
</ul>
<li>Measure the Macro</li>
<ul>
<li>Always look at cohort-based metrics over time</li>
<li>Split-test the small, measure the large</li>
</ul>
<li>Five Why&#8217;s</li>
<ul>
<li>A technique for continuous improvement of company process.
    </li>
<li>Theory: behind every technical problem is a human problem</li>
<li>Example: imagine a server crashes.&nbsp; Why?&nbsp; Code got deployed<br />
      that used some obscure API that caused it to crash.&nbsp; Why?&nbsp; Person<br />
      that wrote the code was a noob engineer and didn&#8217;t know better and wasn&#8217;t<br />
      trained.&nbsp; Why?&nbsp; Manager<br />
      doesn&#8217;t believe in training.&nbsp; Started with a server problem ended<br />
      up with a management problem.</li>
<li>Ask &quot;why&quot; five times when something unexpected happens.</li>
<li>Make&nbsp;<em>proportional</em>&nbsp;investments in prevention at all<br />
      five levels of the hierarchy.</li>
<li>Behind every supposed technical problem is usually a human problem.&nbsp; Fix<br />
      the cause, not just the symptom.</li>
<li>Helps us identify that we&#8217;re too busy to find out why we&#8217;re too busy<br />
      or something</li>
<li>Acts as a natural speed regulator.&nbsp; If we&#8217;re spending too much time<br />
      fire-fighting &#8211; we&#8217;ll have to slow down to address problem, etc.&nbsp; Regulates<br />
      our speed.</li>
</ul>
<li>Minimum Viable Product</li>
<ul>
<li>What&#8217;s the absolute least amount of product we can build to engage the<br />
      visionaries?</li>
<li>Instead of asking customers what they want (which they don&#8217;t usually<br />
      know), we&#8217;re going to take our theory, put it out there, and TEST.</li>
<li>Visionary customers can fill in the gaps on missing features &#8211; if the<br />
      product solves a real problem.</li>
<li>Fears:</li>
<ul>
<li>False negative: customers would have liked the full product, but the<br />
        MVP sucks, so we abandoned the vision</li>
<li>Too busy to learn: it would be faster to just build it right, all this<br />
        measuring distracts from delighting customers</li>
</ul>
<li>Must have an agreement with the team to iterate &#8211; just because clients<br />
      don&#8217;t like the first version doesn&#8217;t mean they&#8217;re not going to continue<br />
      to iterate.
    </li>
</ul>
</ul>
<p>Eric mentioned a book he&#8217;s publishing: <a href="http://www.lulu.com/content/paperback-book/startup-lessons-learned---v002---beta/7832138">Startup Lessons Leaned (book)</a> &#8211; still in &#8220;beta.&#8221;  He also recommended <a href="https://www.amazon.com/dp/0976470705?tag=lessolearn01-20&#038;camp=0&#038;creative=0&#038;linkCode=as4&#038;creativeASIN=0976470705&#038;adid=0E34NG800FT9HMWYP4D6&#038;">The Four Steps to Epiphany</a>.</p>
<h3>Sketchboards &amp; Prototyping &#8211; Method for Rapid Design</h3>
<p>This talk, given by Todd Zaki Warfel (<a href="http://twitter.com/zakiwarfel">@zakiwarfel</a>), described a process his company uses for prototyping ideas for applications.  It was my favorite talk from the conference.  Todd&#8217;s website is at <a href="http://zakiwarfel.com/">http://zakiwarfel.com/</a>.  My notes:</p>
<ol>
<li>Prototyping is a process</li>
<li>People often say &quot;I think I get it but I&#8217;m gonna have to see it&quot; -<br />
    need to see prototypes</li>
<li>Todd&#8217;s company  doesn&#8217;t do wireframes.&nbsp; Their wireframes are their<br />
    prototypes.&nbsp; Wireframes<br />
    might be sketched out on paper.&nbsp; Click-through wireframes are their<br />
    prototypes (XHTML/CSS).&nbsp; They do production-level prototypes, not recommended<br />
    for anybody else.</li>
<li>Two main reasons for sketching / prototyping in the process</li>
<ol>
<li>Sketches are a great communication tool &#8211; don&#8217;t write notes &#8211; sketch<br />
      them out</li>
<li>Pics have less room for interpretation than text
    </li>
<li>Lo-fi is cheaper, generally speaking, than doing AI, etc.</li>
</ol>
<li>No written requirements &#8211; just visual requirements</li>
<li>&quot;Agile Conference&quot; &#8211; 1500 &#8211; 1600 people show up. Todd&#8217;s group<br />
    made some app in two days, for charity, and raised a few thousand bucks with<br />
    the app. 
  </li>
<li>Design Studio Method</li>
<ol>
<li>Industrial design / architecture method</li>
<li>A methodology where you build something, sketch something &#8211; create an<br />
      idea &#8211; and then show it to people, let them critique it and tell you what&#8217;s<br />
      good and bad about it.&nbsp; Then iterate.&nbsp; Take an idea, put it out<br />
      in front of people, rip it to shreds, etc.&nbsp; But you get to do that<br />
      to their designs as well.</li>
<li>They&#8217;ll do the Design Studio Method sessions with their clients and get<br />
      paid for it.</li>
<li>Write down a few keywords to describe the product today</li>
<li>Write down a few keywords to describe the product 6-9 months from now<br />
      &#8211; print this out, put it in big words in the room
    </li>
<li>&#8211;&gt; allows them to see their goals &#8211;&gt; see what it is now, and<br />
      what they&#8217;re targetting</li>
<li>Personas &#8211; people that are going to&nbsp;
    </li>
<li>Inspirational printouts &#8211; stuff that looks aesthetically good or stuff<br />
      that has good interaction &#8211; stuff to aspire to include in the next version<br />
      of the product</li>
<li>Break into teams</li>
<ol>
<li>One BA</li>
<li>One speaks to dev</li>
<li>One designer</li>
<li>One sales or marketing person</li>
<li>Represent all the different viewpoints</li>
<li>Give them a design challenge and have them sketch out &#8211; generate -<br />
        their ideas</li>
<ol>
<li>Building blocks of design: square, circle, triangle, line</li>
<li>Generate ideas and pitch them: 3 minutes to present them, 2 minutes<br />
          to critique.&nbsp; Say 2 things that are strong about the idea and&nbsp;
        </li>
</ol>
<li>Process:</li>
<ol>
<li>Sketch -&gt; present -&gt; critique</li>
<li>-&gt; prototypes</li>
<li>-&gt; and again: sketch -&gt; present -&gt; critique</li>
<li>-&gt; validate</li>
<li>-&gt; iterate</li>
</ol>
</ol>
<li>Get started ASAP</li>
<li>Messy is okay</li>
<li>Quantity then quality &#8211;&gt; generate lots of ideas and then refine</li>
<ol>
<li>Peer review then pitch -&gt; critique process</li>
</ol>
<li>Templates that they use:</li>
<ol>
<li>The 685 &#8211; an &quot;8 up template&quot; &#8211; can put 8 sketches in there.</li>
<ol>
<li>First round you do by yourself &#8211; then critique (use red and green<br />
          marker to denote what&#8217;s good and what&#8217;s not)
        </li>
<li>Second round your sketches are up on the wall
        </li>
<li>5 minutes to draw 6-8 sketches
        </li>
<li>Can also be used as a storyboard</li>
<li>One or two rounds with 8 ups &#8211; sketching, critiquing, etc.</li>
</ol>
<li>Then a 1 up</li>
</ol>
<li>Three rules:</li>
<ol>
<li>Know your audience and intent (are you going to give sketches to a<br />
        CEO?)
      </li>
<li>Plan a little.&nbsp; Prototype the rest.&nbsp; This guy does about<br />
        70% in sketches / planned out, then starts prototyping.</li>
<li>Set expectations &#8211; to combat questions like &quot;why is this B&amp;W&quot; or &quot;what<br />
        about the admin&quot; etc.</li>
</ol>
<li>Closing thoughts: </li>
<ol>
<li>You can sketch.&nbsp; No BS, anybody can sketch.&nbsp; Anybody can<br />
        sketch, good enough to put their idea down on paper.</li>
<li>It&#8217;s [sketches] not the mona lisa.&nbsp; Just needs to be good enough.&nbsp; Not<br />
        going to live forever in Moma or the Louvre, etc.</li>
<li>If you can&#8217;t make it then fake it.&nbsp; E.g. if you can&#8217;t get it to<br />
        work in Javascript, use Keynote.</li>
<li>Prototype only what you need.&nbsp; Prototype the unique parts, not<br />
        the entire system.
        </li>
<li>Reduce risk.&nbsp; Prototype early and often.&nbsp; Do about 2 weeks<br />
        of design studio sessions with their clients.&nbsp; Then they jump right<br />
        into prototyping.&nbsp; Then they do weekly releases.&nbsp; Whole agile<br />
        argument &#8211; small and rapid iterations.
        </li>
</ol>
</ol>
</ol>
<p>&quot;You can fix it now on the drafting board with an eraser or you can fix<br />
  it later on the construction site with a sledge hammer.&quot; &#8211; Frank Lloyd<br />
  Wright </p>
<p> Todd was promoting his new book: <a href="http://rosenfeldmedia.com/books/prototyping/">Prototyping &#8211; A Practioner&#8217;s Guide &#8211; by<br />
  Todd Zaki Warfel</a>, which I&#8217;ve added to <a href="http://tinyurl.com/slsbooks">my wishlist at Amazon</a>.  He mentioned that it has 6 tutorial chapters, a bit on how to sell prototyping, and some other interesting stuff.</p>
<h3>Freeing and Visualizing Financial Data</h3>
<p>This talk was given by <a href="http://blog.kiwitobes.com/">Toby Segaran</a> (<a href="http://twitter.com/kiwitobes">@kiwitobes</a>) and <a href="http://www.jesperandersen.net/">Jesper Andersen</a> (<a href="http://twitter.com/jandersen">@jandersen</a>).  They put the <a href="http://www.slideshare.net/jesperandersen/web20-nyc-financial" title="Freeing and Visualizing Financial Data Slides">slides from the presentation up on slideshare</a>.  My notes:</p>
<ol>
<li>Why visualize?</li>
<ol>
<li>To form a hypothesis</li>
<li>To tell a story</li>
</ol>
<li>Single variable &#8211; shows you that a variable is moving but doesn&#8217;t tell you why</li>
<li>Data Sources
  </li>
<ol>
<li><a href="http://en.wikipedia.org/wiki/XBRL">XBRL</a> &#8211; put forth by SEC &#8211; to put all corporate-filed reports into the open domain in an XML readable format</li>
<ol>
<li>Capital IQ &#8211; data vendor</li>
<li>Requirement &#8211; in 3 years everything will have to be encoded in XML</li>
</ol>
<li>BSYM &#8211; Bloomberg Open Symbology</li>
<ol>
<li>Unique keys of finance -&gt; links symbologies in finance.&nbsp; Problem is that different data vendors have different keys and it&#8217;s a mess.</li>
<li>Competing standard is CUSIP &#8211; very expensive &#8211; but they own the data standard</li>
</ol>
<li>Yahoo! Finance data &#8211; downloadable via CSV &#8211; data goes back</li>
<li>Amazon Web Services -&gt; Category: Economics -&gt; lots of data feeds</li>
<li>&quot;Trader Work Station&quot; &#8211; some Java thing</li>
</ol>
<li>Freerisk &#8211; site they created</li>
</ol>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://blog.smartlogicsolutions.com/2008/06/15/automating-flex-compilation-using-ant/" rel="bookmark" class="crp_title">Automating Flex Compilation Using ANT</a></li><li><a href="http://blog.smartlogicsolutions.com/2010/11/30/announcing-winners-of-free-tickets-for-intro-to-ruby-course/" rel="bookmark" class="crp_title">Announcing Winners of Free Tickets for Intro to Ruby Course</a></li><li><a href="http://blog.smartlogicsolutions.com/2010/11/03/intro-to-ruby-on-rails-course-coming-to-baltimore/" rel="bookmark" class="crp_title">Intro to Ruby on Rails Course Coming to Baltimore</a></li><li><a href="http://blog.smartlogicsolutions.com/2010/09/11/nicks-highlights-from-windy-city-rails/" rel="bookmark" class="crp_title">Nick&#8217;s Highlights from Windy City Rails</a></li><li><a href="http://blog.smartlogicsolutions.com/2009/03/05/recap-of-the-first-baltimore-angels-meetup/" rel="bookmark" class="crp_title">Recap of the First Baltimore Angels Meetup</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.smartlogicsolutions.com/2009/11/23/web-2-0-expo-nyc-wrap-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adobe MAX 2008 Registration is Open</title>
		<link>http://blog.smartlogicsolutions.com/2008/05/28/adobe-max-2008-registation-open/</link>
		<comments>http://blog.smartlogicsolutions.com/2008/05/28/adobe-max-2008-registation-open/#comments</comments>
		<pubDate>Wed, 28 May 2008 13:41:29 +0000</pubDate>
		<dc:creator>Greg Jastrab</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Greg Jastrab]]></category>

		<guid isPermaLink="false">http://blog.smartlogicsolutions.com/2008/05/28/adobe-max-2008-registation-open/</guid>
		<description><![CDATA[Registration has opened for Adobe MAX 2008. Check out the registration information page to learn more. Related Posts:MigrAIRable Library Added to Google CodeFlash Player 10 ActionScript Language Reference Posted on LabsFlex 4 &#8220;Gumbo&#8221; Planning DocumentsCertified Adobe Flex 2 DeveloperAdobe AIR Alpha Released on LinuxPowered by Contextual Related Posts]]></description>
			<content:encoded><![CDATA[<p>Registration has opened for <a href="http://max.adobe.com/">Adobe MAX 2008</a>.  Check out the <a href="http://max.adobe.com/na/reginfo/">registration information page</a> to learn more.</p>
<div id="crp_related"><h3>Related Posts:</h3><ul><li><a href="http://blog.smartlogicsolutions.com/2008/11/17/migrairable-library-added-to-google-code/" rel="bookmark" class="crp_title">MigrAIRable Library Added to Google Code</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/05/21/flash-player-10-apis-astro/" rel="bookmark" class="crp_title">Flash Player 10 ActionScript Language Reference Posted on Labs</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/05/06/flex4-opensource-gumbo-planning-documents/" rel="bookmark" class="crp_title">Flex 4 &#8220;Gumbo&#8221; Planning Documents</a></li><li><a href="http://blog.smartlogicsolutions.com/2007/05/20/certified-adobe-flex-2-developer/" rel="bookmark" class="crp_title">Certified Adobe Flex 2 Developer</a></li><li><a href="http://blog.smartlogicsolutions.com/2008/03/31/air-linux-adobe-alpha-flexbuilder/" rel="bookmark" class="crp_title">Adobe AIR Alpha Released on Linux</a></li><li>Powered by <a href="http://ajaydsouza.com/wordpress/plugins/contextual-related-posts/">Contextual Related Posts</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.smartlogicsolutions.com/2008/05/28/adobe-max-2008-registation-open/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

