Ramiro Algozino: Cómo actualizar Fedora 15 a 16 sin dolor

   Publicado:

Después de un tiempo de usar Ubuntu 11.10 bastante conforme, con la llegada de Unity me ví en la encrucijada (?) de decidir si seguir con Unity o irme para el lado de Gnome3. Con la salida de Fedora15 teniendo la mejor implementación de Gnome3 a la fecha, decidí volver a la distro que había dado tantas satisfacciones.

Estuve usando Fedora 15 sin mayores problemas prácticamente desde que salió, incluso la personalicé bastante y quedé muy conforme con el resultado. Particularmente el tema Faience (del creador de los íconos Faenza) sumado a Zukitwo hace una combinación espectacular!

#EsTodoRisasHastaQue salió Fedora16, dado que había personalizado bastante mi instalación de F15, me daba mucha fiaca tener que instalar de cero F16 y reinstalar todas las aplicaciones y personalizaciones que había hecho (ni hablar que ni siquiera recuerdo como hice la gran mayoría). Investigando un poco me encuentro con preupgrade, que resulta ser un método soportado oficialmente para hacer upgrades de versiones en Fedora! :-)

Cómo uso PreUpgrade?

Primero que nada hagan backup por las dudas! una vez que tengan listo el backup, hagan un update del sistema a las últimas actualizaciones  (yum update). Ahora que tienen todo actualizado y bonito, fijensé si tienen instalado preupgrade, en caso contrario con un ‘yum install preupgrade’ es más que suficiente, está en los repos oficiales de Fedora.

Cuando tengan todo esto listo, como root ejecutan el comando “preupgrade” y se les va a abrir una ventana desde la cual van a poder seleccionar a cuál versión de Fedora quieren actualizar, seleccionan, le dan siguiente y el ayudante comienza a bajar todos los paquetes necesarios, en mi caso fueron un poco más de 600 MB.

Una vez que el asistente haya terminado reinician el sistema y ya tienen F16 instalado! :-D

Oh no!

Si al reiniciar se encuentran con un hermoso cartel que dice “Oh no! Something has gone wrong. A problem has ocurred and the system can’t recover. Please contact a system administrator” y tienen la versión de 64 bits de Fedora instalada lo más probable es que este error se deba al paquete caribou. PreUpgrade lamentablemente instala la versión de 32 bits de este software y crashea el sistema. Para solucionarlo basta con un simple:


yum remove caribou

yum install caribou

Yum se debería encargar de instalar la versión de 64 bits con el último comando.

Se preguntarán.. ¿cómo hago para desinstalarlo e instalarlo si está Gnome no responde? Fácil, presinando Alt+Ctrl+F1, Alt+Ctrl+F2, etc. van alternando entre las distintas tty del sistema. Elijan alguna, logueensé como root o como su usuario y reinstalen caribou con los comando anteriores. Una vez reinstalado vuelvan a la tty que tiene la sesión de Gnome3 y presionen Ctrl+Alt+BackSpace y Voilá!! Disfruten de Fedora 16 :-D

Nota: PreUpgrade tiene un montón más de opciones, como por ejemplo usarlo a través de VNC, o desde la CLI (consola). peguenlé una mirada a la entrada en la wiki aquí: http://fedoraproject.org/wiki/How_to_use_PreUpgrade

Actualización: Nautilus no arranca

