Uncategorized Archive

Automatic upgrades on Ubuntu with apt and cron

If you want to get automatic upgrades of your personal repositories I haven’t find a way to get managed with unattended-upgrades so I have done the next workarround.

This way is to use apt-get and crontab together, so open your crontab editor:

sudo crontab -e

And type the next line to execute our upgrade every night at 1AM:

0 1 * * * (/usr/bin/aptitude -y update && /usr/bin/aptitude -y safe-upgrade) 2>&1 >> /var/log/auto_update.log

Save and exit your editor, and you are all set! You could check the logfile: /var/log/auto_update.log every once in a while to see if everything is still running smoothly.

Note: If you have a solution to get to work unattended-upgrades package with custom repositories please fill a comment below.

Install Ubuntu Karmic Koala on a MacBook

After 4 months trying to fix my laptop finally with success, yesterday I installed Ubuntu 9.10 (Karmic Koala) on my MacBook (2,1).  Actually, rather than write a “OMG it’s so great!”-post, I turned it out a howto fix some issues of Ubuntu 9.10 (Karmic Koala) on a MacBook 2,1.

First Impressions

First of all, kernel devs has been hardly working on the Intel 945GM video driver, lame wonders like the civilizations or something, I’m talking OMFGWTF!?!11-sized wonders!

Using wildly unreliable readings from glxgears:

– 8.10 (Intrepid Ibex): ~1100 fps
– 9.04 (Jaunty Jackalope): ~900 fps (and I’m being generous here)
– 9.10 (Karmic Koala): ~3200 fps!

I’ve got 3x more frames per second than I did in 8.10. Now graphics feel smoother and I think I could almost run a 3D accelerated game on it.

Getting things done algorithm

# Make sure all inboxes are empty.
def process (inboxes)
  inboxes.each { |inbox|
    inbox.each { |item|
      if item.requires_action? then
        if item.takes_epsilon_time? then
          item.do()
        elsif item.can_be_delegated? then
          item.delegate
          waiting_for.append(item)
        else
          deferred.append(item)
        end
      elsif item.is_needed_later? then
        filing_system.append(item)
      elsif item.maybe_wanted_later?
        someday_maybe.append(item)
      else
        trash.append(time)
      end
    }
  }
end

Taked from http://paste.ubuntu.com/263929/ and translated to Ruby language.

Complementos terminolóxicos galegos para Fantasdic

O aplicativo Fantasdic é un aplicativo de diccionario que permite buscar palabras dende moitas e diversas fontes. Destinado principalmente ao escritorio de GNOME, pero tamén pode traballar en outras plataformas, incluso en Windows. Fantasdic é software libre e programado na linguaxe de programación Ruby.

A principal vantaxa que presenta é o sistema de complementos, o que permite de forma sinxela extender o programa para que poida “consumir” datos dende as fontes que desexemos. O único necesario é programar o complemento axeitado.

Podedes obter a tradución ao galego dende: http://l10n.gnome.org/vertimus/fantasdic/master/po/gl

Aquí explicarei como instalar os dous complementos que programei para estender o aplicativo e así permitir que poida consumir datos dende http://open-tran.eu e máis do Corpus de Mancomun (www.mancomun.org).

Procesado de documentos XML con Ruby (II)

Continuamos con el procesado de documentos XML con Ruby pero esta vez vamos a utilizar otro parser proporcionado en REXML.

La plase StreamParser delega la gestión de nodos en un XML a una clase definida por el usuario, la clase non será más que un Listener que implementa unas funciones predefinidas. Otra de las ventajas que ofrece StreamParser es que no hace falta cargar el flujo XML de forma íntegra en memoria, haciéndolo especialmente aconsejable para tratamientos de flujos XML muy grandes o para entornos con pocos recursos, el análisis de este flujo se hace de forma progresiva. La desventaja principal es que tenemos que asegurarnos que el flujo XML de entrada es válido ya que StreamParser no lo gestiona, en caso contrario el Listener no funcionará correctamente.

Con un poco de metaprogramación podemos analizar como funciona un parser de flujos XML, para ello aprovechamos la método method_missing que es llamado cada vez que un método no está definido dentro de un módulo o clase, de esta forma podemos hacer lo siguiente:

require "net/http"
require "rexml/document"
include REXML

class NovasListener
  def method_missing(method_id, *args)
    puts "El método #{method_id.id2name} fue llamado"
  end
end

Document.parse_stream(
  Net::HTTP.get("www.mabishu.com", "/blog/feed/rss/"),
  NovasListener.new
)

Page 2 of 13