unorganized.net directly from the brain of Eike Bernhardt

28Oct/110

Mongoid Cache Sweeper

I just needed to add a Cache Sweeper in a Rails 3.1 app for a Mongoid model.

Using a ActionController::Caching::Sweeper didn’t run for updates on the models (even though it should work for non-Mongoid-models), so I ended up using a Mongoid::Observer to invalidate the cache when a model was updated.

To seperate the observers from the models, I created a app/observers directory and used the following code to automatically load the observers:

# mongoid observers/sweepers
config.mongoid.observers = Dir["#{config.root}/app/observers/*.rb"].collect do |full_name|
  File.basename(full_name,'.rb').to_sym
end

This is the app/observers/city_observer.rb file:

class CityObserver < Mongoid::Observer
  def after_create(city)
    expire_cache_for(city)
  end

  def after_update(city)
    expire_cache_for(city)
  end

  def after_destroy(city)
    expire_cache_for(city)
  end

  private

  def expire_cache_for(city)
    # expire fragments/pages for city
    @c ||= ActionController::Base.new

    @c.expire_fragment("city_#{city.id.to_s}")
    if city.state.present?
      @c.expire_fragment("state_#{city.state.id.to_s}")
    end
    if city.country.present?
      @c.expire_fragment("country_#{city.country.id.to_s}")
    end

    # and expire the continent page cache
    @c.expire_page("/continents/#{city.country.continent.slug}")
  end
end

Since the expire_fragment/expire_page functions are not defined in the observer, I create a ActionController::Base object to call them on that.

With this, a model update expires cached pages

31Mar/093

OS X: Ignore USB Storage device temporarily

I needed to ignore an USB storage device, or at least disable the automount feature for it, because I wanted the USB device to be available for VirtualBox.
There does not seem to be an device-specific ignore functionality, but in my case it was enough to temporarily unload the USB storage kext:

sudo kextunload /System/Library/Extensions/IOUSBMassStorageClass.kext

This will disable all USB storage media temporarily!
When you are finished using the USB storage device in VirtualBox, shut it down, and then do a

sudo kextload /System/Library/Extensions/IOUSBMassStorageClass.kext

to restore the USB storage functionality.

Filed under: Mac 3 Comments
19Jan/090

Open SSH Connections with Butler

How to use Butler, screen, SSH and some shell Skripts to open SSH Connections to some servers.
First, create a directory which will contain the script(s) to connect to the servers – I use ~/bin/Terminals. In that, place a file containing the following code:

#!/bin/bash
exec ssh -t `basename $BASH_SOURCE` screen -DR ; exit

The filename should be the servername to connect to, you can use ~/.ssh/config to define short aliases for your servers:

Host myshortalias HostName long.hostname.tld User ausername

This allows you to do ssh myshortalias to connect to the server in question. So, to connect to this server, name the file in ~/bin/Terminals myshortalias.
Make the myshortalias file executable: chmod 755 myshortalias
Try to open a connection via the myshortalias file: ./myshortalias — if this fails, you problably don’t have screen installed on the server – I really recommend to install it.
OK, if that works, disconnect from the server, and open the Butler Configuration.
Expand the “Hidden” elements, if they are not visible. Select “Add File” from the plus button. Navigate to the ~/bin/ folder and select the “Terminals” folder to add it to the Butler Configuration.
Select the “Terminals” container, open the “Triggers” tab, assign a Hot Key, change mode to “Opens a menu near the mouse”.
Select the “Terminals” folder, select the “Menu Filter” tab, change ‘Menus show…’ to “this folder’s content with X levels of recursion”, activate “Translate subfolders into menus”.
Select the “Options” tab and change the ‘Open with…’ setting to “Terminal” (or iTerm or …).
Pressing your hot key should now show a menu with the myshortalias script. You can add subfolders to the ~/bin/Terminals folder to group your servers. To add a server, just copy (or even better: hard-link) the myshortalias file to a new name which corresponds to a Host config in ~/.ssh/config.

Filed under: Mac No Comments
25Sep/070

Thunderbird reply_regexp beibringen

Früher, im mutt gab es das schöne “reply_regexp” um die ‘AW:’-Einträge in den Replies von Windows-Mailern rauszufiltern .. lange Zeit habe ich das im Thunderbird vermisst.
Doch nun stolperte ich endlich über Thunderbird FAQ: Aw statt Re und die darin beschriebene user-pref macht nun auch im Thunderbird endlich das vom mutt gewohnte:

user_pref("mailnews.localizedRe", "AW,Aw,Antwort");
Filed under: Computers No Comments
9May/070

Mail.app im vertikalen Layout

Finally! Zufällig bin ich grade über http://harnly.net/software/letterbox/ gestolpert, was Mail.app zu einem vertikalen Layout verhilft, was ich dann doch sehr vom Thunderbird gewöhnt bin.

Nice!

Filed under: Computers, Mac No Comments
16Jan/070

Spass mit Druckern

Auf der Suche nach der Möglichkeit, eine riesige Mindmap auszudrucken, bin ich über zwei nette Programme gestolpert:

CocoaBooklet ermöglicht es, zusammenfaltbare Booklets auszudrucken

PosteRazor erlaubt es, Grafiken auf mehreren Seiten auszudrucken, und sollte somit die Lösung zu meinem Problem sein.

Filed under: Computers, Mac No Comments
4Jan/070

Mac Mini und der Spachtel

Wir haben auf der Arbeit einen neuen Mac Mini, der aber mit 512 MB etwas wenig Hauptspeicher hatte. Also mehr Speicher bestellt, und ich sollte den kleinen dann aufrüsten.

Nach etwas google befragen stellte sich dann heraus, das man dem Gehäuse wohl am besten mit einem Spachtel (!) zu Leibe rückt, um an das Innenleben ran zu kommen.

Gesagt, getan, sowas hat man ja in der Werkzeugkiste, also ran an den Speck … eeeh, Mac Mini. Nach einigem Fluchen hatte ich das Gehäuse dann endlich auf und konnte den Speicher ersetzen, das war dann alles relativ einfach.

Mehr Bilder gibt es unter http://unorganized.net/pictures/macmini_aufruesten/

Filed under: Computers, Mac No Comments
23Nov/060

Webseiten Render Dienst für IE6+7

Da man beim Entwickeln von Webseiten (leider) immer wieder darauf achten muss, das eine Seite auch im Internet Explorer gut aussieht, ist der Dienst von http://meineipadresse.de/netrenderer/ sehr praktisch, um mal schnell ohne ein vorhandenes Windows das Aussehen einer Seite auszutesten.

Filed under: Coding, Computers No Comments
10Oct/060

Element.toggle

Note to self: Wenn man mit Prototype und versteckten divs spielt, muss display:hidden inline definiert werden, also im style-Attribute des div-Elements selber, sonst klappt das nicht.

Filed under: Coding No Comments
25Sep/060

Ajax und IE

Da ich grad auf der Arbeit mit Ajax rumspiele …

Der IE hat nen Bug, wenn man den Inhalt von select-Elementen mit innerHTML austauschen will, dabei geht das erste option-Element kaputt.

Workaround: Das select-Element mit einem div umgeben und das select komplett austauschen, das geht.

Filed under: Coding No Comments