Oferta Laboral
Hoy, como todos los días, entro en mi correo y reviso estos para ver si hay alguna oferta de trabajo que sea interesante. Mis razones tendré, no? Pues cual es mi sorpresa cuando me llega un correo que me hace pensar un poco. Publico parte del contenido, para que no salgan referencias de su procedencia ni las personas implicadas ni datos que puedan ser “oficiales“, sólo el texto:
“Si es el caso, este puesto de trabajo es para ti !
Nuestro cliente, uno de los principales player del sector de la aerospacial y defensa, precisa incorporar a un Ingeniero Senior de SW y HW. Participarás en proyectos europeos de “alto secreto” en los cuales varios países están involucrados. Además, como bien sabes, el sector de defensa es de los más punteros a nivel tecnológico.
Te incorporarás a una empresa altamente internacional con muchas oportunidades de carrera, tanto en Barcelona como en el internacional.
Si tienes profundos conocimientos en lenguaje de desarrollo C/C++ y UML (Unified Modeling Language), experiencia en testeo de SW y experiencia en integración de SW/HW, este job es para ti !
Salario: 34.000€ brutos anuales“.
Puedo hacerme una idea de que empresa hay detrás de dicha oferta. No diré el nombre, pero hay pocas empresas grandes que se dediquen a este sector. Porque lo maquillen como lo maquillen, a mi esto me suena a sector armamentístico. soy así de desconfiado, que quieren que les haga. Proyectos “alto secreto”… cagate al lorito… de estos de que si te cuento detalles tengo que matarte? “Sector de defensa”, defender intereses, no? 34.000 brutos anuales? Para ayudar a crear armas? Tan barato está el kilo de almas en la Bolsa de Wall Street?
Un juego en 60 horas

