sudo -u y du

Septiembre 29th, 2008

Notas para no olvidar:

  • Con sudo -u usuario puedo hacer la acción como dicho usuario. Antés creaba una carpeta con sudo y luego cambiaba con chown el owner (root) de la carpeta. Rollo.
  • Con du podemos saber cuando ocupa un directorio y con for i in *; do du -sh $i; done el espacio que ocupan todas las directorios de mi situación actual.

Gracias Edu.

Actualización: Parece que existe una forma más elegante de hacer esto último:

du -hc --max-depth=1

Muchas gracias nordri, cosas como estas hacen que merezcan dedicar tiempo al blog : -)

Dropbox: Revolución en la oficina

Septiembre 22nd, 2008

Me había llegado por diversas fuentes esta maravilla pero por falta de tiempo los marqué con un keep unread. Cuestión de una mañana para que corriera como la polvora por la oficina, con sus carpetas sincronizadas… con Paquito “el Chocolatero” por la red, la conga,… lo que se dice aprovechar la mañana.

Sobre dropbox se ha escrito mucho, así que os dejo enlaces que, gente con capacidad de comunicación, os ayudará a descubrir un poco mejor este sistema de unidades virtuales, donde mantener nuestros datos sincronizados entre diferentes PCs, revisionados y muchas historias más.

Visto por Fernando Plaza, Pantulis, Applesfera y Antonio Ortiz.

Rails & Breadcrumbs

Agosto 9th, 2008

Después de muchos proyectos y aplicar muchas formas para resolver el asunto del Breadcrumb (las “migas de pan” que suele aparecer en la parte superior para facilitar la navegación), me decidí en busca de alguna alma gemela – no voy muy sobrado de tiempo – que hubiese dado una solución óptima.

Y vaya que si lo encontre: http://szeryf.wordpress.com/2008/06/13/easy-and-flexible-breadcrumbs-for-rails/

Aún no la he llevado al límite pero me está pareciendo de lo más práctico y sencillo. Gracias szery.

Gem: cheat –execute

Agosto 6th, 2008

La última actualización de la gema cheat, una utilidad que nos trae referencias e información sobre otras utilidades directamente a nuestra consola, trae una nueva opción realmente curiosa: –execute o –x, que se aprecia con un ejemplo:

cd /some/dummy/rails/project
cheat install_rspec_rails -x

# This is to install the latest rspec/rspec-rails into
# a rails project.
script/plugin install git://github.com/dchelimsky/rspec.git
script/plugin install git://github.com/dchelimsky/rspec-rails.git
script/generate rspec

Would you like to execute the above sheet? (Y/N)

En caso afirmativo, nos ejecutará todo las sentencias que nos propone. Para disponer de ello, tendremos que instalar la versión “trunk” que se encuentra en github:

git clone git://github.com/zdennis/cheat.git
cd cheat
rake package
sudo gem install pkg/cheat-1.2.2.gem

Ruby vs Nordri: Dirs

Mayo 19th, 2008

Ahí va mi pequeña aportación al reto de nordri. Pronto el script-peliculero..

require 'pathname'
require 'fileutils'

PATH = "/tmp/mnt"
TARGET = "/tmp/target"

def listado(path)
  Pathname.new(path).find do |x|
    file = "#{TARGET}#{x.to_s.split(path)[-1]}" # Obtengo el path relativo
    FileUtils.mkdir(file) if x.directory? && file != TARGET
    FileUtils.touch(file) if x.file?
  end
end

FileUtils.rm_rf(TARGET) if FileTest.exists?(TARGET)
FileUtils.mkpath(TARGET)

listado(PATH)

Nota: Tengo que meter un coloreador de código.

Actualización: Script-Peliculero

He envidiado Python que parece que el metodo isdir  identifica los directorios “.” y “..” como non-directorios reales. Por lo demás, no me he complicado nada la vida traduciendo tan solo el código original de nordri, del que voy sacando alguna conclusión: Ruby y Python son muuuuy parecidos (cosa que ya habia oido 1001 veces).

Empezando con Ruby: Core Classes

Mayo 18th, 2008