Después de unos días me doy cuenta que nautilus no arranca.. :-( Craseha con el siguiente error:

Traceback (most recent call last):
 File "/usr/lib64/python2.7/site-packages/gi/__init__.py", line 23, in <module>
 from ._gi import _API, Repository
ImportError: could not import gobject (error was: ImportError('When using gi.repository you must not import static modules like "gobject". Please change all occurrences of "import gobject" to "from gi.repository import GObject".',))

(nautilus:1733): Nautilus-Python-WARNING **: nautilus_python_init_python failed
Traceback (most recent call last):
 File "/usr/share/nautilus-python/extensions/nautilus_terminal.py", line 48, in <module>
 from gi.repository import Nautilus, Gtk, Gdk, Vte, GLib
 File "/usr/lib64/python2.7/site-packages/gi/__init__.py", line 23, in <module>
 from ._gi import _API, Repository
ImportError: cannot import name _API
Violación de segmento

Según éste bug, este error se da sólo en la versión de 64bits de Fedora y con la extensión nautilus-terminal. Para que arranque nautilus nuevamente debemos desinstalar este plugin de nautilus con el siguiente comando como root:

yum remove nautilus-terminal

Y listo… Nautilus debería funcionar nuevamente sin problemas :-D


Gonzalo Martinez: OnLine

   Publicado:

Volvemos? Veremos esta parece ser una mera prueba pero la intención es grande. Cambié de trabajo hace menos de un mes, y quedarme hoy viernes después de las 12 hs escuchando algo de música electrónica y leyendo NewsSquares, Chrome mediante, es un buen estimulo. No leer un RSS por unos días hace parecer que todo el mundo ha avanzado diez mil pasos mientras vos te pasabas el día intentando configurar un Nagios en la Pyme donde trabajás (para sacarle algún valor agregado al tiempo muerto), intentando innovar con cero pesos, o reclamando a proveedores externos que por ser parte de una Pyme no te dan ni bola.
Fuera de eso hoy quisiera empezar de vuelta. Como amante de la técnología a escribir espero no quedarme en la intención como lo he hecho varias veces.
Pronto nos veremos.

alecu: Adding Proxy support to Ubuntu One

   Publicado:

(TL;DR: Proxy support is a complex matter. We asked our Ubuntu One users to help us with a Proxy survey to understand how proxies are used. We’re releasing the results so other developers can benefit from it.)

During the past few weeks I’ve been working on researching the intricacies of adding proxy support to the Ubuntu One client. Allowing proxies to be used is not as easy as it sounds: our codebase relies on many different libraries and frameworks to access the network, and each of those libraries has a range of support for all the various proxy protocols and the many proxy authentication schemes, that varies from “incomplete” to “non-existent”.

Also we need it to work both for the Linux client and for the new Windows client; we need to test all this with a combination of Proxy server software, protocols, authentication schemes and configurations; and we need to take into account that our file synchronization protocol is not based on the very common and well supported HTTP protocol, but instead it uses a custom protocol optimized for our file synchronization use case, and like all non-HTTP protocols it requires special handling when crossing some types of proxies.

After multiplying of all the above issues, Proxy support ends up sounding a bit complicated in fact. So we decided to run a survey with the Ubuntu One users, asking them about the Proxies that they need to use, to help us understand the most common scenarios and to focus our development efforts.

At this point I need to send a huge “THANK YOU” to our Ubuntu One users: just a day after our initial tweet we got the help of a lot of users that need Proxy support. They filled in our small survey, but they gave us a lot of insight into this matter.

Here are the summary graphs (pdf, 93kb), and since the results of this survey may be useful for other developers wanting to implement Proxy support in their own projects we decided to also release the raw survey data (csv, 43kb).

And a few of my thoughts on the survey:

  • I expected most users to use a Proxy at work or at an educational institution, but did not expect so many people using proxies at home. From the “other” descriptions, they are mostly used for VPNs and for anonymizing proxies.
  • Most people don’t know the proxy brand, nor type of authentication that they need to use. I expected this, and it’s just fine! All proxy enabled software should just work.
  • Authentication schemes are more important than the small number of replies, since they are needed to support the big percentage of users that need to use credentials.
  • Site filtering may prove a big issue for some users: many proxy servers are configured to disallow access to video sites, likely on the basis of conserving network bandwidth, and those network admins may be reluctant to allow file synchronization services like Ubuntu One.
  • Protocol filtering will be a challenge for us: a significant number of proxy installations do not allow network traffic other than HTTP and HTTPS, so we’ll need to tunnel our synchronization protocol thru some of the allowed protocols, probably using the CONNECT HTTP method of some proxy servers. And there’s no easy solution for proxy servers that allow only HTTP or HTTPS but not CONNECT.
  • I didn’t expect so many answers in so short a time. Ubuntu One users rule!

Marcos Vanetta: MongoDB con Mongoid

   Publicado:

MongoDB con Mongoid

Estoy en la RubyConfArg, y hace unos minutos pasaron las LightTalks, en las que por suerte pude hablar sobre Mongoid, un ODM para MongoDB que cumple muy bien con su filosofía propuesta:

The philosophy of Mongoid is to provide a familiar API to Ruby developers who have been using Active Record or Data Mapper, while leveraging the power of MongoDB's schemaless and performant document-based design, dynamic queries, and atomic modifier operations. Aquí les dejo la presentación, cuando tenga fotos las subo.

View more presentations from [malev](http://www.slideshare.net/malev)

Marcos Vanetta: gemsets are the awesomeness

   Publicado:

gemsets are the awesomeness

Cada vez que tenía que usar un proyecto con python, empezaba creando un ambiente particular con virtualenv. En ruby, en principio no podía hacer eso. Después conocí RVM y trabajaba con varias versiones de Ruby en mi PC, sobre todo para trabajar algunos proyectos legacy. Sin embargo, tenía un popurrí de gemas instaladas que ya empezaban a conflictuarse entre sí. Apareció bundler y su magia de bundle exec para solucionar muchos problemas (nota: en futuras versiones de bundler esto ya no va a hacer falta). En fin, la ensalada de gemas seguí ahí, hasta que por fin conocí gemset.

Mi workflow es más o menos así:

  ~  cd code
  code  mkdir proyecto_nuevo
  code  cd proyecto_nuevo
  proyecto_nuevo  rvm use malev@proyecto_nuevo --rvmrc --create
Using /home/malev/.rvm/gems/ruby-1.9.2-p290 with gemset proyecto_nuevo
WARN: .rvmrc is not empty, moving aside to preserve.
  proyecto_nuevo  rvm gemset list

gemsets for ruby-1.9.2-p290 (found in /home/malev/.rvm/gems/ruby-1.9.2-p290)
   global
   mobilenews
=> proyecto_nuevo
   webui

  proyecto_nuevo

Es decir, voy a mi directorio donde guardo mis proyectos / experimentos, creo un directorio, creo un nuevo gemset y listo! Todas las gems que instale en ese gemset van a estar aisladas del resto. Lo interesante es que gracias a la magia de rvm, cada vez que entre en el directorio de mi proyecto nuevo, rvm me va a cambiar al gemset ahí usado:

  code  pwd
/home/malev/code
  code  rvm gemset list

gemsets for ruby-1.9.2-p290 (found in /home/malev/.rvm/gems/ruby-1.9.2-p290)
=> global
   mobilenews
   proyecto_nuevo
   webui

  code  cd proyecto_nuevo
=========================================================
= NOTICE                                                                     =
=========================================================
= RVM has encountered a new or modified .rvmrc file in the current directory =
= This is a shell script and therefore may contain any shell commands.       =
=                                                                            =
= Examine the contents of this file carefully to be sure the contents are    =
= safe before trusting it! ( Choose v[iew] below to view the contents )      =
=========================================================
Do you wish to trust this .rvmrc file? (/home/malev/code/proyecto_nuevo/.rvmrc)
y[es], n[o], v[iew], c[ancel]> yes
  proyecto_nuevo  rvm gemset list

gemsets for ruby-1.9.2-p290 (found in /home/malev/.rvm/gems/ruby-1.9.2-p290)
   global
   mobilenews
=> proyecto_nuevo
   webui

  proyecto_nuevo

Si no tienes rvm instalado, corred e instaladlo por favor!

Marcos Vanetta: Sobre callbacks en Rails

   Publicado:

Sobre callbacks en Rails

¿Qué son los callbacks? Son métodos que son llamados en determinados momentos del ciclo de vida de un objeto. Esto nos permite escribir código que se va a ejecutar cuando nuestros objetos (ActiveRecord u otros) son creados, grabados, actualizados, borrados, validados o cargados desde la base de datos (created, saved, updated, deleted, validated, or loaded). Supongamos que nosotros queremos que inmediatamente después de haber creado un usuario, se cree automáticamente una cuenta para ese usuario. Podríamos hacer esto (por favor no lo intenten en sus casas, puede ser peligroso):

class UsersController < ApplicationController
  def create
    @user = User.new(params[:user])
    @account = Account.create :user => @user
  end
end

Sin embargo, estaríamos contaminando nuestro controller con lógica de modelo. Una primera aproximación, podría ser, usar un callback: after_create. Se ejecuta siempre que se crea un objeto y se lo guarda en la base por primera vez:

class User < ActiveRecord::Base
  #...
  def after_create
    Account.create :user => self
  end
  #...
end

Esta aproximación funciona y está buena, pero tiene algunos problemillas: el nombre del método no describe lo que hace y si tenemos que hacer varias cosas, tendríamos un método gigante. Aquí entran en acción el método de clase: after_create:

class User < ActiveRecord::Base
  #...
  after_create :create_account

  def create_account
    Account.create :user => self
  end
  #...
end

Una vez creado el objeto, ActiveRecord buscará un método llamado "create_account" y lo ejecutará. Esto nos permite tener varios métodos que se ejecuten como callbacks, he inclusive podemos llamarlos de manera secuencial:

class Snippet < ActiveRecord::Base
  after_create :test1
  after_create :test2

  def test1
    puts "test 1"
  end

  def test2
    puts "test 2"
  end
end

y los resultados:

ruby-1.9.2-p136 :002 > s = Snippet.new
 => #<Snippet id: nil, content: nil, user_id: nil... private: false> 
ruby-1.9.2-p136 :003 > s.save
test 1
test 2
 => true
ruby-1.9.2-p136 :004 >

Por supuesto, after_create no es el único callback. Hay mucha información al respecto aquí. Aquí solo voy a listar los callbacks disponibles:

Creando un objeto

  • before_validation
  • after_validation
  • before_save
  • before_create
  • around_create
  • after_create
  • after_save

Actualizando un objeto

  • before_validation
  • after_validation
  • before_save
  • before_update
  • around_update
  • after_update
  • after_save

Eliminando un objeto

  • before_destroy
  • after_destroy
  • around_destroy

Su uso es ampliamente recomendable y una cosa a tener en cuenta es... no podemos evitarlos! No son como las validaciones, en las que a veces podemos no ejecutarlas. Aquí si alguna vez necesitamos saltearlos algún callback, vamos a tener que repensar la lógica del modelo de vuelta. Usar con responsabilidad.

Marcos Vanetta: Agile testing

   Publicado:

Agile testing

En mi trabajo nuevo, los equipos de desarrollo cuentan con gente de QA, lxs Quality Assurance. Y debo decir, es fantástico trabajar con gente que continuamente este viendo la calidad desde el punto de vista del usuario. Quizás no sea toda la calidad como nos gusta a nosotros (no abarcan todos los atributos de calidad de la ISO9126), pero es algo y ese algo es muy importante. Sin embargo, no todo es alegría y felicidad entre el quipo de desarrollo y el quipo de QA, aunque ambos esten en el mismo equipo, pero bueno. Uno de los principales choques que vivimos apenas se conformo el equipo (voy a seguir diciendo equipo muchas veces más) fue el choque entre Agile y Waterfall (o lo que sea que ellos usaban). Al principio costo mucho mezclar gente ágil (los desarrolladores) con gente que venía de procesos más rígidos (claramente la gente de QA). Esto sigue siendo un punto a resolver, pero el trabajo se da cada vez más natural. Si Uds, tienen un problema similar en sus organizaciones, les recomiendo este video de Google IO, donde Elisabeth Hendrickson, una alta tester de Quality Tree nos cuenta su experiencia de testing en equipo ágiles.

Yo mientras voy a seguir investigando del tema, si encuentro algo más, prometo publicarlo.

Martín Cerdeira: Django-IDE: Video preview

   Publicado:

Luego de escribir este post IPnaf IDE - La IDE definitiva para python, y recibir algunos comentarios que me hicieron pensar (y ver que, estaba un poco equivocado en mis comentatios), me dije "y por qué no puedo ser yo quién arme una IDE?"

Y así fue que, pensando un poco, me puse a intentar llenar un hueco que, creo que está lo suficientemente vacío como para que un esfuerzo allí, valga la pena.
Entonces, empezó a nacer Django-IDE.

Les dejo un video con una preview muy muy muuuuy temprana (no tiene para nada todos los features que va a tener), en fin, acá va:




Ver en youtube

What is Django-IDE good for?

Django-IDE helps you to:
  • Easily create Django projects.
  • Manage and edit existing project
  • Edit and Save your code, with a editor based on Ace.
  • Run and debug.
La estoy armando a pulmón, esto es, codeo un poco los findes, y cuando puedo...
Espero comments!!! :)

alecu: Cómo funciona un PyCamp

   Publicado:

(Alfonso de la Guarda me contó que están organizando un PyCamp en Lima, y me preguntó como hacemos en PyAr para organizar un PyCamp. Como esto puede que le interese a más gente, respondo por acá).

Que buena idea hacer un PyCamp en Lima! Me encantaría poder asistir. Mientras tanto, les cuento como lo organizamos por acá:

Primero, anunciamos un lugar y fecha, e invitamos a toda la gente que tiene ganas de ir a anotar ideas y proyectos en una página del wiki. Por ejemplo, esta es la lista de temas propuestos en PyCamp 2011. La gente va viendo la lista de asistentes y temas y juntando ganas de ir. Todos tienen que hacer el depósito para pagar alojamiento, comida y conectividad cuanto antes, pero siempre hay alguno que termina asistiendo a último momento.

Una vez en el evento, durante el primer día hacemos la presentación de gente (donde cada asistente tiene 30-60 segundos para contar quién es) y la presentación de proyectos (donde cada persona que propuso un proyecto puede contar un poquito sobre el mismo). Luego medimos cuanta gente hay interesada en cada proyecto, levantando manos, y según la cantidad de interesados repartimos los proyectos en una grilla, para que los proyectos con más interesados comiencen “antes”. Esta es una foto de la grilla:

IMG16948.JPG

Nos resulta importante este paso, porque en la wiki no suelen anotarse todos los proyectos, y también para animar a los asistentes nuevos a que propongan o se enganchen en alguna actividad.

La idea de que los proyectos comiencen a distintas horas es para que si una persona está interesada en varios proyectos, que pueda asistir a la explicación detallada de cada uno que se suele hacer al principio del mismo, para enterarse más del estado del proyecto y poder participar tras el PyCamp.

Uno de los espacios se reserva para una reunión de PyAr (generalmente el sábado a la noche, junto con el asado), donde se charlan cuestiones administrativas del grupo. Y además alguna tarde/noche suele haber alguna actividad, tal como una excursión o algo similar. Y por las noches suelen haber juegos de mesa, de rol y torneos de metegol o Armagetron.

IMG16983.JPG

Pero más allá de la grilla, el PyCamp es “caótico”, en el buen sentido del término. Cada participante tiene libertad de sumarse o restarse de algún proyecto en el momento en que le interese o aburra. Hay proyectos que terminan ocupando la mayor parte del tiempo, por el entusiasmo que los asistentes le ponen al mismo, y hay algunos propuestos que no llegan a tener quorum. Hay participantes que terminan trabajando solos (y eso está bien) y hay otros que terminan descubriendo afinidad y arman un grupo que persiste luego del PyCamp (y eso es lo mejor).

En resumen, el mayor esfuerzo para hacer un PyCamp es conseguir el lugar, asegurarse que tenga una conexión a internet razonable y gestionar las reservas; esta es la infraestructura para que entre todos los participantes vayan organizando las actividades de la manera que les resulte más intersante.

PD: acá hay muchos posts con fotos y más info: http://python.org.ar/pyar/PyCamp

Patricio Molina: Y esto vale para todo

   Publicado:

Yo no creo que valga la pena vivir para ganar, creo que vale la pena vivir para hacer lo que la conciencia te dicte que debes hacer, y no lo que te conviene. Y esto vale para todo: para la política, para la vida, para el amor, para el fútbol.

Eduardo Galeano, el 23 de mayo en “Singulars”

Share