JQuery Events/live + ScrewUnit = :-(. ScrewUnit swaps the DOM “out from under” the elements that Events/live is watching, which messes with ScrewUnit. Call
dieon the DOM elements that live events are watching.
ScrewUnit + CI + IE = :’-( Also, When ScrewUnit suites become large, they trigger IE’s “slow script” warning, which can freeze your continuous integration build. Check out the Registry Hack to set your own timeout.
We have a fan of Thor in the house: “Map options to a class. Simply create a class with the appropriate annotations, and have options automatically map to functions and parameters.” Which, as is (not) obvious, indicates that Thor is a replacement for rake.
Theo Schlossnagle: “I don’t care what you use: puppet, chef, bcfg2, cfengine – choose one and automate your configuration.” (Theo’s presentation was a highlight, check out the slides here.)
Allspaw and Hammond from Flickr: “If there’s only one thing you do, automate your infrastructure.”
There were lots of Puppet users at the conference, and Luke Kaines gave a good talk on it.
Interested in a Chef intro? Watch the video of Adam and Ezra’s talk:
From the Chef BoF:
- If you’re just doing application deployment of a typical webapp then running chef-solo on deploy might be just fine for you (it is for the Remix team).
- Ezra points out that he has a chef subproject on git that even strips out cap – chef-deploy (vs cap sudo’ing out to chef).
- Adam gave a good explanation of the Chef run model.
- It’s important to understand the basics of what’s going on behind the scenes – otherwise you’ll shell out right in the middle of your Chef scripts and be surprised by the run order.
- In short, all your Chef Resource statements are evaluated in a first pass. Then they’re executed.
- This gives Chef the opportunity to evaluate what’s to be done and optimize. Adam noted that included recipes are only executed once (analogous to ruby require’s)
- Adam also mentioned something kind of cool – if I have this right – Resource statements return the associated Resource object. And when you refer to the Resource the same way twice, you’re getting back the same Resource instance. So your included Recipes (for example) each have the opportunity to decorate a Resource defined earlier – if, say, it ought to be configured differently based on a combination of what else is getting installed on the box. Nice.
My favorite talk at Velocity was by Paul Hammond and John Allspaw from Flickr, who are doing real lowercase-a agile:
Here’s the video, highly recommended:
“If there’s one thing you do, it should be automated infrastructure”. This was a refrain through the conference – as Theo Schlossnagle put it, it doesn’t matter if it’s chef, puppet, bcfg2, cfengine – whatever works for you, just do it.
Some of their techniques:
- One-step build. They literally go to a web page and click a button and watch the build take the full site from soup to nuts.
- Deploys: Who. What. When. You want to make all the meta-details of a deploy easily visible to anyone. Deploy logs are readily accessible.
- Always ship trunk. In a webapp this is possible. It vastly simplifies – everyone knows where to look for what’s going out, and what’s live.
- Flickr does their branching in the code (take note git people), and these become natural ops levers (i.e. uh-oh turn that feature off / turn it down).
- “Dark launches”. Facebook does this too: launch the guts of a new feature with the UI turned off so you can see how the technology works in real production.
- Which results in anticlimactic launches, the best kind
- They roll forward (not back) to turn features off that aren’t working.
- “Gather shitloads of metrics”. System metrics, app metrics, everything. John has a great writeup on their Ganglia setup in his book.
- Developers watch the metrics just as obsessively as ops. Visualization is a powerful tool used day-to-day by the whole group.
- Developers have a way of putting in their own metrics via a little framework.
- They’re all on IRC. This kept coming up at the conference – teams are on some chat tool like IRC, Skype chat LINK, or Campfire LINK.
- Important events are piped into IRC, so you’ll be right in the middle of a conversation and an alert will pop in.
- Logs are piped into a search engine so they can find things in the log history, easily.
- There’s an ongoing conversation between dev and ops. They’re learning to solve the Flickr problem together. Each side’s way of thinking informs the other (major conference theme as well)
- Failure will happen. Develop your ability to respond. Like ER doctors you practice on failures, that makes you better/competent at handling what comes along next.
- In addition to the ops people on call, there’s always a developer who has a pager
You can never return: … except when you can. From a block, that is. Returning from a block rarely works:
result = ['one', 'two'].each do |x| return x end => LocalJumpError: unexpected return
But, you can pass
breakarguments, which will allow you to assign return values from the block:
result = ['one', 'two'].each do |x| break(x) end => "one" result = ['one', 'two'].each do |x| next(x) end => ["one", "two"]
You can return from a
Page Speed is an open-source Firefox/Firebug Add-on. Webmasters and web developers can use Page Speed to evaluate the performance of their web pages and to get suggestions on how to improve them.
Like chef? Love capistrano? Check out chef-deploy, which “… Uses the same directory layout as capistrano and steals the git remote cached deploy strategy from cap and adapts it to work without cap and under chef.”
SFTUG FTW! Another successful SF Tracker User Group Meetup on 06/24. Watch for future events on the Meetup site.
Ask for Help
“Does anyone have Nginx URL rewriting fu?”
The pretty documentation is actually quite hard to work with. Does anyone else have a good reference?
Some developers who were granted early access to Palm’s new operating system said it was worth the wait. “We find it’s the easiest one to develop for,” said Christian Sepulveda, vice president for business development at Pivotal Labs. “It allows for a richer experience, like having a pop-up menu and background processing, which is helpful.”
Mr. Sepulveda’s company developed four of the first programs available for download through Palm’s app store, including an item for Twitter called Tweed.
Ask for Help
“Has anyone implemented mutli-table (class table) inheritance in Rails, as apposed to single table inheritance (STI)?”
- There are some plugins that nobody has tried, such as inherits_from
- What about a view to represent the super set of tables and rows?
“We’re looking for a dead-simple, drop-in JS rating or ‘starting’ plugin.”
Check out the start-rating jQuery plugin. Any other suggestions?
- RubyMine 1.1 + Latest Mac OS X Java Upgrade + configuring RubyMine to work with Java 1.6 = Complex FAIL. We downgraded to RubyMine 1.0.5 and it works again.
We’ve launched a Tracker Users Group in San Francisco, and the second meetup is on June 24th at 6:30pm at the Pivotal Labs office on Market St.
This second meetup will include a demo for new users; a rundown of the new features rolled out last night and soon to come; and a discussion of Story Estimation, Point scales, and the philosophy behind how they are used in Tracker.
Click the link below to become a member of the group and RSVP. We hope to see you there!
We’ve added some new features to Pivotal Tracker.
There is a new activity feed on the dashboard. The feed lets you quickly view recent events that have occurred in all your projects including new stories, comments and stories that have been accepted and rejected. You can subscribe to this activity feed using any blog reader that supports Atom. Click the Subscribe link above the feed or the feed icon in the browser address bar and your browser should handle the rest. Recent activity data is also available via the API.
Project Velocity on Dashboard
Another new feature on the dashboard is a small graph that shows the number of points accepted per iteration. The current velocity for each project is also displayed. If you hover over a project, you’ll see links to some of the more commonly used project pages, including members and settings.
Improved Project History
The project history panel should now be more readable. Event timestamps are relative now (for example, “2 hours ago”), and updates to the same story within a short period of time together are bundled together. For example, if you add a new story, and immediately move it to the backlog, this will appear as one entry in the project history. You can also subscribe to a project’s history feed by clicking on the feed icon in the browser’s address bar.
Follow your project on Twitter
To give even more visibility to the activity on your project, Tracker can now tweet project updates. Create a Twitter account for your project (or choose an existing Twitter account), and configure your Tracker project’s Twitter account settings on the Project Settings page. Remember – by default, Twitter accounts and tweets are public and searchable, so if you want to keep your project information private, make sure you enable the “protect my updates” option in your Twitter account settings.
If you select the “remember me” checkbox on the sign-in page, Tracker will do just that and you won’t need to sign in again after re-opening your browser. To clear this “remembered” state, log out or clear your browser cookies. Resetting your password will reset “remember me” on all computers where you have previously signed in.
Tracker now supports time zones, allowing you to see all dates in your local time zone, and giving all project members a consistent view of iteration boundaries. Every user has a default time zone (based on what your browser tells us), but it can be overriden on the My Profile page. Projects have time zones as well – this defaults to the time zone of the user who created it, but can be changed as well, in project settings. The project’s time zone controls when iteration boundaries occur. If a project’s iterations start on Mondays, and it’s time zone is PST, that means new iterations will start Mondays at midnight PST, and everyone in the world, will see the new iteration at that same time, even though they may be in different time zones. Someone in New York, for example, won’t see a new iteration until 3am their time.
More information about what’s new is available on the Pivotal Tracker recent updates pahge.
We’re starting a Tracker Users Group in New York, and the first meetup is on Jun 30, at 6:30pm, at the Pivotal Labs office on Chambers St. Click the link below to become a member of the group and RSVP. We hope to see you there!
by Russell Edens. He has a great take on why Erector is interesting, complete with code examples:
With erector [views] are first class plain old ruby objects. Why is this good? It gives you all the tools of inheritance and mixin’s for your views. That is cool. Especially for an application with multiple views of the same underlying models. You can refactor your views into base classes that derive and render the same data in different ways. This is object oriented design for views. Nice.
I’ve seen object oriented view code in other languages and it leads to some very powerful re-use that all OO programmers can understand. The most ambitious of these attemps was by an HR company …[that] created their own markup language that was object oriented. The nature of HR data is that it has very complicated rules regarding who can see what data and when. The OO design of the language allowed that to be abstracted to the base classes and a functional programmer simply focused on the problem at hand. They took it further, as all commercial enterprise applications do, and they allowed the customer to define new models and views. Those views were very easy to write with this advanced data access logic abstracted out. Their customers loved it. They wrote very advanced business applications on top of this abstraction.
Views as simple classes, methods, and objects in Ruby – perfect!
Erector Hello World:
class Hello < Erector::Widget def content html do head do title "Hello" end body do text "Hello, " b "world!" end end end end
For more see the Erector user guide.
A Scrum team found they were doing too much context-switching, so they applied a dash of Kanban. It’s an interesting example of Kanban principles in action.
We used the term Feature Flow to describe the goal of the team: to let features flow through the team without interruptions. Any feature that is in a state of waiting, or is simply taking more than a few days is analysed. It’s moved to done as quickly as possible by scrambling more team members. When we encounter features getting stuck, we don’t pick up more work, we try to find the root-cause of the stickiness and solve that. We increased the quality and capabilities of our build environment a few times for that very reason: to prevent future blockage in our flow of features.
When we introduced the ‘work-in-progress’ limit, we also temporarily stopped doing planning meetings, as our first target was getting the w.i.p. down to 8. The interesting side effect was, that we were working for a few weeks without the need for a planning session. So we stopped the fixed-date planning session and replaced it with an ad-hoc planning session whenever the ‘sprint-backlog’ was drying up. From our coarsely estimated product backlog our product owner introduced a couple of days worth of features each planning session. The great thing was that the priorities could change at the last moment, as long as the team hadn’t started working on a feature. As the Sprint planning meetings were always quite strenuous, the just-in-time one-hour planning sessions kept the teams energy at a constant.
A laundry list of stuff I’ve come across / been pointed to lately. What are your favorites (i.e. comments, please)?
Book: Scalable Internet Architectures by Theo Schlossnagle
Book: Release It! by Michael Nygard
Book: The Art of Capacity Planning by John Allspaw
Conference: Velocity 2009 in SJ – it’s only a month away.
Presentation: Operational Efficiency Hacks by John Allspaw
John Allspaw’s blog, “Kitchen Soap – Thoughts on Capactiy Planning and Web Operations”…(excerpt from latest post: “I can’t tell you how ripped I get when people say things like this: ‘cloud computing means getting rid of ops’ “)
WebOps Visualizations Flickr Group
Apis / tools:
Chef. This is step one, or as Allspaw puts it “if there’s only one thing you do, automated configuration and
deployment management should be it”. We run chef-solo in our cap deploy. Don’t miss Cooking with Chef 101.
God for process management.
Xray for ruby process inspection.
Elif is Perl File::ReadBackwards ported to ruby.
Book: Think Unix