Friday, June 18, 2010

[Trick] How to invert window colors

Sometimes the black foreground on white background can be tiring for your eyes. This is specially true if you have to spend a lot of time in front of computers. In mac and linux there is a simple trick in which you can invert the color scheme:
  • On MAC (inverts the colors of the whole desktop) Press simultaneously ctrl+alt+cmd+8
  • On Linux (inverts the colors of the active window) Press simultaneous super+N (where supper is the key with the windows logo)
Hope this is useful for you!

Thursday, June 10, 2010

[OpenOffice] From database to bibtex entry

For those struggling in the conversion from OpenOffice Bibliography database to bibtex entry. I've generated a small ruby script that makes the translation. This is for open office 3.2.
If any of you knows a more robust tool (probably already embedded in OpenOffice, which I could not find), please let me know.

The process to do this would be:

  1. Find the database file (dbf) in your local directory (usually under the .openoffice.org/3/user/database/biblio/ directory)
  2. Open the file with OpenOffice Calc (or Excel) and export it to CSV (make sure you specify ";" as field delimiter)
  3. Run the following script, putting as first argument in the command file the CSV file that you created in the previous step.
Let me know if you have further questions.

Good luck!



#!/usr/bin/ruby
#-----------------------------------------------------------------------
#
# dbf_to_bibtex.rb
# Script to transform from OpenOffice dbf to bibtex compliant format
#
# Change Log
# 20100610 MGF Created
#
# @ Miquel Garcia-Fernandez
#
#-----------------------------------------------------------------------


# Retrieve the CSV filename to parse
file_name = ARGV[0]
file = File.open( file_name, "r" )

# Field identifiers
identifiers = Array.new

CATEGORY = { "0" => "article",
"1" => "book",
"8" => "techreport",
"16" => "misc", }

file.each_with_index do |line,i_line|

# Retrieve the field identifiers
if i_line==0 then
fields = line.split(";")

fields.each_with_index do |field,i_field|
# Clean from double quotes and remove characters after comma
identifier = field.delete("\"").split(",").flatten[0]
identifiers << identifier.downcase
end

# Go to next line
next
end

# Now parse each field and generate bibtex entry
fields = line.split(";")

# Hash holding the valid entries of the current reference
entries = Hash.new

fields.each_with_index do |field, i_field|
clean_field = field.delete("\"")

next if clean_field.size == 0

entries[ identifiers[i_field] ] = clean_field

end

# Generate bibtex entry for the current line
print "@#{CATEGORY[ entries["type"] ]}{#{entries["identifier"].gsub(/ .*, /,':').gsub(', ',':')},\n"
entries.each_pair do |key,value|
next if key=="type"
next if key=="identifier"
next if key=="isbn"

print " #{key} = \"#{value}\",\n"
end
print "}\n\n"

end