miércoles, 24 de junio de 2015

List In Javascript

I've finished my new pet project: lists with fluent api and like a linq operations. It lives here
It appeared as a code kata, but it finished like a little library.

some tests

 
it("Given different lists with numbers when call zip method, return a list with zipped elements", function(){
   var numbers = new List([1,3]);
   var result = numbers.zip(new List([2,4,6]));
   expect(result.isEqual(new List([1,2,3,4,6]))).to.be(true);
});

it("Given list with numbers when call skip method then Ignores the specified number of items and returns a sequence starting at the item after the last skipped item (if any)", function(){
   var numbers = new List([1,2,3,4,5,6,7,8]);
   var result = numbers.skip(3);
   expect(result.isEqual(new List([4,5,6,7,8]))).to.be(true);
});

it("Given list with numbers when call apply condition with fluent api", function(){
   var result = new List([1,2,4,3,5,3,7,9])
                    .where(function(x){ return x > 1})
                    .where(function(x){ return x < 5});
    expect(result.isEqual(new List([2,4,3,3]))).to.be(true);
});

describe(".orderBy()", function(){
   it("Given list with numbers when call orderAscending method then returns an list ordered", function(){
      var numbers = new List([{number:5, letra:'e'},{number:3, letra:'q'},{number:1, letra:'a'},{number:9, letra:'w'},{number:4, letra:'r'},{number:7, letra:'t'}]);
      var result = numbers.orderBy(function(x, y){
         return (x.number - y.number);
});
    expect(result.isEqual(new List([{number:1, letra:'a'},{number:3, letra:'q'},{number:4, letra:'r'},{number:5, letra:'e'},{number:7, letra:'t'},{number:9, letra:'w'}])))
.to.be(true);
    });
});

miércoles, 4 de febrero de 2015

Cuando el trabajo se convierte en hobby

Muchas veces pienso que tengo suerte, porque mi trabajo me gusta y además me pagan por ello. No solo eso si no que también es un de mis hobbies.
Cuando llega el domingo por la tarde mucha gente se deprime porque tiene que ir a trabajar al día siguiente, pero personalmente no me siento así. Al igual que cuando me levanto por las mañanas.

domingo, 11 de enero de 2015

Comenzando un nuevo año y una nueva etapa

Hace tiempo que no escribo en el blog.

Como se suele decir. He estado un poco liado. Creo que he batido mi record de días trabajados sin descanso: 21 días, no está mal, ha habido compañeros que han mejorado esta marca. Aunque el record de cantidad de horas trabajadas en el mismo día son15, no lo superé esta vez. Aunque tuve un compañero de piso que su record fueron más de 40 horas.

Este año ha venido con un muy esperado cambio de trabajo. Por el camino han quedado las preguntas de las entrevistas, que me han hecho reir, como ¿estás dispuesto a programar hasta las 3 a.m.? o cosas por el estilo.
Durante estos años he conocido a gente estupenda, tanto en el terreno profesional como en lo personal. He aprendido muchas, muchas cosas. Y ha surgido la inquietud de mejorar de una forma constante, disfruntando del camino andado hasta encontrar la meta deseada.

La vida es una sucesión de etapas y llevaba bastante tiempo notando que tenía que comenzar una nueva.

Ahora comienzo con mucha ilusión, en una empresa que se aleja del sector de la consultoría, centrándonse en vender su propio producto. Se cuida muy mucho lo que se hace y cómo se hace. Es una auténtica pasada. Además a la gente le gusta programar y aprender nuevas cosas.

Me ha llamado la atención un compañero que este viernes me ha dicho que el fin de semana lo iba a emplear en estudiar la gramática de una lengua semítica.

He descubierto a otro autor que me llama la atención. Ludovico Einaudi

Me ha gustado mucho este video de Sergio Fernández

Mirar pá lante con ilusión y optimismo

jueves, 27 de noviembre de 2014

Algunas ideas del mundo del desarrollo de software

1._Pasa el tiempo muy rápido, tan rápido que en 2015 cumplo ocho años inmerso en la profesión de programador. Tras este tiempo he acumulado una serie de experiencias, algunas buenas y otras no tanto, junto a una serie de reflexiones que quiero poner en orden en este artículo. [más]

2._El programador es una especie más que intenta sobrevivir en este mundo. El medio en el que un programador nace, crece y muere cambia constantemente y a distintas velocidades. La selección natural se ha convertido en un proceso que en el caso de los programadores se agudiza y muchos individuos optan por la evolución como medio de supervivencia en un sector que sufre cataclismos de forma cíclica. [más]

miércoles, 26 de noviembre de 2014

Remove numbers in an array using gulp, mocha and expect

This last weekend, Iwas at codemotion 2014. In one  of the sessions, the speaker spoke about gulp. He said that it will be the standard tool for web developer. So I´ve done a little kata (remove a number in an array) with expect.js, mocha and gulp in javascript. The code lives here

The gulpfile.js

var gulp = require('gulp'),
   jshint = require('gulp-jshint'),
   mocha = require('gulp-mocha');

gulp.task('jshint', function(){
 gulp.src('source/*.js')
    jshint.reporter('default');
});

gulp.task('mocha', function () {
    gulp.src('test/*.js')
        .pipe(mocha({
            reporter: 'list'
        }))
        .on('error', function(err){
         console.log(err.message);
      this.emit('end'); 
        });
});

gulp.task('watch', function () {
 gulp.watch('source/*.js', function(){
  gulp.start('mocha');
 });
 gulp.watch('test/*.js', function(){
  gulp.start('mocha');
 });
});

gulp.task('default', function() {
    gulp.start('jshint', 'watch');
});


The System Under Test:

function removeElementInArray(number, vector){
 if(vector == []){
  return vector;
 }

 var result = [];
 var head;

 for(var position = 0; position < vector.length; position++){
  head = vector[position];
  if(head != number){
   result.push(head);
  }
 }
 return result;
}

exports.remove = removeElementInArray;

And the tests:

var sut = require("../source/sut.js"),
 expect = require("expect.js");

describe("Remove a number in an array thought functional way using TDD", function(){
  it("Given empty array then return empty array", function(){
    expect(sut.remove(2, [])).to.eql([]);
  });
  
  it("Given array with one element and 0 positions then return the same array", function(){
    expect(sut.remove(2, [2])).to.eql([]);
  });
  it("Given array with two numbers and number then return array without the number in the array", function(){
    expect(sut.remove(1, [1,2])).to.eql([2]);
  });
  it("Given array and positions then return rotated array without the number", function(){
    expect(sut.remove(3, [3,2,3,4])).to.eql([2,4]);
  });
});