Como explico en el blog menos pretencioso de la historia empiezo con nueva sección, que parte de la iniciativa de Jordan Fowler y del que iré tomando las ideas (a igual que con las novedades de Rails). Vamos allá.

Antes de nada, instalarnos Ruby es lo que toca, aunque también existe la opción interprete online para trastear un ratín. En fin, que si todo ha ido bien deberíamos tener disponible un maravilloso interprete (IRB) donde probar nuestras primeras sentencias Ruby.

$ irb
irb(main):001:0> puts "Hola mundo!"
Hola mundo!
=> nil

Si sois capaces de sacar por pantalla esto, ya no hay más historias. Acceder ya a la documentacion oficial RDoc Documentation for Core Classes será el pan de cada día, aunque a muchos de los que nos conozco les sale ulticaria cuando ven el sistema de ordenación que genera RDoc. Suelen optar por opciones más usables, como gotapi o noobkit. Por último, también podemos acceder a la documentación desde nuestra terminal:

$ ri Array
$ ri Array#select

Primera incursión…

 Object.constants.select { |c| Object.const_get(c).is_a?(Class) }.sort

… que paso a explicar. La clase Object, como en otros lenguajes, es la clase raiz en Ruby de la que todo surge. Utilizando Object.constants obtenemos una Array con todas las clases, modulos, constante,… que cuelgan de dicha clase. Para poder obtener solo las clases deberemos obtener instancias de las cadenas que hemos obtenido; el metodo const_get nos ayudará con dicha tarea..

irb(main):001:0> Object.const_get("Array").new
=> []

Guay, no? Hemos podido crear un Array con la cadena “Array”. Siguiendo con la sentencia original, lo unico que nos queda es filtrar las constantes que son del tipo Class y asi obtener las 65 core classes de las que dispone la clase Object en Ruby.