Este ha sido el reto que ha realizado Mojang, creadores de Minecraft, este pasado fin de semana.
La iniciativa ha sido retransmitida en directo desde Humble Bundle aceptando donaciones las cuales han ido en su totalidad a obras de caridad. A esta iniciativa se le han sumado dos estudios más, Oxeye Game Studios y Wolfire Games.
La tematica del juego y el género han sido votados por los usuarios de la web la pasada semana. El resultado, por parte de Mojang, un RTS – Shoot ‘em Up con una ambientación Steampunk -Antiguo Egipto llamado Catacomb Snatch.
Este estudio programa en Java y ha sido curioso ver el proceso de creación de un juego en un lenguaje cuanto menos familiar.
Lo mejor de todo, es que para los que hemos donado, no solo nos llevamos el juego, sino que tenemos disponible su código fuente.
El mismo estudio nos propone bugs a solucionar o retos a implementar en su web. Espero que esto de pie a mods bastante potentes del juego, yo mismo intentaré algo.
Version Control by Example
El otro día llegó a mis manos un manual de control de versiones el cual recomiendo su lectura si no se está muy al día y nos sacan del SVN y nos perdemos. Lo que me llamó la atención de este libro, es el modo como están explicados los distintos tipos de sistemas de control de versiones.
Da un enfoque muy práctico con ejemplos “reales”, los cuales nos dejan claro como trabajar con cada uno.
El libro divide los sistemas de control de versiones en tres generaciones, siendo sistemas como RCS o SCCS la primera generación, CSV o SVN la segunda y Git o Mercurial la tercera.
Se centra sobretodo en las dos últimas explicando sus características y ejemplificandolas.
Una lectura muy recomendable que se puede descargar desde aquí incluso da la opción de pedirlo sin coste en formato impreso.
Google chrome llega a los dispositivos móviles?
Si le quitamos el interrogante, es la noticia geek del momento (hasta que nos olvidemos con tanta velocidad como llegó). Leyendo sólo este titular, que no linko porque hay tropocientos links que hacen eco de la noticia, da la sensación de que el navegador del gran Google ha llegado a todos los dispositivos móviles. ERROR. La verdad es más mundana, ha llegado sólo al “amplio” abanico de dispositivos que corren el “querido” Android 4.0. Y que no nos engañen… en su versión Beta.
No olvidemos que Android 4.0, pretendía unificar la versión de este SO para móviles y tablets, intentando limitar un poco la fragmentación del SO. Y lo está logrando. Ahora la fragmentación consiste en los que tienen los terminales de gama alta y nueva generación… y el resto de sub-humanos que no merecen que se les ectualice sus dispositivos independientemente del dineral que se hayan dejado en sus cacharros.
Google que de tontos no tienen ni un pelo, apuesta por promocionar su navegador (que tiene una cuota de mercado muy amplia) sólo en la última versión del Android, para captar más clientes de su SO, y dejar de lado al 90% de sus usuarios de versiones antiguas mirando al Ice cream Sandwich con envidia y rencor.
Disfrutemos de lo comprado…
Ruby On Rail y van III, problema ‘execjs’
Por tercera vez abordo el tema de Ruby On Rails enfocados a la instalación y configuración iniciales, lo cuál debería ser un proceso sencillo y fácil… al final me ha resultado ser algo más complicado de lo que esperaba en un principio. También he decir en defensa del RoR, que el problema ha sido más a causa de mi desconocimiento de la plataforma que a un problema real, lo cuál me ha hecho desbordarme por no ser capaz de enfocarlo realmente bien.
Mi problema venía cuando pretendía crear desde consola un controlador, o bien ejecutar el servidor de pruebas que viene por defecto con la instalación de RoR, WEBrick. Al intentar ejecutar:
rails generate controller public indexQue pretende generar un controllador denominado ‘public‘ que a su vez tenga un action llamado ‘index‘. (si no sabeis que es un controller y/o un action, deberias informaros de que es la programación MVC resulta muy instructivo). Pero me salía el siguiente error:
/var/lib/gems/1.9.1/gems/execjs-1.3.0/lib/execjs/runtimes.rb:50:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable) from /var/lib/gems/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:5:in `<module:ExecJS>' from /var/lib/gems/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:4:in `<top (required)>' from /var/lib/gems/1.9.1/gems/coffee-script-2.2.0/lib/coffee_script.rb:1:in `require' from /var/lib/gems/1.9.1/gems/coffee-script-2.2.0/lib/coffee_script.rb:1:in `<top (required)>' from /var/lib/gems/1.9.1/gems/coffee-script-2.2.0/lib/coffee-script.rb:1:in `require' from /var/lib/gems/1.9.1/gems/coffee-script-2.2.0/lib/coffee-script.rb:1:in `<top (required)>' from /var/lib/gems/1.9.1/gems/coffee-rails-3.2.2/lib/coffee-rails.rb:1:in `require' from /var/lib/gems/1.9.1/gems/coffee-rails-3.2.2/lib/coffee-rails.rb:1:in `<top (required)>' from /var/lib/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require' from /var/lib/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `block (2 levels) in require' from /var/lib/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each' from /var/lib/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `block in require' from /var/lib/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each' from /var/lib/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require' from /var/lib/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:122:in `require' from /home/sbrocos/workspace/ror/gestorc/config/application.rb:7:in `<top (required)>' from /var/lib/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands.rb:24:in `require' from /var/lib/gems/1.9.1/gems/railties-3.2.1/lib/rails/commands.rb:24:in `<top (required)>' from script/rails:6:in `require' from script/rails:6:in `<main>'
Solución:
Resulta que al generar un proyecto por consola, automáticamente se generan dos archivos, Gemfile y Gemfile.lock. El que resulta importante para nosotros en este caso es el primero. Por lo que yo he entendido, Gemfile, es un archivo por así decirlo de configuración del proyecto, aquí se vincula la “gem” gemas de Ruby, paquetes de software, que ayudaran a la ejecución del proyecto. Así que el error que se nos presentaba, venía a decir que necesitaba ejecutar la libreria de Javascript llamada “execjs“, esto no implica que no estuvieran instaladas, sino que sencillamente no sabía que estuviera vinculada.
Por tanto… lo que haremos será añadir dos gemas nuevas al proyecto, lease escribiéndolas en el fichero Gemfile:
gem ‘execjs‘
gem ‘therubyracer‘
y luego ejecutamos el comando:
bundle install
que lo que hace es instalar en el proyecto las librerías que necesitará para su ejecución. Volvemos a ejecutar el comando que tanto me ha amargado la semana, y vouilà ya funciona.
Al fin.
PD: no crean que hemos acabado con Ruby, aún nos quedan varias cosas que comentar, así que tendremos la IV entrega… cuando la tenga bien clara yo.
Insertar Acl enfocada a clases (class scope) en Symfony 2
Quiero dejar claro que no voy a explicar desde cero cómo crear las Acl ni explicaré como funcionan.
Creo que eso es algo que se explica tanto en el Symfony 2 Book como en otras partes.
Vayamos al grano:
Primero creamos el $objectIdentity con un domainClass:
$aclProvider = $this->get('security.acl.provider');
$objectIdentity = new ObjectIdentity('class', $domainClass);
Donde $domainClass sería un string con la clase sobre la cual se añadirán permisos al usuario. Por ejemplo ‘Acme\DemoBundle\Entity\Class‘
Podemos hacerlo de la siguiente manera:
try {$acl = $aclProvider->createAcl($objectIdentity);}
catch (AclAlreadyExistsException $ex) {
$acl = $aclProvider->findAcl($objectIdentity);}
luego creamos los permisos:
$acl->insertClassAce($userIdentity, MaskBuilder::MASK_EDIT, true); $aclProvider->updateAcl($acl);
Donde $useridentity es la instancia del usuario al que desees añadir permisos.
Tutoriales y trucos de Symfony 2
Quien ha tocado Symfony 2, sabrá lo potente que es. Incluso me atrevería a decir que todavía desconoce su verdadero potencial (me incluyo) dada la profundidad que llega a tener este Framework.
No obstante, ya que es un Framework que salió a la luz hace relativamente poco, la falta de documentación fiable y concisa es algo que nos lleva a todos los desarrolladores de Symfony 2 por el camino de la amargura (no se enfade señor Potencier).
A lo largo de las semanas, iré escribiendo algún que otro truco y/o tutorial de aquello que considere “especial”.
Aviso, no soy un desarrollador fino, no soy un desarrollador recatado y elegante. No juzguen mi código y no critiquen destructivamente.
Tan solo lo hago para ayudar.
Sin más, cierro este post para escribir el primero de los “Tutoriales y trucos de Symfony 2”
Ruby on Rails, mysql… básico
Ya hemos hablado de como instalar el entorno para poder realizar un proyecto con Ruby On Rails (tambien conocido por RoR). Así que vamos a iniciarnos un poco más en como crear un proyecto, si os parece bien.
La creación del proyecto lo haremos a través de consola, que es rápido e intuitivo
$ rails new nombre_proyecto
Activando Django en Mac Os Lion

Otra de las ventajas de tener un Mac (o un linux
) es que si queremos hacer nuestros pinitos en Python, ya lo tenemos preinstalado.
Para comprobarlo, será tan fácil como ejecutar en el terminal el comando:
python
y se nos mostrará algo tal como:
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05) [GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin Type "help", "copyright", "credits" or "license" for more information.
Code Kata y Coding Dojo
Los desarrolladores de software, tenemos la obligación de mantenernos al día y actualizar nuestros conocimientos constantemente.
Es muy fácil estancarse en lo que se necesita para realizar la faena del día a día y con el tiempo darse cuenta que tenemos unos conocimientos totalmente desfasados.
Recientemente he leido varios artículos sobre las Code Kata y el Coding Dojo. Ambas son prácticas que nos permiten practicar y poder mejorar como programadores.
Code Kata

Es un ejercicio de programación que ayuda al programador a mejorar sus habilidades mediante la práctica y la repetición.
Este tipo de ejercicios nos permite realizar un problema simple, atacarlo de distintos modos y analizar los resultados. Al ser un ejercicio de una duración corta, es más fácil encontrar un momento para realizarlo.
El Code Kata se basa en realizar una tarea simple, en un intervalo corto de tiempo (unos 45 minutos) y teniendo un feedback de lo realizado, normalmente usando TDD pero no necesariamente.
Es también recomendable escoger una tarea la cual tenga cierto juego en la repetición de la misma con distinto resultado o distinto modo de realizarla.
Coding Dojo

No necesariamente ligado con el Code Kata, aunque muy relacionado, el Coding Dojo se trata de una reunión de programadores que quedan para solucionar un problema.
Esta reunión parte de un ambiente no competitivo, donde el principal objetivo es aprender, mejorar y sobretodo pasárselo bien.
En el Coding Dojo toman parte los programadores y los espectadores o audiencia. La audiencia puede participar activamente o no en la solución del problema.
A esto se le puede sumar el pair programming, dandole más juego e incluso haciendo rotaciones junto con la audiencia durante la solución del problema.
Tras todo esto, alguien se anima a montar un Coding Dojo?