Joe Moore's blog



Joe MooreJoe Moore
Standup 11/07/2008: Selenium for Flash
edit Posted by Joe Moore on Friday November 07, 2008 at 05:23PM

Interesting Things

  • Teaser: Selenium for Flash! We've developed a Selenium-like framework for Flash. It's pre-alpha, and needs to be extracted from it's current home inside a project. Are you interested in a Selenium-like framework for Flash, or have you written one yourself? Let us know!
  • STI-weirdness. Rails surprise of the day: given a query of a has_many :photos where Photos has STI subclasses (got that?) Rails will build a SQL query that includes the subclass types of Photo, which you might not want:

    foo.photos.find_by_type("Photo") 
    # query will have "... WHERE type IN ('Photo', 'OriginalPhoto', 'ThumbnailPhoto')"
    
  • It appears that the retardase_inhibitor might not work with Rails 2.1.X due to fixes in ActionMailer.

  • JetBrains has been hard at work: they have released both a new Ruby plugin for IntelliJ, and a ruby-specific IDE (based on IntelliJ) named RubyMine.
  • Check out Pivot Jonathan's wife's art exhibit at Artist-Xchange Gallery in San Francisco, Friday 11/7 from 7-10pm:

    Artist-Xchange Gallery
    3169 16th Street
    San Francisco
    CA 94103

Ask for Help

"I want to create a custom launcher for Firefox 2 and Firefox 3 with different profiles. Perhaps the real question is how do we create a custom version of a Mac application launcher, passing in the arguments we need?"

... without having to invoke it on the command line every time.

"We're trying to delete cookies in our Controller, but they keep appearing in the headers anyway."

Suggestion: make sure you are specifying your URL paths and domains correctly.

"Why won't our CSS and other assets load the first time when accessing an SSL-protected domain on Engine Yard?"

It's most likely not Engine Yard or Firefox 3's fault. More research needed.

Joe MooreJoe Moore
Standup... and VOTE!
edit Posted by Joe Moore on Tuesday November 04, 2008 at 05:28PM

Interesting Things

  • It's election day! If you are taking the time to read this geeky blog, you better have voted!

Ask for Help

"Is there some order-dependency issue with `has_many_polymorphs?"

We have a test that passes in isolation, but fails when the whole file is run.

"Any advice to setting up Lucine to allow us to search for strings with special characters, such as '-', without having to wrap them in quotes?"

We have some Lucine knowledge here but feel free to give us your suggestions as well.

Joe MooreJoe Moore
Standup 10/20/2008: Preventing Flash from Reloading
edit Posted by Joe Moore on Monday October 20, 2008 at 03:39PM

Interesting Things

  • We discovered why a Flash widget was reloading itself: changes the CSS position value. We were hiding the Flash widget by moving it's containing div off the page with position: absolute; left: -9000, and removing the class that had those values to show it again. It turns out that changing that position value causes the Flash to reload. By keeping the position:absolute setting when we both show and hide our container div, the Flash no longer reloads.

Ask for Help

"When using Rails's date_select helper, is there a corresponding helper method to turn that date format into a Date object in the controller?"

Some Snippets are available, but how about a Rails built-in solution?

  • Where am I? -- Ever need to find the name of the method you are currently within? Here's a this_method method! The magic is in the REGEX, of course.
module Kernel
  private
  def this_method
    caller[0] =~ /`([^']*)'/ and $1
  end
end
  • One project wanted to test a very ActiveRecord-specific Module in an isolated, generic way. After spending time researching techniques of mocking and stubbing the many, many ActiveRecord methods that would be touched, they decided to just dynamically create an ActiveRecord and a DB Table for it on the fly! They even used single table inheritance (STI)
  describe "MyMagicModule Mixin" do
    before(:all) do
      ActiveRecord::Base.connection.create_table "some_base_models",
                                                   :force => true do |t|
        t.string   "name"
        t.string   "type"
        t.integer  "some_model_b_id", :limit => 11
      end
    end

    after(:all) do
      ActiveRecord::Base.connection.drop_table "some_base_models"
    end


    class SomeBaseModel < ActiveRecord::Base;end

    class SomeModelA < SomeBaseModel
      include MyMagicModule

      belongs_to: :some_model_b
    end

    class SomeModelB < SomeBaseModel
      include MyMagicModule
    end

    it 'should use special belongs_to stuff from MyMagicModule' do
       model_a = SomeModelA.create!(
                        :name=> "Model A",
                        :some_model_be => SomeModelB.create!(:name => "Model B"))
       # test the functionality from MyMagicModule
    end
  end

Joe MooreJoe Moore
Pivotal Labs Tech Talks now on iTunes!
edit Posted by Joe Moore on Saturday October 11, 2008 at 09:34PM

At Pivotal, we host tech talks for our and guest developers. You can now subscribe to these video and audio tech talks on iTunes!

Just search for "Pivotal Labs" in iTunes, or click on the 'Video' or 'Audio' buttons on our Talks page. The current playlist includes:

  • Scrum - Christian Sepulveda gives an overview of the Scrum development process as it applies to software.
  • HAML - Felix Mario and Aaron Peckham talk about HAML.
  • Vertebra - Ezra Zygmuntowicz talks about Vertebra, the distributed cloud application programming platform Engine Yard is building.
  • Fire Eagle - Seth and Blaine talk about Fire Eagle, a location-awareness provider for online applications. Fire Eagle is a Yahoo! venture and gives applications and websites user-configurable information about the user's location.
  • New Relic - Lewis Cirne demos New Relic's real-time Rails performance monitoring and analysis tool.
  • Devver - Benk Brinkerhoff and Dan Mayer talk about Devver
  • Rubini.us - Evan Phoenix answers questions about Rubinius, a Ruby virtual machine and compiler written as much as possible in Ruby.

Joe MooreJoe Moore
Standup 10/9/2008: IE 6 Alpha Transparency Fixes?
edit Posted by Joe Moore on Friday October 10, 2008 at 04:36AM

Ask For Help

Once again, a project is asking for everyone's favorite IE 6 .PNG alpha transparency fixes -- more rounded corners! Examples include the CSS Behavior code, using .PNGs or .GIFs with on/off transparency, regulating IE 6 to the square Web 1.0 world, and even using on/off transparency and just knocking a pixel or two off of corners for a "good enough" rounded look.

What are your favorite IE 6 rounded-corner and/or alpha-transparency fixes?

Joe MooreJoe Moore
Standup 9/17/2008: IE is so Web 1.0
edit Posted by Joe Moore on Wednesday September 17, 2008 at 04:27PM

Interesting Things

One client decided that Web 2.0-style rounded corners are only needed in Firefox and Webkit-based browsers because they are "free" with CSS properties built in for those rendering engines: -moz-border-radius and -webkit-border-radius. Internet Explorer is going to be left in the 1.0 world, at least for now, due to the over head of managing rounded corners.

Feel free to promote your personal favorite rounded corner techniques in the comments.

Joe MooreJoe Moore
Standup 9/16/2008: Hiding divs, Hpricot hates Windows
edit Posted by Joe Moore on Tuesday September 16, 2008 at 04:31PM

Interesting Things

Ask for Help

"We need to hide a flash widget without setting it to display:none, which causes it to be loaded from the server again when display:none is removed."

Hit me with your div-hiding techniques!

  • Move it off the screen with position:absolute; left:-9000px
  • Shrink it down to nothing with visibility:hidden;height:0;width:0 but watch out for any IE 6 minimum height/width issues
  • Similar to the above, hide it with width:0;overflow:hidden;

Joe MooreJoe Moore
Standup 09/08/2008
edit Posted by Joe Moore on Monday September 08, 2008 at 05:02PM

Interesting Things

  • As suggested in 09/03, one project switched to using Solr for search indexing. We were warned that wide range queries might be slow (looking for a value between 1... 10000) could be very slow, but it is not, at least with 400K indexed documents. We'll watch out for slowdowns as the number of indexes increases.

Ask for Help

"JSUnit tests do not show line numbers for assertion failures, which makes it hard to know which assertion failed. Suggestions?"

Have fewer assertions per test, or use the message argument, such as assertEquals(foo, bar, 'foo should be the same as bar.').

"Is there any way to see test failure stack traces as soon as a test fails or errors? This would be especially nice for slow-running Selenium tests."

A few Pivots remember hacking on Test::Unit and Rspec to display failure details immediately, but more research is needed. Perhaps there's a plugin?

"Design Adam's beard!"

Pivot Adam is shaving is beard and is looking for facial hair suggestions. Over the years he has displayed many of the "standard" beards and mustaches, so it's time to get creative. Look to The Quest For Every Beard Type for inspiration. Here is your canvas:

Joe MooreJoe Moore
Standup 09/04/2008
edit Posted by Joe Moore on Thursday September 04, 2008 at 05:11PM

Interesting Things

Ask for Help

"Is there something wrong with Net::SSH in the latest versions of Capistrano? I can't deploy to localhost..."

Not that anyone knows of. Have you tried turning it off and on again? The power button... it's the little glowing button on the front... the button on the front... Are you from the PAST?

"Is there a good ruby Gem or Plugin for working with the Google Charts API?"

One pair used gchartrb but abandoned it almost immediately. So far, it's string << string << string.

"How do you use Javascript included in a Desert plugin? Is it included automatically with Desert-magic?"

Unfortunately not. Desert plugins should have an install.rb that copies the Javascript to the public/javascripts directory in your project, but few actually have this (at least at Pivotal.) For now you have to copy any Javascript into that directory yourself.

Other articles: