has_defaults is now a gem

  • has_defaults is now a gem, no longer a plugin.
  • The plugin version no longer exists. Note that plugins are no longer supported in 3.2.
  • If you are working on an application that has the plugin version of has_defaults there is no advantage to be gained from upgrading the gem. The gem is there for you should you one day upgrade to Rails 3.2+.
  • Please don't use the defaults gem which we original forked away from in 2009. It sets defaults when a field is `bl...

Err http://de.archive.ubuntu.com [...] 404 Not Found [IP: 141.30.13.20 80]

I've got often this error on just one server:

Err http://de.archive.ubuntu.com precise/universe amd64 Packages
404  Not Found [IP: 141.30.13.20 80]

But there was no problem with the network connection or the de.archive.ubuntu.com server.

After I deleted the local lists cache with rm -r /var/lib/apt/lists it works again.

Consul 0.3.0 has a shortcut to quickly create an action map for CRUD controllers

In moderately complex authorization scenarios you will often find yourself writing a map like this:

class NotesController < ApplicationController
  power :notes, :map => {
    [:edit, :update] => :updatable_notes
    [:new, :create] => :creatable_notes
    [:destroy] => :destroyable_notes
  }
end

Because this pattern is so common, Consul now has a shortcut :crud to do the same:

class NotesController < ApplicationController
  power :crud => :notes
end

rake spec + rails_admin = weirdly failing specs

If you use rails_admin, your specs pass with the rspec binary, but not using rake spec (or rake parallel:spec etc), put this at the top of your spec_helper:

ENV['SKIP_RAILS_ADMIN_INITIALIZER'] = 'false'

Don't ask.

This is probably also true for cucumber, your env.rb would be the right place.

