home icon contact icon rss icon

Archive for Home

Rails 2.3.x y Ruby 1.9, en español

Hace unos meses pasamos una de las aplicaciones Rails (2.3.5) con las que estabamos trabajando hace tiempo a Ruby 1.9. Recuerdo que fue un quilombo importante. Ayer, arrancamos otra. Por no haber anotado el paso-a-paso terminamos perdiendo 2 horas con una huevada. Para evitarme otra pérdida de tiempo, paso a describir el proceso que nos ha resultado mejor.

La cuestión es que Rails, por default, no labura con UTF-8, así que hay decírselo, por todos lados. Ojo, trabaja con caracteres españoles, pero no cómo especifica la 1.9.

Encoding en cada archivo Ruby.

Hay que agregarle #encoding: utf-8 al principio de cada archivo. Si, es un plomo, pero con esta rake task es un poco más piloteable. La estructura inicial del script salió de annotate_models.

Ejecutar: rake encoding:update_files # una papa

GIST

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
namespace :encoding do
  task :update_files do
    Dir.glob("{app,config,spec,test,lib,db,features}/**/*.{rb,rake}").each do |f|
      add_encoding(f)
    end
  end
  
  def add_encoding(file_name, encoding = 'utf-8')
    if File.exist?(file_name)
      old_content = File.read(file_name)
 
      # Ignore the Schema version line because it changes with each migration
      encoding_regexp = Regexp.new(/^# encoding: (.*)$/)
      match_data = old_content.match(encoding_regexp)
      old_encoding = match_data ? match_data.captures[0].strip : ""
 
      puts "#{file_name}: #{old_encoding}"
      unless old_encoding == encoding
        puts " => Changing encoding '#{old_encoding}' to '#{encoding}'"
        old_content.sub!(encoding_regexp, '')
        new_content = "# encoding: #{encoding} \n#{old_content}"
        File.open(file_name, "wb") { |f| f.puts new_content }
      end
    end
  end
end

Forzar encoding en lectura y escritura de datos

La idea es con monkey patching forzar a ciertos módulos de Rails a que usen utf-8. No es la solución más elegante, pero funciona. En este caso se soluciona cómo se lee la base de datos (MySQL), como se interpretan los params y como se renderizan las vistas.

La data inicial de cómo resolver esto la sacamos de un post de Akita

GIST

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
require 'mysql'
 
class Mysql::Result
  def encode(value, encoding = "utf-8")
    String === value && '1.9'.respond_to?(:force_encoding) ? value.force_encoding(encoding) : value
  end
 
  def each_utf8(&block)
    each_orig do |row|
      yield row.map {|col| encode(col) }
    end
  end
  alias each_orig each
  alias each each_utf8
 
  def each_hash_utf8(&block)
    each_hash_orig do |row|
      row.each {|k, v| row[k] = encode(v) }
      yield(row)
    end
  end
  alias each_hash_orig each_hash
  alias each_hash each_hash_utf8
end
module ActionController
  class Request
    private
      # Convert nested Hashs to HashWithIndifferentAccess and replace
      # file upload hashs with UploadedFile objects
      def normalize_parameters(value)
        case value
        when Hash
          if value.has_key?(:tempfile)
            upload = value[:tempfile]
            upload.extend(UploadedFile)
            upload.original_path = value[:filename]
            upload.content_type = value[:type]
            upload
          else
            h = {}
            value.each { |k, v| h[k] = normalize_parameters(v) }
            h.with_indifferent_access
          end
        when Array
          value.map { |e| normalize_parameters(e) }
        else
          value.force_encoding('utf-8') if '1.9'.respond_to?(:force_encoding)
          value
        end
      end
  end
end
 
module ActionView
  module Renderable #:nodoc:
    private
      def compile!(render_symbol, local_assigns)
        locals_code = local_assigns.keys.map { |key| "#{key} = local_assigns[:#{key}];" }.join
 
        source = <<-end_src
          # encoding: utf-8
          def #{render_symbol}(local_assigns)
            old_output_buffer = output_buffer;#{locals_code};
            #{compiled_source}
          ensure
            self.output_buffer = old_output_buffer
          end
        end_src
 
        # workaround
        source.force_encoding('utf-8') if '1.9'.respond_to?(:force_encoding)
 
        begin
          ActionView::Base::CompiledTemplates.module_eval(source, filename, 0)
        rescue Errno::ENOENT => e
          raise e # Missing template file, re-raise for Base to rescue
        rescue Exception => e # errors from template code
          if logger = defined?(ActionController) && Base.logger
            logger.debug "ERROR: compiling #{render_symbol} RAISED #{e}"
            logger.debug "Function body: #{source}"
            logger.debug "Backtrace: #{e.backtrace.join("\n")}"
          end
 
          raise ActionView::TemplateError.new(self, {}, e)
        end
      end
  end
end

Forzar encoding al leer un archivos (antes de que se abra el log de Rails)

Hay que cambiarle el default a Rails para que abra en UTF8 el log.

1
2
3
RAILS_GEM_VERSION = '2.3.5' unless defined? RAILS_GEM_VERSION
Encoding.default_external = 'UTF-8' if defined? __ENCODING__
require File.join(File.dirname(__FILE__), 'boot')

RVM, Passenger…

Por último, y solo si usan RVM y Passenger, y bajo algunas circunstancias, tiene que agregarle al archivo $HOME/.rvm/bin/passenger_ruby la mención directa del encoding de la siguiente forma:

1
2
3
4
5
6
7
#....
LC_TYPE=en_US.UTF-8; 
export LC_TYPE
LANG=LC_TYPE; 
export LANG

exec "/Users/lucasefe/.rvm/ruby-1.9.1-p376/bin/ruby" "$@ -KU"

Referencias y Recursos

Seguro que me olvido de algo…

TED - Ideas worth spreading

Un compañero de laburo me pasó el link de este sitio, TED. El sitio contiene un montón de videos interesantes, sobre ideas que valen la pena, o que al menos te hacen pensar, que te mueven algo. A veces, después de tato libro técnico, de tanto video de conferencia de Ruby, de tanta cosa fría, lo que uno necesita es algo que te movilice, que te haga pensar más allá de tu propia quintita.

Destacados (hasta ahora)

Por ahora, de las charlas que pude ver, estas son mis recomendaciones.

Ah, me olvidaba. Son cortitos, de no más de 20 minutos, así sin darte cuenta podés ver un montón en muy poco tiempo.

Espero que lo puedan disfrutar… a mi me encantó, y eso que solo habré visto unos 10 de ellos.

Kit básico de librerías 2009

Se va el 2009 y no puedo evitar terminar conun obvio post acerca de las librerías que estuve usando durante este año para desarrollar aplicaciones Rails. Usé un montón más, pero estos son los más memorables de este año.

  • RestClient : Buenísimo cliente de APIs REST. Muy fácil de usar. ActiveResource apesta.
  • Inherited Resources : Antes usaba ResourceController, pero se quedó en el tiempo e inclusive diría que me acostumbró a resolver los problemás (quizás) no de la manera más elegante. Opté por esta porque me parece su sucesora obvia. mejora muchísimo y no resta funcionalidades.
  • Factory Girl : como factory de objetos en testing o en la consola de Rails (super útil para hacer pruebas rápidas).
  • Faker : Generación interminable de palabras, nombres, emails, urls, y mucho más, perfecto para testing, dónde todo eso es importante, pero hasta ahí. Me pregunto, para cuando un faker en castellano, che?
  • Boxy : para generar ventanas como las de Facebook. Es un plugin jQuery.
  • Paperclip : Súper bobo manejo de uploads.
  • Formtastic : Antes usaba mi propio formbuilder que durante mucho tiempo fue más que suficiente. Hoy en día ya no tiene sentido seguir reinventando la rueda. Formtastic te permite salir andando con cero esfuerzo. Genera formularios HTML semánticamente correctos. No sobreescribe ninguno de los métodos standard de Rails, asíque se puede comenzar a usar de a poco.
  • Haml & Sass: No voy a explicar esto. Son dos librerías indispensables cualquier proyecto que comience.
  • Friendly Id : Permalink Fu se va, entra Friendly Id! Si, admito que llegué tarde, pero qué linda librería. Se integra con Rails se una manera que es admirable. Gran trabajo.
  • “Searchlogic”: Zarpado abusador de los name scopes de ActiveRecord. Una solución elegante para las búsquedas simples de tu próxima aplicación.
  • Lockdown : Uff, para seguridad basada en roles, mi favorito.
  • Whenever : Ejecución programada de lo que se te cante.

En fin, aquí están, estos son, los “pluguines” de Florió.

Justo al Caer en Vicente López

Después de laburar mucho este año, logramos (con mi banda Justo al Caer) arrancar con las presentaciones en vivo. Un paso importante para un grupo de enfermos perfeccionistas que no están listos nunca.

Asi que, para ir cerrando el año 2009, nos vamos a presentar en el Paseo de la Costa (Vicente López) junto a Dikumda. Lo copado de esto es que es al aire libre, y a la hora en que cae el sol, así que si alguno tiene ganas, es solo cuestión de arrimarse con un termo de alguna infusión copada (por si no queda claro, la entrada es gratuita).

Fecha: Sábado 24 de Diciembre de 2009

Lugar: Urquiza y el Rio. Cuando se acerque la fecha un poco más actualizaré con mayores certezas,

Hora: Aproximadamente a las 17hs.

Justo al Caer

Justo al Caer en Kronopios

El jueves 12 de Noviembre nos presentamos en Kronopios.

Faith No More en el Pepsi 2009

Disclaimer: Este review es una mentira total. Carente de objetividad, y empapada de fanatismo en todo su esplendor luego de un show que pagó cada mango de la entrada.

Lo vi de cerca, aunque no tanto. No era el VIP (gran dormida la mía), pero estaba muy bien parado.

La lista de temas me pareció impecable. Hubieron hits y no tanto. Recorrieron 5 discos, y no dejaron títeres sin cabezas. Abrieron con un tema no conocido por mi que asumo se llamaba United, haciendo alusión a su juntada actual y luego tocaron From Out Of Nowhere. De ahí en más solo hubo magia. Easy, Epic, Stripsearch, Last Cup Of Sorrow, Ashes to Ashes, Land of sunshine, Caffeine, MIdlife Crisis, A small victory, I started a joke, Evidence, King for a day (si, groso es poco), Surprise! You’re Dead!, We care a lot y alguno más que seguro se me olvida. El orden plasmado aquí no representa el del show, pero es lo que me acuerdo luego de no se cuantos pogos inolvidables.

El bis fue con Collision y Digging the grave (no me acuerdo posta posta, pero me la juego).

Confieso que luego del bis ya no podía más. Salté y grité en demasía durante el inicio y luego, cuando ellos se fueron a tomar un descanso, yo ya estaba en low-battery. Por suerte pude encontrar un lugar con onda, con gente que le puso la mejor. No vi afanos esta vez, lo cual no se de quién habla bien, pero fue copado no tener que estar pensando en el manoteo.

En definiiva: Mucho rock, muchos huevos. Un Patton que no decepcionó nunca (excepto cuando salió con la remera de Argentina, no era necesario). El registro, y su incapacidad de hacerse mierda la voz, no dejaron de asombrarme. Tenía una maquinita de efectos al lado, pero pude detectar cuándo la usaba. La banda sonó como tenía que sonar: Compacta, contundente… una banda de viejos profesionales. Sorprendentes las canas de Bordin.

Lo que sí no entiendo es quien arma las fechas para estos eventos: Die Toten Hosen luego de FNM? A quién se le ocurre? La mitad del estadio se fue al finalizar la presentación de este último. Sé que los alemanes le ponen onda y huevos, pero luego de un show debastador como el de los pibes, poco quedaba para jugar con Campino & Co.

Este show queda en el segundo lugar, peleando con Radiohead en mi lista de shows inolvidables. Primero, obvio, PJ.

Ustedes me dirán del show de Chris Cornell… pero me chupa un huevo. Lo de ayer fue memorable.

Actualización: Esta es la lista completa de temas.

  1. Reunited (Peaches & Herb)
  2. From Out of Nowhere
  3. Land of Sunshine
  4. Caffeine
  5. Evidence
  6. Surprise! You’re Dead!
  7. Last Cup of Sorrow
  8. Ricochet
  9. Easy (The Commodores)
  10. Epic
  11. Midlife Crisis
  12. I Started a Joke (Bee Gees)
  13. The Gentle Art of Making Enemies
  14. King for a Day
  15. A Small Victory
  16. Ashes to Ashes
  17. We Care a Lot

Bis:

  1. The Popcorn Song / Scarface Theme / Collision
  2. Digging the Grave

Encuesta sobre Ruby en Argentina usando Google Forms

Hace unas semanas, usando Google Forms, creé una encuesta que intentaba responder ciertas preguntas básicas respecto a nuestra comunidad. La idea era entender un poco mejor quienes eramos y qué queríamos. En un tiro la creé, y pasé a anunciarla en la Lista de Correo de Ruby Argentina

El resultado de la misma se encuetra publicado aquí:

A la semana siguiente, tomando un poco del feedback que me habían pasado, construí de la misma forma la versión 0.2. Esta incluía un montón de preguntas extra referidas a carga horaria, salario y expectativas, además de uno que otro dato regional. Los resultados fueron interesantes, pero cometí varios errores (por calentón) con respecto a Google Forms.

Google Forms (GF) está muy bien cómo herramienta rápida de contrucción de formularios, pero no te permite modificar, o vaciar el form de una manera simple. Hay que tener muy claro el tipo de respuesta que se espera de cada pregunta, como para que el resultado sea representativo.

Ejemplo: GF te genera gráficas automáticamente de cada un de las preguntas, pero solo si no se trata de preguntas de texto libre. Bien, yo cometí el error de preguntar el salario de esa forma, así que la gráfica que se generó inicialmente no servía de nada (4500$ 900U$$ ... ). Lo mismo me sucedió con las ciudades de origen. Finalmente lo pude corregir, pero hacerlo fue un parto.

Ah, los resultados de la segunda encuesta se encuentran aquí:

Espero que les sirva y provea de información útil para hacer crecer a Ruby en Argentina.

Y recuerden: Si usan Google Forms, verifiquen una y mil veces con casos de prueba si están obteniendo el resultado gráfico que esperaban.

Bandas en el Bordó

El viernes pasado fui a ver dos muy buenas bandas que no dudo en recomendar…

  • Ubika (http://myspace.com/ub1ka)
  • Decime Si Se Puede (http://www.myspace.com/decimesisepuede)

Finalmente, Justo al Caer tiene website

Luego de mucho laburo, muchos idas y vueltas, logramos hacer un sitio para mi querido proyecto musical, Justo al Caer.

Allí podrán conocer un poco de lo que hago cuando no soy programador Ruby, podrán ver fotos, leer sobre nuestros origenes y lo más importante, escuchar un poco de lo que hacemos.

Debo confezar que es un placer terminar una etapa, aunque me dé vértigo iniciar una nueva. A tocar se ha dicho…

Así que: Justo al Caer Website.

Link - Autotest + Growl

  • Solución servida en bandeja para Autotest+Growl por nuestro compañero de rubylandia Leandro Marcucci.

Debt

Ayer hablaba con un compañero de trabajo. Me contó de sus viajes y sus desiciones laborales más que acertadas. Charlamos durante el almuerzo muy distentidamente, y yo le comenté que me costaba dejar los laburos siempre, por ese sentimiento de attachment. Digamos, de deuda impaga. Le dije que me sorprendía cómo manejaba él eso. A él no le pasa eso… Admirable. Esa cosa de El Deber.

Volvimos al trabajo y laburé, bien, como siempre, robot-man… pero me fui con un no se qué atravezado en la garganta. Sentía ese freno que te parte, la rutina insoportable. Corriendo una carrera que no es tal. La fucking zanahoria. Esa cosa de lo que hay que hacer, what we must conquer, the things we need to acomplish “to fulfill our destiny…” (como dice tu fono). La vida tiene que ser más simple… realmente.

Si fuera por mi sabés que haría? Y antes de contestar pienso: Y si no es por mi, por quién es? Ahí está la cuestión… Fuck… (Me odio a veces… ¿Qué hago ahora con esa mierda que escuché?). Cuánto estamos realmente haciendo por nosotros? No será que siempre estamos luchando por el amor del Otro? De eso se trata? Uno “es” quien cree que es en función del Otro? Qué será de nosotros sin la existencia del Otro? Me asesina esa prisión, y a la vez, esa celda es también un lugar seguro, de certeza.

Si, hoy a la tarde me tomo una pastilla para no pensar… así me puedo transformar en un robotito tonto que sigue un destino que no entiende…

Sent.

Remarkable

Rspec es genial. Out-of-the-box te provee unos “meta-matchers” bastante piolas. Si tenés un método que retorne un boolean y termine en ? podés preguntar algo como esto:

1
2
3
4
5
describe User do
  # suponiendo que @user responde a admin?
  subject { User.new }
  it { should be_admin } 
end

Súper copado, pero nada nuevo. Claro, cuando te empezás a meter un poco más, descubrís que muchas de los matchers que usás siempre, alguien ya las “metió” en un módulo y las puso disponibles para todos. Dos ejemplos de ello son rspec_on_rails_matchers (buen inicio, pero se quedó en el tiempo) y shoulda (que es excelente).

La cuestión es que después de usar shoulda una semana, di con Remarkable (luego de escuchar, creo, a los pibes de RailsEnvy .

Remarkable es una gema que incluye espectations y matchers para usar dentro y fuera de rails. La lista es interminable, pero voy a hacer un mini-raconto de lo que estuve usando esta semana (con un supuesto modelo User):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
describe User
  subject { Factory.build(:user) }
  it { should validate_presence_of(:first_name) }
  it { should validate_presence_of(:last_name) }
  it { should have_many(:posts) }
end

describe Post
  subject { Factory.build(:post) }
  # Db matchers
  it { should have_columns(:title, :body, :permalink)}
  it { should have_index([:title]).unique(true) 
  
  # Validaciones Active Record
  it { should validate_presence_of(:title) }
  it { should validate_uniqueness_of(:title, :scope => 'topic') }
  it { should validate_uniqueness_of :title, :allow_blank => true} 
 
  # Relaciones 
  # se verificará que el counter cache se incluya como opción y 
  # que el campo esté definido en la DB. 
  # No hay una en que no me olvide de esto. 
  it { should belong_to(:topic, :counter_cache => true) }
  it { should belong_to(:user, :counter_cache => true) } 
  # se verificará que se incluya el :through como opción 
  # además de que exista la relación.
  it { should have_many(:comments) }
  it { should have_many(:viewers, :through => :comments) }

  # named scopes
  it { should have_scope(:published).conditions(:published => true) }

  # acepta colecciones cómo parámetros
  it { should allow_mass_assignment_of(:title, :body, :tags, :permalink) }
end

Además de esto, podemos integrarlo con I18n y generar los specs en castellano, u otro idioma. Funciona exactamente igual que Rails, ya que usa la misma gema (svenfuchs-i18n). O sea, nuestro cliente no tiene que saber inglés para entender nuestros specs. Esto, por lo menos para mi, es oro puro.

Como si esto fuera poco, además provee un forma de crear matchers muy fácilmente (un mini DSL), sin reinventar la rueda.

En el ejemplo yo solo hablé de la parte de Active Record, pero también incluye un montón de matchers para el ActionController y próximamente para ActionView también (Acá).

Instalación

sudo gem install remarkable_rails

En Rails 2.3, para que Remarkable se cargue correctamente hay que incluir lo siguiente en config/environments/test.rb

config.gem "rspec",            :lib => false
config.gem "rspec-rails",      :lib => false
config.gem "remarkable_rails", :lib => false

Y después requerir remarkable dentro de spec_helper.rb, justo después de spec/rails>

require 'spec/rails'
require 'remarkable_rails'

Para mi resultó muy útil, y no veo razón alguna para no usarlo de aquí en más (más allá de incluir una nueva dependencia).

Si tienen la libertad de poder incluir/sugerir mejoras en sus proyectos actuales, y se cansaron de escribir siempre lo mismo, entonces prueben Remarkable. Posta, te hace la vida mucho más simple. Ojo, hay que pensar igual :P

Un poco nada más

Ayer, a la vuelta de LXR me puse a retocar los temas del EP. Ya falta cada vez un poco menos. Se podría decir que ya está todo listo a nivel mezcla. Solo falta que terminemos con el arte. Claramente a principio de abril ya no llegamos, pero quizás en unas semanas podamos arribar a buen puerto.

La lista definitiva de temas, con su orden ya establecido es la siguiente:

  1. Navegar
  2. Tun-Tun-Tun
  3. Volando en descubierto
  4. Estoy / No estoy
  5. Sin amor
  6. Cicatrizar
  7. Navegar (Garage version)

Poco, muy poco…

LocosXRails Post Resolutions

Justo dos días antes de la conferencia LocosXRails (LXR) me había puesto a ver algunos videos de la última RubyConf, entre los que que se incluía el ya clásico TATFT, de Brian Liles. Bastante motivante para ser sincero (Ring 1)

La primera charla del evento LXR fue la de Obie Fernandez, y se trató del Hashrocket Way. Fue bastante intersante aunque creo que un poco irreal para lo que es Argentina. De cualquier manera siempre aporta tener esos objetivos surrealistas de ejemplo. No todo lo propuesto me pareció genial, ya hay algunas características muy corporate que me dan un poco de nauseas, pero en lo que respecta a las best practices propuestas me pareció muy copado. Por supuesto, habló de TATFT, y te escuché, Obie… (ring 2)

Al final del día uno, Luis Lavena (un amigo de todos nosotros) se puso a laburar con unos specs y tuve el placer de ver la disciplina de este chabón. Ufff. Uffff. Mierda, no baja los brazos. No me acuerdo que era lo que estaba especificando (asumo que algo referido al Ruby Installer de Windows) pero el flaco no abandonaba la práctica en ningún momento. Inclusive los probaba contra Ruby 1.8.6 y 1.9.1. Ver tipos así a veces es como una piña de certeza (ring 3)

Al otro día, presencié la charla de Emilio Tagua, sobre debugging de aplicaciones rails (muy buena). Al final no se quien agregó algo como DATFT (Debugging all the fucking time) refiriéndose a que todo lo que había explicado Emlio no era para guardar para una emergencia, sino que había que usarlo, practicarlo e incorporarlo, porque no iba a ser fácil usar ese toolkit cuando quemaran las papas (ring 4).

El valor del test (first) es evidente. No hace falta urgar demasiado en su definición para ver sus beneficios, pero requiere disciplina. Mucha.

La cuestión es que ese tema me hace ruido desde hace muchos meses. Todo el tiempo, en cada proyecto, siento que arranco bien, escribiendo specs como corresponde, incluyendo algunos user stories del pepino. Pero que de alguna forma, luego de un tiempo, la cosa se descarrila un poco y pierdo la disciplina: Comienzo a escribir sin tests. Si, lo dije, y sin pudor.

Algo empuja, que hace que pierda esa batalla. En parte creo que tiene que ver con que el cliente no tiene ni idea del valor del testing y presiona para sacar el feature ya, o simplemente “se trata de un toque muy simple y no vale la pena escribir unos tests para eso”, o lisa y llanamente no llego con los tiempos y tengo que correr para llegar a tiempo (problemas de estimación).

No se muy bien cuál es la cuestión. Si alguien sabe… please, comenten! Imagino que no soy el único con estos fucking problemas.

Asi que mi resolución post LXR es disciplinarme lo suficiente respecto a mis técnicas de BDD. Más allá de los posts habituales de un blog personal, estaré bloggeando acerca de lo que vaya aprendiendo durante la marcha. En principio, back to basics. A leer, estudiar y desde hoy, no escribir sin specs.

*Más vale test en mano que ruby volando. *

Feliz Mix Day (2)

Me pasó a buscar un poco antes de la hora acordada. Ezequiel siempre llega tarde, excepto cuando le toca madrugar. Hoy fue uno de los últimos. Bajé con todos los bártulos y en menos de una hora ya nos encontrabamos en Martínez, listos para continuar.

Arrancamos con los retoques de los tres primeros temas, respondiendo a lo que nuestros oidos nos marcaban. Estuvimos una hora como mucho, subiendo un toqye la voz por ahí, o sacándole graves al bombo de Volando, porque saturaba mal en ciertos lugares. Es una quilombo dar con la mezcla justa que se escuche bien tanto en un super equipo con en un parlante de laptop, pero creo que la pegamos bastante bien.

De los 4 temas que teníamos, ninguno era un claro candidato para ser el primero del día, así que simplemente comenzamos con Estoy/No Estoy. Qué elección. Nos volvimos locos, había casi 30 track para mezclar, al menos 8 tracks de violas… una locura. Sólo luego de 2 horas pudimos darle forma, aunque debo decir que el proceso de re-vestir al tema es fantástico y no deja de maravillarme lo mucho que mejora la canción luego de ser laburada. Temas que uno que cree que “están bien”, mejoran un 100% luego de limpiar, comprimir, ecualizar y agregar reverb en cada track (según correposponda, según tu ido te lo indique). Vale destacar que mezclar no es solo eso, y no se pueden aplicar métodos matemáticos. Siempre hay que recurrir a la oreja. A veces no suena, y la formulita no aplica. Hay que salir a escuchar qué es lo que no suena… A veces simplemente resta escuchar.

Luego de Estoy, siguió Sin Amor, Tun Tun Tun y Navegar (Garage Version).

Con el pasar de las horas, ya habíamos liquidado 8 empanadas, varias botellas de líquido, algunos comestibles grasulientos, y nos disponíamos para terminar con el último tema. Cansancio sobraba, las ojeras creacían y se hundían cada vez más en nuestros rostros, pero así y todo podemos decir que:

Completamos el ciclo propuesto en septiembre del año pasado. Lo logramos. Luego de 12 horas de trabajo continuo, puedo decir que el proceso de mezcla del primer EP de Justo Al Caer ha finalizado. Sólo nos quedan 4 o 5 retoques por realizar entre los 7 temas y podremos decir que en muy poco tiempo se podrán escuchar online.

Feliz. Así estoy. Casi sin creerlo.