=> [“ArgumentError”, “Array”, “Bignum”, “Binding”, “Class”, “ConditionVariable”, “Continuation”, “Data”, “Dir”, “EOFError”, “Exception”, “FalseClass”, “File”, “Fixnum”, “Float”, “FloatDomainError”, “Hash”, “IO”, “IOError”, “IndexError”, “Integer”, “Interrupt”, “LoadError”, “LocalJumpError”, “MatchData”, “MatchingData”, “Method”, “ModelProxy”, “Module”, “Mutex”, “NameError”, “NilClass”, “NoMemoryError”, “NoMethodError”, “NotImplementedError”, “Numeric”, “Object”, “Proc”, “Queue”, “Range”, “RangeError”, “Regexp”, “RegexpError”, “RubyLex”, “RuntimeError”, “SLex”, “ScriptError”, “SecurityError”, “SignalException”, “SizedQueue”, “StandardError”, “String”, “Struct”, “Symbol”, “SyntaxError”, “SystemCallError”, “SystemExit”, “SystemStackError”, “Thread”, “ThreadError”, “ThreadGroup”, “Time”, “TrueClass”, “TypeError”, “UnboundMethod”, “ZeroDivisionError”

Pronto más.

Viviendo en el Edge: Piloto

Mayo 12th, 2008

Desde hace bastante me han ido llegando al Reader™ los cambios que se van incluyendo a lo último de Rails, cambios aún no “tangibles” y que si no lo trabajas día a día, no le vas echando caso alguno..

Así que nada, aunque el asunto ya lleva bastante tiempo (va por la entrada #20), poco importa, ya que de momento todo son cosas que no están en la calle de manera oficial. Me uno a los amigos franceses aunque no pretendo hacer una traducción ni literal ni completa (ojala tuviese el tiempo).

En fin, empezemos: Cambios del 17-12-2007 al 30-12-2007.

Manejador nativo mongrel

Rails llevará un Mongrel interno de manera nativa e independiente al desarrollo del Mongrel original. Dicho manejador de peticiones interno contará con la ventaja de no tratar las peticiones a nivel del Dispatcher sino de aplicación, con lo que estaríamos cerca de tener algo threadsafe en nuestras aplicaciones Rails.

Hacia la compatibilidad con Ruby 1.9..

El trabajo hacia la compatibilidad de Rails con la 1.9 sigue viento en popa, gracias a los incodicionales que están detras del framework aportando sus contribuciones a la causa. Con esta nueva versión de Ruby podremos olvidarnos de problemas con el encoding, nuevas sintaxis,.. pero que de momento de poco sirven mientras Mongrel no sea el primero que del el paso hacia la 1.9.

Optimizaciones

Muy interesesante para dos Flowers:

La mejora de decodificación JSON tanto para ActiveRecord (placechannel.com) como para ActiveResource.

Nueva mundaza, ¿que tal me ves?

Mayo 3rd, 2008

Perdí la cuenta del número de mudanzas que he debido de hacer,.. pero esta vez tengo una buena excusa: Mi flamante nuevo dominio. Gracias Edu, gracias Dani.

Con la mudanza pierdo bastante visibilidad con respecto al antiguo blog en LaCoctelera. A cambio gano el control que no tenía. ¿Suficiente? ¿Quien sabe?

En fin, espero que sea el último viaje.. y la última vez que digo esto ;P

Rails: Páginas estáticas

Abril 12th, 2008

Hace no mucho llegaría a vuestros feeds el consejo de Josh Susser sobre como hacer sencillo lo que normalmente nos tiene un rato dubitativos. ¿Donde meter/asociar las dichosas páginas estáticas?

Pese a que la solución de Josh es elegante, di con otra que me pareció bastante más dinámica y que con pequeños ajustes, se convierte, de manera oficial y por vía de apremio, en la solución de aquí en adelante.

Tan sencillo como crearte el controlador Pages..

rails ruby
Copialo

.. y añadir lo siguiente al routes.rb

map.page '/page/:name', :controller => 'pages', :action => 'show', :name => nil

Luego podrás añadir tantos páginas como quieras a la carpeta app/views/pages y enlazarlas es tan sencillo como..

# Con el fichero ayuda.html.erb en app/views/pages
link_to "Ayuda", page_path('ayuda')

Creando un repositorio Git remoto

Abril 5th, 2008

Desde hace un tiempo, en la comunidad Rails, parece que no se habla de otra cosa que no sea Git: un control de versiones que, diseñado por Linus Torvald (se ve que tenía algún que otro rato libre), trae consigo una serie mejoras con respecto a los SMCs ya existente y sobre los que ya corren proyectos como: el propio fuente de Linux, Capistrano, Prototype o Scriptaculous.

Hace un par de días David Heinemeier anunció que ahora sería el core de Rails el que tomaría el mismo camino. Estoy en que se debe haber enterado de que en Flowers In Space no usamos otra ya otra cosa y no ha querido ser menos ;-P

Toda esta historía era porque quería completar la entrada de La Capitana con el método que seguimos para crear un repositorio para cualquiera de nuestros nuevos proyectos. Vamos allá.

Situados en local y dentro del proyecto que quiero gestionar con Git, realizamos lo siguiente:


1. $ git init
Si la carpeta contiene ficheros que versionar pasamos al paso 3.
2. $ touch fichero-borrame
3. $ git add .
4. $ git commit -a -m "Commit inicial"

5. $ git repack -d
6. $ git clone --bare -l . /tmp/your-proj.git
7. $ git --bare --git-dir=/tmp/your-proj.git update-server-info

Ya con el proyecto empaquetado nos dispodremos a subirlo. Para ello tendré en mi servidor instalado el git-core (al igual que lo tenía en local) y el usuario git, aunque esto ya es a gusto del consumidor (los temas de sysadmin no es que me apasionen demasiado).


8. $ scp -r /tmp/your-proj.git mi_usuario@miservidor:~/
9. $ ssh miservidor
10. $ sudo cp -r your-proj.git /var/git     # El usuario git debe ser
el owner de /var/git para el clone
11. $ sudo chown -R git:git your-proj.git/

Y ya por último nos clonamos el repositorio al local.


Si nos la vamos a traer a la misma carpeta donde está el "original",
no olvidar cambiarle el nombre al original o darle uno nuevo la nueva copia.
12. $ git clone ~/carpeta_desarrollo git@miservidor:/var/git/your-proj.git
nuevo-nombre-proyecto

Nada más. Suerte!