En un break mañanero, acabo de estar viendo el resumen de la tercera manga de la Volvo Ocean Race 2012. Con lo “poco” que me gusta el mar, me he quedado babeando delante de la pantalla.
Ultimamente ando muy perdido en mis objetivos de vida, y como consecuencia me he quedado pensando: y esa gente, cuando acaba la regata, ¿de que vive? Supongo que como muchos deportistas de élite, cuando acaba su carrera, dan clases, montan una escuela para enseñar de lo suyo, se hacen entrenadores personales, sacan una marca de “algo” para el sector o pasan a se documentaristas o directivos de alguna empresa o medio de comunicación.
Pero ¿y si no? Además, ¿Empiezas sacandote el PER? ¿qué se estudia para terminar en un barco de la mas alta gama de la ingenieria naval? Porque esa es otra…los barcos. Al igual que la F1, son maquinas hechas a medida, casi a mano, con precisión milimetrica y rendimientos estudiados a la milésima. De todo menos baratos. Y mucho menos “vendibles” luego como productos recreativos (necesitas al menos 8-10 tios para manejar un Volvo Open 70, un pequeñin del 20 metros de eslora y casi 20 toneladas).
¿De donde sacan rentabilidad estas empresas que lo patrocinan? No me creo que sea por el mechandising. Son muchos sueldos de ingenieros, navegantes, productores, publicistas, organizadores, seguros y equipo para invertirlo en vender camisetas y posters. No lo veo…no lo veo!!
Ultimamente estoy centrando todos mis proyectos en mejorar la eficiencia diaria de mis clientes, invirtiendo un trabajo extra en analizar su operativa diaria antes de diseñar, para darle un valor añadido extra al producto que les voy a ofrecer. Intentando que el valor añadido sea el rendimiento que le van a sacar a su actividad, mejorando asi la rentabilidad. A la baja, siempre, porque por lo general la idea es siempre conseguir hacer lo mismo, reduciendo costes, y no hacer más para ampliar ganancias. No está la situación como para intentarlo siquiera.
Y a mi me cuesta convencer a un cliente de que su web corporativa o su proyecto de software cuesta lo que cuesta, y siempre ando regateando y, por lo general, perdiendo yo dinero cuando los proyectos se me van de plazos rentables y horas. Pero esta gente se deja millones en un barco que despues…¿a un museo?
No lo se. Siento como que hay un abismo mental entre los que estamos aquí abajo y los que están allí arriba, sin termino medio y sin posibilidad de tender ningún puente para llegar a cruzarlo.
Excepcional recopilatorio realizado por Luc Bergeron (@Zapatou) de los mejores videos del año en Youtube/Vimeo/etc… (habréis visto algunos, pero todos…imposible!!) :
Y la lista completa de los videos, que ha dejado en su Facebook (impresionante trabajo!)
Con lo que a mi me gusta la heráldica, la serie Juego de Tronos no ha hecho más que alimentar mis vicios. Lo que no sabía era que la serie proviene de una novela de George R. R. Martin, con varios volúmenes de una coleccion llamada “Canción de Hielo y fuego” que, a todas luces, van a alimentar más de una temporada en television.
Mini serie americana que describe la vida de dos chavales normales en Nueva York que intentan abrirse paso en el mundo de la moda con todas las oportunidades y problemas que ese mundillo en esa gran ciudad plantean. El tema principal de los creditos se llama I need a Dollar de Aloe Blacc.
The Boondock Saints, genial pelicula casi de culto, de corte irlandes americano con los geniales Sean Patrick Flanery, Norman Reedus y Willem Dafoe que realiza un papel impresionante. Escrita y dirigida por Troy Duffy, no es sólo una más de esas peliculas narradas en torno a la ciudad de Boston y su tradicional casta irlandesa residente. El tema principal con el que abre la película es una cancion tradicional irlandesa llamada The Blood of Cu Chulainn (la sangre del dios Cu Chulainn), y está interpretada por Mychael & Jeff Danna, autores tambien de otras bandas sonoras como la serie Camelot o la película Green Dragon.
Os dejo aqui algunos cortes que me he ido encontrando y que me he hecho yo a partir de temas de películas, series, sonidos, etc.
En algunas he intentado recortarlo para que cuadre más o menos bien el final y el principio del corte, para cuando se reproduzca en bucle infinito mientras salis de la ducha corriendo. A algunos le he subido el volumen 4dB, 7dB o incluso 10dB para que se oiga bien fuerte en el movil para poder oirlo. Probad con varios, porque en algunos móviles esto genera distorsiones con los agudos y graves muy periféricos resultantes.
Épico tema Free Bird del peculiar grupo Lynyrd Skynyrd (parece impronunciable, lo se) que yo conocí a través de una secuencia del entierro rockero de la película Elizabeth Town
Los incondicionales de Tim Burton sabemos muy bien que esta obra maestra es una de las más gamberras del director, y probablemente muchos nos habremos criado con la serie de dibujos animados que ninguno de nuestros padres comprendia como podia gustarnos. Beetlejuice, zumo de escabajo :D
Corte de una pequeña parte del tema King Acrisius que me encanta y que lamento que no hayan desarrollado más, parte de la excepcional banda sonora de Ramin Djawadi entre otros, para la pelicula remake Class Of The Titans que en 2010 revolucionó el clásico de los años 80 con un actor de moda últimamente Sam Worthington y una actriz en auge como Gemma Arterton entre otros tantos buenos actores.
Para quien no conozca al genial Pogo, es un Dj que utiliza y remezcla cortes de peliculas para crear auténticas obras de arte. El señor de los anillos, Harry Potter, Bambi, Terminator, Hook… un auténtico genio.
Cortes del tema The Recluse de la banda inglesa Plan B, una mezcla que no se definir entre HipHop, House o incluso Indie en algunos temas. Concretamente estos cortes pertenecen al remix de Nero. Recomiendo encarecidamente escuchar también este otro remix hecho por Netsky.
Tal Ben Ari, o Tula, es una cantante israelita residente en Barcelona que colaboró con el proyecto Playing for Change que se ha hecho eco en todo el mundo con la cancion Stand By Me grabado a lo ancho y alto del planeta, con multitud de autores casi anónimos, desconocidos en su mayoria más allá de su calle o su barrio.
Cortes del tema Blinded By the Lights del rapero británico Michael Skinner, conocido como The Streets. Un músico muy peculiar con estilo HipHop o UK Garaje, que a mi entender es algo así como el Indie Británico aplicado al HipHop.
Temas principales de la melodía de la astuta Pantera Rosa que tantos quebraderos de cabeza le daba al Inspector Clousseau. El diamante, que no el felino, era el protagonista de la película original de 1963, dirigida por Blake Edwards. El tema principal estaba compuesto por Henry Mancini e interpretado, según versiones, por grandes del Jazz como Plas Johnson o Tony Coe, que le ponian melodia a los créditos iniciales, animados por el genial Friz Freleng. Fueron estos créditos los que dieron paso a la serie de animación que todos recordamos, con el habitual estilo gamberro y destructor de Feleng, autor también de otros notables como Piolín, El gato Silvestre o Speedy Gonzales.
Poco hace falta decir del Doctor Henry Walton Jones Junior, o Indiana Jones, el arqueologo más famoso del mundo del cine, ni del compositor de la banda sonora original, John Williams.
Tema original para la primera y segunda temporadas de la serie The Unit. Copmpuesta por Robert Duncan, se basó en el imno de carrera y entrenamiento de los Marines americanos para crearla. En las siguientes temporadas untilizaron un nuevo tema, también de Duncan, llamado Walk the Fire.
Estridente sonido del Farnsworth, aparato de comunicaciones utilizado en la serie Estadounidense Almacén 13, que según parece va a tiene finalmente una tercera temporada a disposición de los fans.
El sonido que emitia el simpático robot de Pixar Wall-E. Para el que no lo sepa, las siglas WALL-E significan Waste Allocation Load Lifter – Earth Class, o lo que es lo mismo, Elevador para Asignación de Carga Residual – Clase Tierra.
En mi ultimo trabajo por cuenta ajena, tomando un café con el jefe le hice una pregunta que no supo contestarme: ¿Por qué una empresa tiene que crecer año a año?
Obviamente, si me dió una primera respuesta rápida “porque hay inversores“, dijo, pero le insté a pensarlo un poco más y responderme, porque a mi forma de ver los inversores poseen un % de la empresa, y por tanto se llevan dicho porcentaje de los beneficios cada año. No hay razón para incrementar dichos beneficios año a año, una vez recuperada la inversión inicial, ya que todos los años ganarán dinero si la empresa va bien.
Todo esto es una história mucho más larga y con muchos más argumentos a favor y en contra entre mi ex-jefe y yo, y sospecho que tendrá algo que ver con la historia del dinero [2][3][4][5]
El caso es que llevo tiempo queriendo relatar mi teoria sobre el (absurdo) crecimiento empresarial, desmedido y sin control y, por extensión, el panoráma económico. Tengo algunos bocetos hechos en mi pizarra a modo de storyboard, para montar un video animado, pero me gustaría comentarlo con vosotros y explicaroslo paso a paso por si en algún sitio me estoy dejando algo y estoy basando mi teoria de lo absurdo en principios equivocados.
Paso 1:Montemos una empresa: Tengo una idea, monto mi empresa y necesito buscar inversores con los que tendré que repartir beneficios (y echo la cuenta tras 3 años).
Dertalles Paso 1 (1/2):Tengo mi idea. La quiero montar como empresa, pero como no tengo dinero, le tengo que pedir dinero a unos inversores (o al banco). Con ese dinero, monto la empresa y de lo que facturo saldrian por un lado los gastos (costes de producto, empleados, infraestructuras, etc…) y unos beneficios limpios (tras gastos). En el ejercicio de mi actividad, tendré que pagar impuestos por dos partes: por parte de mis gastos (IVA, IRPF, IBI, etc..) y por parte de mis beneficios (35% antes de poder repartirlos).
Del resultado, de lo que queda, una parte infima será para mi, como iniciador de la idea de empresa, y una gran parte será para mis inversores (en la proporcion en la que hayan invertido, obviamente. Pero generalmente hace falta que inviertan mucho).
Detalles Paso 1 (2/2): mismo esquema, pero pongamosle algunos numeros genéricos. La idea nos cuesta 0 (es gratis). Montar la empresa pongamos que cuesta 100 (no euros, un valor unitario). De esos 100 supongamos que yo pongo 20 de mis ahorros, y mis inversores/bancos ponen 80. Empezamos los negocios y resulta que la idea era buena y está bien implementada como para generar 150 (uds.) al año. Pongamos que de esos 150, 90 se nos van en todos los gastos (nóminas, materiales, comunicaciones, viajes, impuesto..etc) y que nos quedan 60. De esos 60 pagaríamos algo más de un tercio (35%) de impuestos y, redondeando, nos quedarian unos 40 para repartir entre los inversores y yo. El la misma proporcion que invertimos (20%, 80%) redondeando yo tendria unos 8 y mis inversores 32 al año. Tras unos 3 años, habriamos recuperado la inversion inicial y realmente empezaríamos a ganar dinero con la empresa.
Por tanto, tras los tres primeros años, las ganancias generadas por la empresa las embolsaríamos completamente, puesto que ya habriamos recuperado lo invertido, y nuestras ganancias anuales serían más que aceptables.
Tras 6 años, habriamos 28 y 112. Tras 9 años 52 y 208. En poco menos de 10 años, casi habriamos triplicado nuestros activos. Además de esto, habriamos generado empleo, contribuido con nuestros impuestos y generado sustanciales ganancias para nuestros inversores.
Paso 2: Explicación del crecimiento: Pero que es el crecimiento entonces???
Detalles Paso 2 (1/2): Segun lo explicado hasta aqui, tomando una referencia de 3 años que tardamos en generar la inversion inicial, los tres primeros años ganariamos más bien poco, pero tras recuperar la inversion, todos los años ganariamos lo mismo. Recordemos, un poco más de lo que invertimos, pero habiendolo recuperado, luego ganandolo extra cada año. El problema está cuando nuestros inversores nos dicen que quieren que crezcamos un 5% anual. Esto es que este año voy a ganar lo mismo que el año pasado, más un 5%. Y al año que viene tendre que ganar lo mismo que este año, más otro 5% (de lo de este año!!), y así sucesivamente. Obviamente, este modelo económico tiene la parte buena de que genera ganancias exponencialmente más altas cada año. Además, podriamos argumentar que si la empresa crece, también aumentarian los puestos de trabajo, el volumen de impuestos a la sociedad y el gasto en recursos, lo que genera un movimiento de mercados importante (si yo vendo más, mis proveedores tambien venden más, etc..).
Detalles Paso 2 (2/2): Todo esto está muy bien. Pero se nos olvida que si tenemos más gastos, también estamos consumiendo más como empresa. Y consumir más significa que, al final de una cadena mercantil muy larga de explicar, consumiríamos fundamentalmente más materias primas, y más energía. Además, estaríamos favoreciendo que pudieramos ser cada vez más y más gente, ya que estariamos generando nuevos puestos de trabajo. Más gente, consume también más recursos. Consumir más recursos implica aumentar su gestión, y esto probablemente, favorezca la creación de nuevas empresas, que a su vez, generarán empleo, impuestos,…y beneficios!! Un circulo vicioso que se retroalimenta a si mismo en una sola dirección posible: crecer.
La base de todo esto son recursos que, al ritmo de explotación que estamos expoliandolos, no van a ser infinitos. Y solo tenemos un problema: sólamente tenemos un planeta.
Donde empezó a ser entonces un problema el montar una empresa?? Cuando nos dejamos engañar para generar más beneficios cada año. Cuando nos dejamos engañar para Crecer, cuando en realidad con mantenernos podriamos vivir perfectamente.
Como veréis, tengo muchas lagunas y puntos cojos y divago demasiado. Por eso os pido ayuda. A ver si entre todos sacamos un guion chulo que la gente entienda bien :D
Llevo un tiempo sin tiempo e intentando formarme en varias tecnologías para sacar varios proyectos, remunerados y no, adelante. Lamentablemente no estoy pudiendo profundizar ni avanzar lo que quisiera, y mi visión por ahora no pasa de la perspectiva de otear el horizonte por encima de la barandilla, de puntillas para poderme asomar.
Las tres tecnologías entre las que me debato, para unos u otros proyectos, rondan siempre a Java, Django y RoR. Parto de la base de que mis conocimientos web se quedaron en el html (cutre) y que me he saltado directamente a uno de los grandes como PHP, que no solo se queda ya como algo muy sencillo comparándolo con estos tres “nuevos” lenguajes, sino que además a día de hoy ya es tontería ponerse a aprenderlo.
Acabo de leer de entre mis tabs eternamente a la espera de ser leidos, una entrevista que le hizo mi amigo @sowe a @happywebcoder, o Raul Murciano, como le conocí yo en la universidad cuando era mi profesor. Un excepcional profesional, guia de referencia para mi en muchos campos además del de la programación.
Os la reproduzco aquí, porque conmigo ha conseguido que me pique el gusanillo (@sowe, objetivo conseguido!! ;D), como para, a estas alturas que aún no he dado ningun paso imporante adelante, quizas decantarme por RoR antes que Django para muchas cosas (o todas).
¿Como esta el RoR en San Francisco (SF)?
Pues la verdad es que en plena forma. En SF hay muchísimas start-ups y muchas de ellas basan su tecnología en la web. Rails encaja muy bien con la filosofía de una start-up: permite prototipar muy rápido sin que el código deje de ser mantenible, ir refinando el prototipo mediante iteraciones cortas, incorporar gente al equipo es fácil porque todo el mundo sigue las mismas convenciones… Aquí se han dado cuenta de todas estas ventajas y, pese a que hay una cantidad tremenda de empresas… siguen haciendo falta programadores!
¿Como te has adaptado a SF?
SF es una ciudad muy acogedora, siempre encuentras alguien dispuesto a orientarte o echarte un cable. Tengo la sensación de que muchos de sus habitantes también proceden de otros sitios y hay cierto ambiente de solidaridad.
Eso sí, es una ciudad muy cara, especialmente el tema del alojamiento está por las nubes. En nuestro caso hemos optado por vivir en las afueras, en Berkeley: en 20 minutos de BART (parecido al metro) estamos en la ciudad y es un sitio más pequeño que encaja muy bien con nuestro estilo de vida (venimos de vivir en un pueblecito de la Costa Brava). Nos gusta tener la ciudad cerca para hacer alguna escapada de vez en cuando, pero para el día a día preferimos un sitio más tranquilo… será que nos hacemos mayores
El idioma es sin duda mi punto débil, pero es parte de lo que quiero mejorar durante el tiempo que esté aquí. Por suerte mis compañeros de trabajo son encantadores y tienen una paciencia tremenda conmigo.
Lo que no podemos evitar es echar de menos a la familia: por suerte podemos hablamos por videoconferencia muy a menudo y les mantenemos informados por facebook para compartir con ellos un poco de nuestro día a día. Tener la familia y los amigos lejos es sin duda lo que más nos cuesta de estar aquí.
¿Como ves Ruby y RoR desde un punto de vista tan privilegiado como heroku?
Heroku aloja miles de aplicaciones basadas en Rails y en ese sentido sí es un punto de vista privilegiado porque puedes ver cómo aumenta el número de empresas que apuestan por Rails. Nuestro equipo de ventas nos informa cuando detecta alguna empresa conocida adopta nuestra plataforma y por suerte ocurre bastante a menudo. Por otra parte, Heroku utiliza internamente muchísimos proyectos open source desarrollados en Ruby. En todos ellos ves que la evolución no para y que tienen un ritmo de actividad impresionante, igual que impresiona el número de grupos locales y de conferencias dedicadas a practicar y difundir las bondades de Ruby y Ruby on Rails por todo el mundo. Por todo esto creo que tanto a nivel de popularidad entre las empresas
como de actividad por parte de la comunidad Ruby y Ruby on Rails están en un momento dulce.
Que crees que le falta a RoR para difundirse mas?
Tiempo. Creo que en las tecnologías, como en muchas áreas de conocimiento,cada persona tiene distintos grados de interés y de
permeabilidad hacia las novedades. Diría que tanto Ruby en el campo de la programación como Rails en el del desarrollo web han hecho suficiente “ruido” como para que la gente que tiene interés en estar al día haya oído hablar de ellos.
También creo que esa entre esa gente se ha creado suficiente masa crítica de usuarios como para darle entrada en el mundo empresarial, y que las empresas que tienen interés y se lo pueden permitir han empezado a probar Ruby y Rails con pequeños proyectos. Creo que es importante hacer esta puntualización sobre “las empresas que se lo pueden permitir” porque hay empresas que, o bien porque se dedican a temas en los que Ruby y Rails no encajan, o tienen una estructura demasiado rígida que les impide evaluar nuevas tecnologías (lo cual me parece peligroso a largo plazo si la tecnología juega un papel importante en su negocio).
El siguiente nivel de “permeabilidad” serían las personas y empresas que sólo prueban y aprender nuevas tecnologías cuando no les queda más remedio, porque el mercado se lo exige. Ese paso es con diferencia el más lento y sólo el tiempo dirá si Ruby y Rails llegan a penetrar a ese nivel, pero eso depende en gran medida de otros factores diferentes a la difusión.
¿Que crees que le falta a ruby o RoR o en que podía mejorar?
Antes de nada me gustaría resaltar que Ruby no es el lenguaje perfecto ni Ruby on Rails el framework ideal para desarrollo web porque “there are no silver bullets”.
Vamos con Ruby:
- a nivel de sintaxis es un lenguaje muy conciso pero me gustaría que lo fuera un poco más (por ejemplo soy fan de la tabulación de python vs el “end”).
- del desarrollo del lenguaje en sí apenas conozco nada así que poco puedo aportar. Si acaso comentaría que en alguna de las listas
oficiales (ruby-dev) aún se utiliza japonés y yo unificaría en todas el uso del inglés.
- en cuanto a las librerías creo que rubyems, pese a ser un proyecto indispensable para cualquier programador Ruby, aún está a mucha distancia por ejemplo del CPAN de Perl.
- para terminar, siempre le pediremos a ruby más rendimiento y menos consumo de recursos: por suerte hay gente muy buena trabajando en las diferentes implementaciones de Ruby así que veremos mejoras.
En cuanto a Rails:
- la versión 3 ha traído una fuerte reestructuración interna: ahora Rails es mucho más hackeable pero creo que el rendimiento (al menos en modo desarrollo) se ha resentido mucho, así que me gustará ver si mejora en ese aspecto.
- la documentación, tanto a nivel de API como de tutoriales y guías de buenas prácticas, es fundamental para facilitar la adopción y uso de un framework. Por suerte gente como Xavier Noria han dado un paso al frente y con un trabajo diario han conseguido generar una documentación magnífica además de facilitar la participación de cualquier interesado en corregirla o completarla, espero que más gente se anime a colaborar en este apartado.
- como twitteaba hace poco @mgnoriega, es bueno ver que tras una etapa de consolidación Rails está de nuevo innovando: me gustará ver en funcionamiento la gestión automática de assets y su integración con coffeescript en su siguiente versión. Era algo que hasta ahora se gestionaba con plugins: espero que siendo los nuevos defaults su adopción crezca entre los desarrolladores, muchos usuarios se verán beneficiados al visitar webs con contenidos comprimidos y optimizados para su descarga y cacheo.
¿Quizá uno de los aportes de RoR sea la metaprogramacion aplicada?
Sí y no. Yo creo que la metaprogramación es buena cuando sirve para evitar repetir código, pero creo que en algunas versiones anteriores de Rails se llegó a abusar demasiado de ella: algunos fragmentos eran demasiado “exóticos” y eso dificultaba corregir errores o simplemente comprender cómo funcionaban. Creo que hay que buscar un compromiso entre la elegancia y la legibilidad del código y creo que en ese sentido Rails ha madurado bastante.
¿Que ventajas ves a ROR frente a PHP y al todo poderoso JAVA?
La primera ventaja que yo veo es la sintaxis: creo que Ruby es un lenguaje muchísimo más conciso y elegante que PHP y Java. Hay gente que no le da importancia a estas cosas, pero a mí me parece fundamental que el código sea siempre fácil y rápido de leer, mantener y modificar. En ese sentido creo que Ruby es mejor que PHP (cuya sintaxis para trabajar con orientación a objetos siempre me ha parecido un apaño) y que Java (que en mi opinión tiene una sintaxis que conduce a diseños demasiado recargados).
Para mí, hasta hace poco tiempo PHP era una alternativa válida frente a Rails cuando necesitabas desarrollar una web muy sencilla. Con la aparición de rack y Sinatra no encuentro un ejemplo en el que optar por PHP. Otra ventaja que tenía PHP era su ubicuidad y su facilidad de despliegue: con Heroku tardas menos de un minuto en crear y pasar a producción una aplicación Ruby… Así que yo ya no le veo ninguna ventaja a PHP.
Java tiene un mercado empresarial grandísimo en varias plataformas diferentes y por tanto hay mucho dinero invertido, no se dejará de utilizar de la noche a la mañana y seguro que mantiene una posición privilegiada en mercados concretos. Eso sí, creo la desaparición de Sun supone un revés muy importante, y no sé si Oracle tiene muy claro qué hacer con lo que ha comprado… Diría que Java es como los abuelos cascarrabias de las películas: le queda mucho tiempo entre nosotros pero cada vez menos gente quiere hacerse cargo de él. Como anécdota, Jonathan Schwartz (ex CEO de Sun) utiliza Rails en la empresa que fundó tras vender Sun, y no creo que le falten contactos ni recursos para contratar profesionales Java de primer nivel .
Cómo evitar que ROR crezca hasta hacerse inmantenible como JAVA? ¿Está RoR hecho para el mundo Enterprise?
Las aplicaciones de mi empresa tienen muchos usuarios… ¿Rails escala? ¿Crees que hay mundo después de java?
(Agrupo estas tres preguntas para darles una respuesta común).
Creo que con la tecnología que tenemos hoy en día, los culpables de que un proyecto sea difícil de mantener somos las personas y no los lenguajes o frameworks que utilicemos. Los plazos de entrega irreales y la desgana a la hora de programar pueden darse tanto en proyectos Rails como en proyectos Java. Sí creo, como te decía antes, que creo que Ruby ayuda a tener un código más mantenible que Java… pero durante mi tiempo de freelance he visto aplicaciones Rails cuyo mantenimiento debe ser un infierno, así que usar ruby no asegura nada.
En el 2008, yellowpages.com explicaba en conferencias cómo había migrado de Java a Ruby on Rails. El código pasó de 125.000 a 20.000 líneas, se alegraron de comprobar que había mejorado muchísimo su mantenibilidad y seguían sirviendo más de mil millones de páginas al mes. Como ejemplo extremo de escalabilidad tenemos empresas como twitter o facebook que han probado distintas tecnologías y han terminado ajustándolas a medida para que se adapten a lo que necesitan. El límite de Rails parece que está entre ambos ejemplos pero lo desconozco porque no he trabajado en proyectos de esa escala.
Ya tenemos muchos programadores formados… ¿Compensaría fórmalos en RoR?
Yo lo haría si fuera mi empresa y pudiera permitírmelo. Como mínimo, aunque no quieras cambiar de tecnología, seguro que sacarían algunos patrones interesantes que poder aplicar con la tecnología que utilizan actualmente.
¿Serían nuestros programadores más felices trabajando con RoR?
No lo sé, puedo decirte que yo sí lo soy (he trabajado previamente con PHP y Java).
Esta semana he localizado este impresionante video de la Estación Espacial Internacional (ISS) con el transbordador espacial Shuttel Endeavour anclado, grabado por la reciente expedición de la nava Soyuz. Muchas gracias a Daniel Marin de @Eurekablog y su interesantisimo artículo con muchisima información adicional sobre la misión.
Hace un par de semanas perdí un disco duro USB de 2.5″ que llevaba a todas partes conmigo y contenia un archivo encriptado con TrueCrypt con todos los datos de clientes y proyectos. El disco salió volando, chocó contra el suelo y adiós datos. Por fortuna solia hacer copia de seguridad del archivo encriptado de 100GB cada mes aproximadamente. Aparentemente suficiente pero, después de casi un mes de locura y recuperación del trabajo perdido, he aprendido que no es suficiente.
La solución era montar un sistema de copias de seguridad automatizado, que realizase las copias en lapsos de tiempo mucho mas pequeños. El problema es que copiar cada hora 100 GB de datos es imposible. La solución vino dada por Rsync, un programita nativo de Linux que, gracias a las librerias de CygWin, dispone de una versión compilada para Windows. Hay multitud de tutoriales por ahí que explican como usarlo, instalarlo y configurarlo. Yo no voy a reinventar la rueda. Sólo a explicar la solución que he planteado, principalmente para acordarme más adelante, pero también por si a alguien le sirve de utilidad
Nota Previa Importante: Rsync permite realizar sincronizaciones incrementales de archivos entre directorios locales y remotos. Aqui sólo voy a plantear la sincronización local entre dos unidades encriptadas con Truecrypt en dispositivos diferentes (portatil y USB).
Para utilizar Rsync de forma local no hace falta instalarlo como servidor en las maquinas destino. Si bien esto restringe el uso de determinadas funciones (como las rutas rsync://), la mayoría de funcionalidades se mantienen y la operatividad es plena. Para una utilización local en Windows únicamente hacen falta el ejecutable (rsync.exe) y las librerias cygwin1.dll y cyggcc_s-1.dll disponibles en el paquete de CygWin (hay multitud de fuentes en internet. Yo dejo aquí colgado el paquete mínimo utilizado en este tutorial).
Al ser un comando nativo de Linux, las rutas locales plantean son un problema, ya que en linux se utiliza una notacion similar al estandar POSIX (el “\” de windows es “/” en linux). Esto se soluciona con la libreria cygwin1.dll que simula una instalacion de cygwin y utiliza las referencias de linux (“/”) para trabajar, pero enlaza con las rutas locales de windows referenciadas con “\”. Además, la implementación de Rsync incluye un parseador que traduce las rutas de “\” a “/” (me ha dado algunos problemas con rutas complejas y nombres de archivo).
Las unidades de disco, en Windows se representan con la letra y los dos puntos (C:\, D:\, etc). La libreria de Cygwin nos ayuda con esto tambien traduciendo cada unidad como una ruta de linux (C:\ se convierte en /cygwin/c/, por ejemplo).
Con todo esto, la utilización de Rsync queda configurable en ambos sistemas exactamente de la misma forma, por lo que para hacer cualquier otra configuración sólo hay que ir a la documentación o a los múltiples tutoriales existentes. En el comando de arriba:
COMANDO BÁSICO:
rsync “origen” “destino“
(las comillas no son obligatorias, pero si utiles en windows para las rutas con espacio)
OPCIONES:
-a: modo archivo. Compara y copia archivos con archivos, no directorios entre si.
-u: actualizar. Si en el destino hay un archivo con una fecha de edición posterio al que queremos copiar, no lo sobreescribe. Esto puede dar problemas de actualización si se utiliza y sincroniza el dispositico con más de una fuente.
-b: BackUp. Si actualiza un archivo con una nueva versión posterior, hace copia de seguridad del mismo y le añade un sufijo (~por defecto, pero también configurable). Si en el origen se elimina un archivo, en el destino se elimina también, pero se deja una copia con sufijo, como backup. Es muy util para tener las dos ultimas versiones de un archivo y para prevenir borrados accidentales.
–sufix: sufijo definible para sustituir a la ~ para los archivos de copia de seguridad. Es altamente recomendable de utilizar en sistemas Windows, ya que es muy complicado hacer busquedas de archivos que contengan ~ para localizar los archivos de backup.
-r: recursivo. Actualiza todo, desde el directorio principal que le damos, por todos sus subdirectorios hacia abajo.
-p: mantiene los atributos de permisos del archivo copiado. Si se va a utilizar tambien en sistemas Linux es conveniente añadir tambien las opciones -o (de owner) y -g (de group), para mantener los atributos completos de los archivos.
-t: mantiene los atributos de tiempo de modificación del archivo copiado.
-P: progreso. Con cada archivo que copia o actualiza, muestra una barra de porcentaje durante el proceso. Es más util para transferencias por red.
-h: escribe los datos por pantalla más amigables (en Kbs, Mb, etc…). Combiar siempre con más opciones porque suelto muestra la ayuda.
–logfile: ruta al archivo de log donde se escribirán las acciones que se vayan realizando.
–delete: borrado. Es la opción que permite eliminar un archivo en el origen y que al actualizar la copia de seguridad, se actualice la eliminación también. Si se combina con la opcion de -b (de backup), actualiza eliminando, pero guarda una copia, por si acaso.
–stats: estadisticas. Al terminar la actualización presenta un pequeño resumen de actividad (archivos copiados, tiempos empleados, tamaño total de arcvhvos actualizados, etc…)
–fake-super: opción MUY IMPORTANTE en Windows. Rsync utiliza archivos temporales para realizar las sincronizaciones (que luego elimina). Junto con el cambio de las fechas de acceso de archvos, en los sitemas Windows son tareas que requieren privilegios de administrador. Si no se utiliza esta opción la actualización se realiza correctamente, pero se obtienen mensajes de error con cada transferencia realizada. Muy incomodos y feos de leer. Mejor usarla.
–exclude: opción muy recomendable en Windows para las papeleras, si se van a utilizar sincronizaciones de unidades completas (como en este ejemplo, que sincronizamos unidades virtuales de TrueCrypt entre si). Windows guarda en un directorio oculto ($RECYCLE.bin) las copias de los archivos que eliminamos parcialmente, con referencias aleatorias suyas, hasta que vaciamos la papelera. Rsync al eliminar archivos en las sincronizaciones los manda a estas papeleras por lo que, si no las excluimos, se sincronizarán entre si, aumentando su tamaño exponencialmente y reduciendo el espacio disponible en las unidades, además de ir tardando cada vez más en completarse, al haber más archivos.
Un detalle importante es la barra final del path “/” que SI aparece en la ruta de origen, pero que NO debe aparecer en la ruta de destino. Si la dejamos en origen y en destino, rsync sincronizará todo el directorio de origen en el directorio de destino, haciendo una copia del directorio dentro del destino. Si no hacemos esto, las dos unidades TrueCrypt no serán iguales, ya que en la copia de backup abrá un nivel de directorios más que en el original. En Windows esto puede llegar a ser un problema, ya que hay un limite máximo de profundidad (subdirectorios) que, si se supera durante la copia, puede dejarnos una copia de seguridad estropeada e incompleta
“/cygdrive/origen/” “cygdrive/destino/” NO!!
“/cygdrive/origen/” “cygdrive/destino” SI!!
Para terminar dejo el código de un archivo .bat que me he hecho para el caso, donde sólamente hay que configurar las rutas al principio y queda todo hecho. Sólamente hay que configurar una tarea en el Programador de Tareas de Windows para que se ejecute con la recurrencia que creais conveniente.
Dejo aqui también un paquete BackUps-Rsync.zip con los archivos y librerías necesarias para este tutorial, así como dos versiones de archivo .bat: BackUp.Inicio.bat (genera un archivo de log por cada ejecución, con la fecha de la ejecución) y BackUp.Recurrente.bat (genera un archivo de log diario, donde se guardan los logs de todas las copias de backup ejecutadas en un mismo dia).
@echo off
REM ###########BackUps a disco con Rsync (para Windows y Linux)####################
REM
REM Por Skiter el 6/5/2011
REM http://www.skitergia.com/2011/05/05/backups-a-disco-con-rsync/
REM
REM ###############################################################################
REM #################### RUTA DE INSTALACION ######################################
REM # Rutas y nombres de archivo. Todo en formato WINDOWS
REM ###############################################################################
REM Ruta donde está copiado el Rsync
set RSYNC_INSTALATION_PATH="C:\Program Files (x86)\BackUps (Rsync)\"
REM Nombre (sin extensión) para el archivo de logs
set LOGFILE_NAME="BackUpSesion."
REM Ruta donde se alojarán los archivos de log.
set LOGFILE_WIN_PATH="G:\BackUpsLogs\"
REM Directorio (o unidad TrueCrypt) de la que queREMos hacer copias de seguridad
set FILES_TO_BACKUP_WIN_PATH="R:\"
REM Directorio (o unidad TrueCrypt) donde queREMos que se hagan las copias
set BACKUP_DESTINATION_WIN_PATH=”S:\”
REM ##############################################################################
REM ######################## SCRIPT ##############################
REM Guardamos Fecha y hora actuales (en formato YYYY.MM.DD_hhmmss)
set NOW=%DATE:~6,4%.%DATE:~3,2%.%DATE:~0,2%_%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
REM creamos el nombre del archivo de log, con la fecha al final.
REM al valor configurado arriba, le quitamos la ultima comilla (“),
REM le añadimos la fecha, la extensión de archivo y volvemos a cerrar las comillas.
set BACKUP_LOGFILE=%LOGFILE_NAME:~,-1%%NOW%.txt”
REM escribimos en el archivo de log una linea para definir el comienzo del log
echo —- Started First Backup at %NOW% >> “%LOGFILE_WIN_PATH:”=%%BACKUP_LOGFILE:”=%”
REM quitamos todas las comillas (ya no nos van a hacer falta).
set BACKUP_LOGFILE=%BACKUP_LOGFILE:”=%
REM nos movemos al directorio donde está el Rsync
C:
chdir %RSYNC_INSTALATION_PATH%
REM eliminamos y sustituimos algunos caracteres de las rutas configuradas arriba
REM para hacerlas Linux y pasarselas al comando correctamente.
REM al nombre de archivo de log le quitamos las comillas
set LOGFILE_NAME=%LOGFILE_NAME:”=%
REM cambiamos las barras “\” por barras “/”
REM eliminamos todos los “:” (ya no hacen falta)
REM eliminamos todas las comillas de las rutas (las pondremos en el comando)
set LOGFILE_WIN_PATH=%LOGFILE_WIN_PATH:\=/%
set LOGFILE_WIN_PATH=%LOGFILE_WIN_PATH::=%
set LOGFILE_WIN_PATH=%LOGFILE_WIN_PATH:”=%
REM cambiamos las barras “\” por barras “/”
REM eliminamos todos los “:” (ya no hacen falta)
REM eliminamos todas las comillas de las rutas (las pondremos en el comando)
set FILES_TO_BACKUP_WIN_PATH=%FILES_TO_BACKUP_WIN_PATH:\=/%
set FILES_TO_BACKUP_WIN_PATH=%FILES_TO_BACKUP_WIN_PATH::=%
set FILES_TO_BACKUP_WIN_PATH=%FILES_TO_BACKUP_WIN_PATH:”=%
REM cambiamos las barras “\” por barras “/”
REM eliminamos todos los “:” (ya no hacen falta)
REM eliminamos todas las comillas de las rutas (las pondremos en el comando)
REM eliminamos la última barra “/” de la ruta del destino
set BACKUP_DESTINATION_WIN_PATH=%BACKUP_DESTINATION_WIN_PATH:\=/%
set BACKUP_DESTINATION_WIN_PATH=%BACKUP_DESTINATION_WIN_PATH::=%
set BACKUP_DESTINATION_WIN_PATH=%BACKUP_DESTINATION_WIN_PATH:”=%
set BACKUP_DESTINATION_WIN_PATH=%BACKUP_DESTINATION_WIN_PATH:~,-1%
REM escribimos el comando con las variables correspondientes ya formateadas
rsync -aubrpt –suffix=”_backUp” -Ph –delete –stats –fake-super –exclude=”$RECYCLE.BIN” –log-file=”/cygdrive/%LOGFILE_WIN_PATH%%BACKUP_LOGFILE%” “/cygdrive/%FILES_TO_BACKUP_WIN_PATH%” “/cygdrive/%BACKUP_DESTINATION_WIN_PATH%”
REM #########################################################
Algunas referencias que he utilizado para documentarme:
Soy Linuxero converso desde el primer año de carrera y por deformación “frikiaccional” estoy malacostumbrado a usar el Shell Scripting para muchos apaños.
Llevo dos días intentando organizar un par de scripts Linux y Windows para hacer backups automáticos a unidades de disco encriptadas usando TrueCrypt, Rsync, Cygwin y liandola parda (en la parte de windows, como no).
Hoy he sufrido mi propia maldición. Usando un comando linux (sed.exe y gawk.exe en windows, provistos por CYGWin) estaba intentando filtrar la fecha y la hora para añadirla al final del nombre de los archivos de log en formato SQLTime (YYYYMMDDhhmmss)
Output: 2011.05.05.135915 (lo se, lo se. No es SQLTime. He añadido unos puntitos “a lo aleman“)
Con dos cojones (con perdon). Como todo lo que suelo hacer yo, hay una forma más facil de hacerlo (en Windows). Al final va a resultar que MS-DOS no era tan malo).
Resulta que a las variables de entorno que ya existen, puedes incluirle “recortes” añadiendo los dos puntos (:) y la vírgula (~). El primer número es el primer caracter desde el que se empieza a mostrar (la cuenta empieza en 0), el segundo número es el número de caracteres que se muestran (contando desde el primer número).
echo %DATE% = 05/05/2011
echo %DATE:~6,4% = 2011
(a partir del sexto caracter, el 2, contamos 4, inclusive el sexto)
Y cual es la diferencia que ha hecho que me vuelva loco buscando una alternativa nativa de MS-DOS???
Que la segunda forma puedes incrustarsela a un comando de MS-DOS que utilice un ejecutable Linux-like (de CyGWin) y se lo come como si fuese un caracter más en la linea de comandos (por ejemplo, al pasarselo a un atributo de una opción del comando linux).
Cuando termine con los scripts de BackUp dejaré un HowTo aqui y veréis por que necesitaba esta pijoteria.
P.D.: como curiosidad para todos aquellos que habéis aprendido hoy que el “rabito de la ñ” se llamaba “vírgula“, y no biribula, birbula, ño o “palito de la ñ”, os sugiero que busques la definición y la compareis con los resultados en imágenes de google…jajajaja.
P.D. II: Os dejo otros truquillos que despues, refinando el script, he tenido que usar para darle formato a los datos que iba almacenando en las variables.
echo%DATE:~,-3% = 05/05/2
(el -3, sin numero, pero con coma delante, elimina los 3 últimos caracteres)
echo%DATE:~-3% = 011
(el -3, sin numero ni coma delante, empieza a contar por el final, hacia atrás. Sólo los 3 últimos caracteres se muestran)
echo%DATE:/=\% = 05\05\2011
(con un igual entre caracteres, reemplaza las instancias del primero por el segundo. Aqui, las / con \)
echo%DATE:/=% = 05052011
(igual que el anterior, pero reemplazando por nada. Elimina el carácter)
Estoy probando a publicar esta entrada en Skitergia tirado en el sofá de casa y escribiendola en el movil gracias a la aplicacion para Android que tiene Wordpress: