ciplogic.com
Live with grace. Write superb software.

nodejs

  • core-lang: Better Collection Classes for JavaScript

    It brings me great joy to announce the release of version 1.0.0 of core-lang, the collection classes I wrote for JavaScript.

    Overview

    With an API that is fully compatible with the JavaScript API, keeping the same signatures and behaviors for functions such as forEach, etc, but also inspired from groovy, having methods such as groupBy, chaining support, and full Promise support, allowing to deal with collections that contain promises, or are transformed to promises, using simple chainable calls.

  • fast-live-reload 2.6.0 Can Run Commands for Each File

    If you don't know what fast-live-reload is you should probably see this video. TL;DW: unlike any other live reload tool on the planet, fast-live-reload can build execution pipelines (probably the only one still from the command line), serve folders, proxy sites, etc. Truly a Swiss army knife.

    More than once when monitoring folders, I wanted to execute commands for the specific files that would change.

    A good example that comes to my mind is AsciiDoc. When I monitor a folder where I have a bunch of asciidoc files, I want to run asciidoctor individually. For that file. So far that was not really possible. What I would do would be, decide upfront on what file I would work, and run:

    fast-live-reload -o '*.adoc' -e 'asciidoctor mycurrentfile.adoc'

    "Superb", I know.

    Finally, since version 2.6.0, if in the executed command the variable $FILE is defined, the command will be executed for each changed file, and the FILE environment variable will be passed to the script. Thus the previous example would be:

    fast-live-reload -o '*.adoc' -e 'asciidoctor $FILE'

    Yay!

    If you want this tool, you need node and just:

    npm install -g fast-live-reload

     

  • TypeScript unit testing with Mocha

    I am writing some unit tests for my TypeScript collection classes (actually migrating some older tests), and I decided in going with Mocha.

    How easy it is? Well, as simple as 1, 2, 3... 4 :) :

    1. Install the typing files

    tsd install mocha
    tsd install node
    tsd install assert

    2. Write your test(s)

    For this example, I'm presenting you a super simple test, but obviously nothing stops you from adding new ones (check my github core-lang project for details):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /// <reference path="../../../typings/mocha/mocha.d.ts"/>
    /// <reference path="../../../typings/node/node.d.ts"/>
    /// <reference path="../../../typings/assert/assert.d.ts"/>
     
    import { list, XIterable, XIterator } from "../../main/core/Iterable";
    import assert = require("assert");
     
    describe('ArrayList', function() {
        it('should allow filtering', function() {
            var items : XIterable<number> = list([1, 2, 3, 4]),
                filteredItems: XIterable<number>,
                iterator : XIterator<number>;
     
            filteredItems = items.filter(it => it % 2 == 0);
            iterator = filteredItems.iterator();
            
            assert.equal(iterator.next(), 2);
            assert.equal(iterator.next(), 4);
            assert.notEqual(iterator.hasNext(), true);
        });
    });

    3. Build your test(s)

    I use Grunt, so I have (I deleted all the non test stuff), but is basically easy to see the target that is named "test" across all the plugins in the original full Grunt file:

Germanium

The one to rule them all. The browsers that is.

SharpKnight

SharpKnight is an Android chess game.

MagicGroup

MagicGroup is an eclipse plugin.