I had a great conversation with Darryl Taft at eWeek last Friday about our experience developing for webOS. Much of of our conversation is in his article: Why Some Developers Think the Palm Pre Could Upstage the iPhone.
On April 29, 2009 Pivotal Labs hosted the inaugural San Francisco Pivotal Tracker User’s Group. It was a great success! As an avid Pivotal Tracker user (and sometimes developer) for over 3 years I am very interested in making Tracker a better product and teaching others how to use Tracker to improve their organization.
Here are a few thoughts I took away from the meeting, and a few tips and tricks.
I Created a Project… Now What?
Once someone has created their first Project in Tracker, we don’t give you much guidance on what to do next. People need help getting past the “blank page problem:” faced with an empty project, it’s daunting to get started. Did you know you can create a demo project that’s filled with example Stories?
First, Login and click Create a Project
Next, click create a demo project
Check out the results!
What are These Different Things?
What is the Difference between a Story, Bug, Chore, and Release? When should I use one versus the other? Good questions! To get started, check out the Stories section of the FAQ.
Why Can’t I Move All My Stuff into the Current Panel?
This is one of our top questions. The answer is this: Tracker doesn’t think you can get it done. Or, more specifically, history has shown that your team completes the number of points per iteration indicated by your Velocity. If history shows that you get 7 points done per iteration, Tracker will move the top 7 points worth of stories into the Current panel. Again, more details are available the Velocity and Iterations section of the FAQ.
This might help: to minimize this confusion, you can stack your Current panel on top of your Backlog (future) panel, giving you one big list. Choose View => Include Current in Backlog
What’s in a Name?
At Pivotal, which is a large consulting practice first and a developer of Pivotal Tracker second, we have always refer to the tool as “Tracker.” But, at the user’s group we continually heard people refer to it as “Pivotal.” Interesting!
That’s it for now, but look for more Tracker (or Pivotal) tips and tricks in the future!
Today we’re starting a new weekly posting on Blabs for those of you looking for engineering jobs. We hope you find it useful, and if you’re happily employed please ignore this.
At Pivotal Labs, one of the services we provide is bootstrapping startups, including helping them interview and hire. We currently have clients looking for skilled engineers to build their development teams. This is an excellent opportunity to learn Extreme Programming by working side-by-side with Pivotal’s talented and experienced developers while at the same time getting in on the ground floor of a small and dynamic product team.
Here’s a short description of Honk and Mavenlink, two Pivotal Labs clients currently looking for developers. Their full job postings follow at the end of this post.
Mavenlink is a funded startup that is changing the way people find experts who can help them and is providing the necessary tools to get their work done online. We are founded on the principle that virtually everybody needs qualified professional services that are readily accessible, affordable, and there when they need them. We’ve been working with Pivotal Labs to get our product launched, so we’re serious about being agile and we’ve got the right engineering process in place. This is a unique opportunity to join the Mavenlink team and contribute significantly to the direction of the company. We’re looking for someone who is not only passionate about development, but also shares our vision for the tools and capabilities necessary for making remote work better than working in person for both the client and the maven.
Honk.com is a new online automotive website that will make car shopping fun and social. We will enable consumers to experience a new way to explore new cars. We have partnered with a top social website to deliver this new way of car shopping and are funded by one of the largest media companies in the world. Our small team is made up of an experienced group of humble, efficient, and hyper-passionate individuals who are veterans of the automotive industry and social media space. We are proud of our ego-less culture, one that promotes team thinking, not individual accolades. If you’re interested in helping prove that social media and car buying go hand in hand, social networks serve a bigger purpose than keeping up with one’s day, and a small team can outdo the work of an army – then we may have a seat waiting for you.
If you are interested or for more information please contact each company directly. This is an exclusive service provided to our clients, no external companies or recruiters please.
Full job postings follow.
Mavenlink is a funded startup that is changing the way people find experts who can help them and is providing the necessary tools to get their work done online. We are founded on the principle that virtually everybody needs qualified professional services that are readily accessible, affordable, and there when they need them.
We are looking for a Ruby on Rails developer to join our team. We’ve been working with Pivotal Labs to get our product launched, so we’re serious about being agile and we’ve got the right engineering process in place. This is a unique opportunity to join the Mavenlink team and contribute significantly to the direction of the company. We’re looking for someone who is not only passionate about development, but also shares our vision for the tools and capabilities necessary for making remote work better than working in person for both the client and the maven.
- Developing Mavenlink’s Ruby on Rails application
- Test Driven Development
- Pair Programming
- Aggressive Refactoring
- Using Pivotal Tracker to estimate and knock down stories
- Participating in stand-ups and retrospectives to improve
Mavenlink’s product, process, and culture
Additional Skills desired:
- Experience with rSpec, Webrat, and other testing frameworks
- Rails application deployment experience
Compensation and benefits:
- Competitive salary
- Equity stake
- Full medical and dental
Interested? Send your resume to email@example.com
Honk.com is a new online automotive website that will make car shopping fun and social. We will enable consumers to experience a new way to explore new cars, focusing on what other real people actually think, not product specifications or biased editorial. Our site will be 100% consumer driven with no journalists or former race car drivers telling you what minivan or sedan you should purchase. Instead, users will find real people like yourself sharing their opinions and experiences. We have partnered with a top social website to deliver this new way of car shopping and are funded by one of the largest media companies in the world. Thankfully, our partners allow (and encourage) us to remain financially independent, unpolitical, and fast-moving… a true start up.
Our small team is made up of an experienced group of humble, efficient, and hyper-passionate individuals who are veterans of the automotive industry and social media space. We are proud of our ego-less culture, one that promotes team thinking, not individual accolades. If you’re interested in helping prove that social media and car buying go hand in hand, social networks serve a bigger purpose than keeping up with one’s day, and a small team can outdo the work of an army – then we may have a seat waiting for you.
Honk is developing a platform of distributed applications and a destination website that will engage consumers’ existing social networks. To be clear, we are not building yet another community or social network. Many of our social applications will reside on our partners’ sites with the intent to drive users to honk.com for a richer experience, including unique content, interaction, and transaction-oriented tools. Our integration with our core partner is currently underway and our beta launch is scheduled for 5/27. We will continue to expand our product over the next twelve months. In addition to deep knowledge of Ruby on Rails and Agile / Test-Driven Development precepts, we hope you have a thorough understanding / are comfortable with:
- Amazon S3/SQS/EC2
- CSV and XML data feed integration
Previous experience working in online automotive or social media is desired, but definitely not required. Honk is currently co-located in San Francisco and Los Angeles. Honk headquarters is currently located in West Los Angeles, right on the border of Santa Monica. Our ideal candidates should reside in one of these two major metro areas, although we are open to “off site” developers who have the right skills and background.
Please send inquiries to Bruce Krysiak, CTO: firstname.lastname@example.org
- Perform_caching is not respected by Rails.cache methods.
config.action_controller.perform_caching does not appear to affect the Rails.cache methods.
Rails 2.1 introduced a new custom caching mechanism:
result = Rails.cache.fetch('key') do # create and return item for this key end
It would be really nice if, for testing, you could set a configuration variable that would force a cache miss every time and always execute the block associated with the fetch. However it appears that, understandably, action_controller.perform_caching only affects the kinds of caching implemented by ActionController (page, action, fragment) and not this caching mechanism that is implemented by ActiveSupport::Cache::Store. Looking at the code, is appears there is no way to disable this caching mechanism other than supplying :force => true to the fetch call to force a cache miss.
- W3C refusing to serve DTDs to ‘misbehaving’ clients.
One of our applications that has not been deployed for a while is starting to see issues from IE users. After digging, we found this: W3C’s Excessive DTD Traffic and this w3.org DTD/xhtml1-strict.dtd blocks Windows IE users?. To summarize, w3.org got tired of getting slammed with non-cached DTD requests, and cut off misbehaving user agents (ones that do not cache the DTD). IE is one of these.
We have several things so far, none of which work:
Forcing xhtml DTD to be a SYSTEM dtd, and load the DTD files off the local server. This didn’t work – IE serve the pages as raw unrendered html (must
have thought it was XML?)
Use a PUBLIC doctype pointing to the DTD served on our server. Alas, this had the same problem as the SYSTEM doctype in #1 – raw unrendered HTML.
Not using XHTML (e.g. have as root tag). This didn’t work (haven’t
looked into why yet).
Ideas are welcome.
- Range#min, Range#max: Don’t use them. Use Range#first and Range#last. Min and max are not overridden by Range so fall back onto Enumerable which then converts the Range into an Array first!
It looks like Rubymine 1.0 is out.
Shared examples pollute! If you import a shared example into an RSpec group, the before :each appears to run for all examples in that spec, not just the ones in the current scope.
“Anyone have experience dealing with failures in Amazon SQS?”
- Amazon Simple Queue Service is a reliable, highly scalable, hosted queue for storing messages as they travel between computers. You can place tasks in a queue and have worker systems extract and process them. However processing a queue item does not delete that item; you have to explicitly delete a queue item. The problem occurs when a persistent catastrophic failure occurs during processing of an item, e.g. a process core dump (say RMacick encounters an Image of Death) that does not produce an exception. Eventually SQS will timeout and mark the task as requiring processing again. Eventually all yor workers will try to process the queue item and die. There was a lot of discussion (e.g. communicate task status back to app server – too chatty, not scalable) but no obvious solutions arose that will work in the particular environment.
SF.TUG: The first Tracker User Group will meet tomorrow. This one is somewhat exploratory, to see what the community wants out of it, so it is being kept purposefully small.
should_not is not the same as !=. Apparently, it is a feature of Ruby that you can override == but you cannot override !=. Rspec implements == but cannot implement !=. Sometimes you will get objects that will give different results when compared using should != as opposed to should_not. Use should_not.
Aviary.com is an online Photoshop-like too. They also have a vector editor. It is free, however they may reuse images you store on their site.
We are getting a tool from Delicious Monster to automate our library. It will scan barcodes, categorize books and allow people to check books in and out.
Ask For Help
- GemInstaller can fail to install either gem if it encounters two gems in the repository that have the same name but differ in case. Don’t ever change the name of a gem or Adam Will Find You.
- Wrapping multiple named_scopes in a class method then attempting to compose that into another list of named scopes works most of the time :( If it is the first method in the new chain of named scopes, then it will work, otherwise, not so much (it forgets about any constraints from prior named_scopes). This pattern is best avoided.
- We are pleased to announce the existence of gems.pivotallabs.com, a maintained repository for public Pivotal gems. To see it’s contents try:
gem list --remote --source=http://gems.pivotallabs.com
Our favorite recipe site Cookstr, developed by Pivotal Labs, has received two nominations, and been named an honoree for the 13th Annual Webby Awards. The Webby Awards is the leading international award honoring excellence on the Internet.
Cookstr is a nominee in the Best Practices category, along with NYTimes.com, Digg, WebMD Health, and The Daily Beast. Cookstr has also been nominated for the Food and Beverage category, and has won an Honorary Mention in the Lifestyle Category.
We’d like to congratulate the Cookstr team on this achievement, and encourage everyone who’s a fan to vote for Cookstr in the People’s Choice Awards!
libxml-ruby doesn’t work on Windows (surprise, surprise!). One of our teams discovered that the version of Ruby on Windows has a XML::Parser class, but it is NOT libxml-ruby even if you try to install the gem. A workaround is to rename or delete the libxml.so file, and then you can use the real XML::Parser.
A few Pivots just whipped up a pivotal-apdex gem that allows you to calculate your application’s Apdex performance index via a simple command line tool by parsing Nginx or Apache server logs. Apdex is an emerging standard in measuring application performance. We were inspired by Lew Cirne, CEO of New Relic, who gave a talk about Apdex a few weeks ago at Pivotal’s office.
- memcache-client is broken in the sense that if it fails to connect to your memcached server, it will automatically try a new server. It does this 20 times. Not what one would expect. You can turn off this weird behavior by setting
:failover => false
Ask For Help
- When writing view specs, is there a better way to include your helpers if all helpers are not automatically included in ApplicationController? Some suggestions from the crowd: mock the helpers (test helpers separately), or reopen the template and define helpers there directly.
Pivotal Tracker has just been updated with new features.
Labels Enhancements & Saved Searches
There’s a new panel on the project page that will help you organize and keep track of related stories in your project – Labels and Searches. Open it using the View menu, or with Shift-L. On this panel, you’ll see all labels in your project, as links, with numbers indicating the number of stories that have yet to be accepted. Click on a label to see stories with that label.
You can now save any search, by clicking on the disk icon at the top of search results. Saved searches appear below labels, on the Labels and Searches panel.
The new panel also allows you rename or delete labels, and delete saved searches. Hover over a label or saved search, and you should see rename and/or delete buttons.
Ability to apply and remove labels to selected stories
It’s now possible to apply labels to multiple stories, using the Actions menu at the top of the project page. Select stories using the small checkboxes to the right of story titles. The same action also allows you to remove labels.
Ability to export selected stories to CSV
You can export selected stories in the project, also by using the Actions menu. One possible use of this feature is to move or copy stories from one project to another. Select some stories, export them to CSV, and import that file into another project.
API: Get stories by iteration or iteration group
We’ve made it easier to retrieve stories by iteration through the API. You can get stories based on an arbitrary iteration range, done iterations, the current iteration, or iterations in the backlog.
See the API Help page for more details and examples.
Rubymine, just released a new beta revision 856. So far it “seems to work”.
When using Object-Mother patterns for creating objects in tests (i.e. Fixjour, FactoryGirl) one gotcha that caused one of our teams some pain was when inadvertently setting an object and object_id for the same association. For example, setting
person = @nateand
person_id = @david.idin the same object creation will cause really weird problems. Our team debugged and solved this by validating object creation … essentially writing tests for your test objects.
Try mapping SHIFT + Space to the underscore character, and save your underscore finger from unnecessary travel.
Author Mislav Marohnic discusses Coral, a way to pull in and organize Git repositories that extends and partially replaces RubyGems. Although still in the early stages, Coral aims to brings sanity to maintaining your own third-party forks across projects.