Archive for the ‘Programming the web’ Category

Count search results in gedit.

Tuesday, April 20th, 2010

Update September 21:
After all, I found some time to reimplement the algorithm for highlighting XML. It is now triggered by a new button in the toolbar. As it now does not run automatically, this will be another improvement to overall speed. Feel free to download the new version at the provided download link below or at github!

Update May 5:
Count results are now being displayed in the Status Bar instead of an alert window. Also, there were a couple of bug fixes. Feel free to download the new version at the provided download link below or at github!

Lately I was looking for a small but missing feature in gedit: I needed to be able to count all occurrances of a selected word. This is a standard feature in many other editors such as Notepad++ in the Windows world, for example. However, I didn’t come across a solution on the net, so I decided to write a little plug-in myself.

What it does: After marking a word the plug-in counts all occurrances of the selection in the current document. It adds a new button to the toolbar and an entry to the menu right in the “Search” section. On top of that you may trigger counting the selection by hitting “CTRL+SHIFT+F”. A small pop-up window will appear and show the results of the search. The results will be displayed in the status bar of the window.

How to use it: Simply mark a word, and have a look at the statusbar: The number of search results will be displayed there.

If you find it useful, feel free to download the plug-in here:

Donwload at github:

http://github.com/mmuell23/mmuell23

git clone http://github.com/mmuell23/mmuell23.git
cp -r mmuell23/gedittools/* ~/.gnome2/gedit/plugins

Usability: 2 Artikel.

Monday, January 4th, 2010

Hier zwei Artikel, die ich gerade las zum Thema Usability. Zwei ganz unterschiedliche Bereiche: einmal Web, einmal “echtes” Formular. Beide dennoch spannend:

What was your “Total Impress”?

und

Drei Gefahren beim Suchen von Landing-Pages

Update: Hier noch ein Artikel über die Usability von horizontaler Navigation vs. vertikaler Navigaion im Smashing Magazine.

Ruby Hash: Convert String keys to Symbols

Wednesday, August 19th, 2009

Ever had a hash which contained strings as keys and needed symbols instead? I do: From a REXML::Document I created a hash. Unfortunately, the keys were all strings and I needed them to be symbols at some other point in the app. Thank god, Ruby is capable of extending any object “on the fly”. So, I wrote a simple extension to Hash, which you might find useful as well:

class Hash
  #take keys of hash and transform those to a symbols
  def self.transform_keys_to_symbols(value)
    return value if not value.is_a?(Hash)
    hash = value.inject({}){|memo,(k,v)| memo[k.to_sym] = Hash.transform_keys_to_symbols(v); memo}
    return hash
  end
end

Usage is:

a = { "key" => 123, "inner_hash" => { "another_key" => "blabla" }}
Hash.transform_keys_to_symbols(a)
#returns
a = { :key => 123, :inner_hash => { :another_key => "blabla" }}

Passenger and OpenID

Thursday, June 25th, 2009

I recently updated Passenger 2.0.6 to 2.2.4 and experienced that openID logins were not working anymore. Seems like it tries to log output to some strange log location.

However: If anyone comes across the same problem: Simply add

OpenID::Util.logger = RAILS_DEFAULT_LOGGER

to your environment.rb file and everything will work like a treat again.

Rails’ to_xml w/ multiple associations.

Thursday, May 14th, 2009

This is a pain and took me about an hour to figure out today.

Rails ActiveRecord instances offer a nice function to render xml:

my_model.to_xml()

This method can be fed with a parameter

:include => []

to have all associations being integrated in the XML tree, just like when calling

my_model = MyModel.find( :include => [association])

But when I tried to use it, it always failed when dealing with nested associations. Until I found out the trick.
This is how it works: Basically you need to build a list of nested hashes.

class Book < ActiveRecord::Base
  has_many :pages
  has_one :o wner
end
class Owner < ActiveRecord::Base
  has_many :books
end
class Page < ActiveRecord::Base
  has_many :spots_of_coffees
  belongs_to :book
end
class SpotOfCoffee < ActiveRecord::Base
  belongs_to :page
end

Now, you want to create a nice XML output containing a book, with its owner, pages and all spots of coffee?
Pretty easy:

  @book = Book.first
  includes = {} # let's build a hash; it's easier to read. At least for me...
  includes[:owner] = {} # owner has no association. So, let's take an empty hash as target
  includes[:pages] = { :include => :spots_of_coffee } #load pages and include its spots of coffee

  respond_to do |format|
    format.xml  { render :text => @book.to_xml(:include => includes) }
  end