How to deal with: Puppet::Parser::AST::Resource failed with error ArgumentError: Invalid resource type [...] at

  1. Check if you have puppetsync enabled on the master and client

    [main]
    logdir=/var/log/puppet
    vardir=/var/lib/puppet
    ssldir=/var/lib/puppet/ssl
    rundir=/var/run/puppet
    factpath=$vardir/lib/facter
    templatedir=$confdir/templates
    pluginsync = true
    
  2. Check in /var/lib/puppet/lib there should be a [...].rb somewhere. Delete it and look if it get copied again after with the next puppet run.

  3. If you are using environments make sure the puppetmaster is also in the correct environment. (d...

Get the initial username which you used to login to your Linux system

If you need the initial user which you used to login to your Linux system or the time when you login you can do:

whoami

One purpose of this could be the .bashrc to show different Bash Prompts for root to different users:

if [ $(whoami) = "root" ]; then
   PS1='${debian_chroot:+($debian_chroot)}\[\033[41;33m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
   PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

Difference between class_inheritable_attribute and class_attribute | martinciu's dev blog

How to make class_attribute behave like class_inheritable_attribte which no longer exists in Rails.

Rack dies when parsing large forms

  • Rack has a limit for how many form parameters it will parse.
  • This limit is 65536 by default.
  • There is a bug in Rack that will incorrectly count the number of input fields in nested forms. In my case a form with 1326 input fields was enough to break the default limit.
  • If Rack thinks your request is too large, the request will fail with a low-level Ruby message like Fix: "undefined method `bytesize' for #" or the standard Rails error box.
  • You ...

RSpec claims nil to be false

RSpec's be_false behaves unexpectedly:

nil.should be_false
# passes, as the expectation returns true

If you want to check for false, you need to do it like this:

nil.should == false
# fails as expected

Wat?

See also

RSpec: be_true does not actually check if a value is true

Deal with error: Expected foo_trait.rb to define FooTrait

Lately, I came across a nasty error. I had a class Article that included FooTrait and BarTrait. In BarTrait, I then accidentally called a non-existent method:

has_defaults :dummy => Dummy.non_existent_method

From that moment, no page would load anymore but always display an exception: Expected foo_trait.rb to define FooTrait. That trait had nothing to do with BarTrait.

Since it doesn't tell you what's wrong, you either remember where you were working last or you need to check all [traits](https://github.com/makandra/modul...

Some useful Unicode chars

Copy and paste at will, they're free!

  • German quotation marks: „ “ (Ubuntu-Hotkey: AltGr+v and AltGr+b)
  • English quotation marks: “ ”
  • En dash: –
  • Em dash: —
  • Ellipsis: …

Some useful hints for users of Ubuntu Linux

  • Your Ubuntu comes with a searchable list of Unicode chars. Go to Accessories / Character map. Ctrl + F searches for a character by name.
  • If you want to write all of them (and more) yourself, [configure a compose key](https://makandracards.com/makandra/1030-insert-an...

BigDecimal#inspect for people who aren't cyborgs

I wonder if the guy that wrote BigDecimal#inspect has a tragic backstory that explains why he hates humanity.

- Tim Pope

I finally gave up and made BigDecimal#inspect return BigDecimal#to_s:

p BigDecimal.new('2.3') #=> "2.3"

Use the attached initializer.

Don't use Ruby 1.9.2

Ruby 1.9.2 is very slow when loading files, especially starting Rails servers or running specs takes forever.

Do yourself a favor and upgrade to 1.9.3.

Order of multiple "rescue_from" statements might be unexpected

Take care when using rescue_from to rescue multiple errors.

The following will not work, because later rescue_from statements take precedence and so the first one will never be called:

rescue_from AccessDenied, :with => :redirect_to_home
rescue_from Exception, :with => :render_500

Simply reverse them.

GNOME3 Notifications For Skype ~ Web Upd8: Ubuntu / Linux blog

  • Also works on Gnome 2
  • Much prettier than Skype notifications
  • Better visibility

Do not use "find" on Capybara nodes from an array

In a nutshell: Capybara's find will not work properly on nodes from a list. Don't find on elements from a list.

Background

Consider this HTML:

<div class="message">
  <h2>Hello World</h2>
  Lorem ipsum...
</div>
<div class="message">
  <h2>Hello Universe</h2>
  Lorem ipsum...
</div>

Now let's say you obtain a list of all such message containers as an array:

messages = page.all('.message')

And then you look at their titles like this:

messages[0].find('h2').text
=> "Hello W...

Use Nokogiri to convert CSS to XPath

CSS is a lot easier to write and read than clumsy XPath expressions. So when you need to use XPath, you can have Nokogiri help you out on creating it.

Simply use Nokogiri's xpath_for:

Nokogiri::CSS.xpath_for('#foo')
# =>  ["//*[@id = 'foo']"]
Nokogiri::CSS.xpath_for('#foo .bar:nth-of-type(2)')
# => ["//*[@id = 'foo']//*[contains(concat(' ', @class, ' '), ' bar ') and position() = 2]"]

Since XPath is more powerful you may still need to do some hardcore XPath hacking eventually. But at least you don't need to for simple cases.

LibreOffice won't embed most fonts into PDFs (with fix)

  • LibreOffice Impress, Writer, etc. doesn't embed most fonts into the PDFs it generates.
  • This means if you share a slide show with a font that is not Arial or Times, other people will get an error message "Cannot extract the embedded font 'XYZ Some characters may not display or print correctly" and unreadable text. Everybody loses.
  • Some forums will recommend that you tick "PDF/A-1a" in the PDF options to make LibreOffice embed fonts. In reality, thi...

Rails 2's CookieStore produces invalid cookie data, causing tests to break

Note that this seems to affect only recent Rails 2 versions.

You will not encounter this until you are writing to the cookie more than once, but when doing so, integration tests (Cucumber) may break for you with this error:

You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[] (NoMethodError)

Background

The regular/short cucumber backtrace is not of any help but looking at the full trace reveals that ActionPack's `actio...

How much should I refactor?

The Rails community has been abuzz with object-oriented programming, SOLID principles, laws, design patterns, and other principles, practices, and patterns. We’ve (re)discovered new tools and techniques to separate and reuse logic, making code easier to test, understand, and maintain. Now that we’ve learned about all these new tools, when do we use them?

LibreOffice Impress: Distorted text letters in presentation mode

Upgade to LibreOffice 3.5.3+ or disable hardware accelleration in Tools → Options → LibreOffice → View → Graphic output.

CSS3 Media Queries have reached recommendation status

Media Queries have reached W3C Recommendation on June 19th 2012.

If you were interested in other (future) web standards you can have a look at recent W3C publications.