Grunt : the Javascript Task Runner – seconda parte

Analizziamo il codice del file di esempio:

Questa è la wrapper function che racchiude tutto il codice di definizione dei tasks:

module.exports = function(grunt) {
    ......
};

all’interno della wrapper function abbiamo tre sezioni: la sezione di configurazione dei task, i comandi di caricamento dei plugin e il comando di definizione del task di default, cioè quello che viene eseguito quando grunt è lanciato senza specificare opzioni.

Nella sezione di configurazione del progetto di questo esempio, che viene dichiarata passando un oggetto alla funzione grunt.initConfig(), abbiamo quattro distinti comandi:

//  Project configuration.
    grunt.initConfig(
      {

        pkg: grunt.file.readJSON('package.json'),
        concat: {
          options: {
            separator: ';'
          },
          dist: {
            src: ['src/app.js', 'src/app1.js'],
            dest: 'build/output.js'
          }
        },
        uglify: {
            build: {
                  src: 'build/output.js',
                  dest: 'build/<%= pkg.name %>.min.js'
            }
        },
        jshint: {
            all: ['Gruntfile.js', 'src/*.js']
        }
    });

il primo comando pkg: grunt.file.readJSON(‘package.json’) carica nella variabile pkg il contenuto del file di configurazione package.json. In questo file, che deve esistere nella directory del progetto, sono definiti svariati parametri, in questo caso il parametro di interesse è il nome dell’applicazione che verrà utilizzato di seguito.

Seguono altri tre comandi che definiscono i rispettivi task che formano questo gruntfile: in questo esempio definiamo il task concat, che serve appunto a concatenare i vari files javascript che compongono l’applicazione, poi c’è il task uglify, che rimuove commenti e spazi dal codice per produrne una versione compatta, infine il task jshint che effettua la validazione del codice javascript.

La dichiarazione di questi tre task avviene con tre coppie chiave valore, in cui la chiave è il nome assegnato al task e il valore sono i parametri che lo specificano. In questo esempio utilizziamo dei task che vengono specificati nei plugin grunt-contrib-uglify, grunt-contrib-concat, grunt-contrib-jshint, da cui i nomi utilizzati.

Il task concat viene dichiarato con due parametri: options e dist.

Con il parametro options in questo esempio si specifica il separatore utilizzato durante il processo di concatenazione dei files

options: { separator: ';' }

Con il parametro dist vengono specificati i files da concatenare e il file da produrre

dist: {   src: ['src/app.js', 'src/app1.js'],
          dest: 'build/output.js'
      }

Il task uglify viene dichiarato con un unico parametro: build
In questo parametro viene specificato il file da comprimere e il file compresso

uglify: {
            build: {
                  src: 'build/output.js',
                  dest: 'build/<%= pkg.name %>.min.js'
            }
        }

Infine per il task jshint con l’unico parametro all viene dichiarato l’elenco dei files
da verificare

jshint: {
            all: ['Gruntfile.js', 'src/*.js']
        }

La sezione con i comandi di caricamento dei plugin specifica l’elenco di quelli utilizzati in questo Gruntfile:

  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-contrib-concat');

Infine nell’ultima sezione dichiariamo i task da eseguire quando grun viene lanciato senza parametri:

 
grunt.registerTask('default', ['jshint', 'concat', 'uglify']);

Per provare questo esempio dobbiamo ovviamente avere installato grunt.

Il prerequisito è che Node.js ( versione 0.8.0 o successive ) sia installato sulla vostra macchina.

Poi con questo comando installiamo la grunt command line:

npm install -g grunt-cli

Il comando deve essere eseguito con i permessi di amministratore sotto Windows oppure attraverso sudo sotto Linux o OS X.

Installare la command line di grunt non significa avere installato il task runner, questo viene installato localmente (nella directory del vostro progetto) con il comando npm install dopo avere creato i files package.json (nel quale vengono dichiarate le dipendenze, cioè cosa verrà installato da npm install) e ovviamente il file Gruntfile.js, di cui abbiamo visto un esempio.

Come si crea il file package.json? si può utilizzare il comando npm init oppure può essere scritto direttamente.  Questo è il file package.json utilizzato per il nostro esempio.

{
  "name": "my-project-name",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "~0.4.2",
    "grunt-contrib-jshint": "~0.6.3",
    "grunt-contrib-nodeunit": "~0.2.0",
    "grunt-contrib-uglify": "~0.2.2"
  }
}

… segue nella prossima puntata …..

Pagliai Fotovoltaici

pagliaio

Questo weekend camminando in montagna vicino a Feltre ho notato delle strane costruzioni: sono dei semplicissimi pagliai realizzati con due pali su cui può scorrere una tettoia che protegge il fieno dalle intemperie.

Osservando questi pagliai ho pensato che sarebbe molto semplice trasformarli in piccoli impianti fotovoltaici: la tettoia potrebbe essere realizzata con 27 moduli da 240 Wp che, secondo i calcoli realizzati con il PVGIS, se inclinati a 40 gradi potrebbero produrre 8140 kWh.

Cosa si può fare con 8140 kWh?  Questa energia è il consumo medio di una villetta bifamiliare, per un costo annuo di circa 1400 Euro (+ le tasse).  Se risparmiamo questa cifra in 5 anni recuperiamo il costo dei pannelli e dell’inverter, e questo impianto può produrre energia per circa 20/25 anni.

 

 

 

IoT : 4 RaspberryPI + 1 ArduinoDue = UDOO

UDOO ecco un’altra board che integra un completo sistema Unix/Android e un microcontrollore Arduino Compatible

d

 

Caratteristiche tecniche:

  • CPU Freescale i.MX 6 Quad + Atmel SAM3X8E
  • GPU Vivante GC 2000 + Vivante GC 355 + Vivante GC 320
  • GPIO 62 digitali + 14 digitali/analogiche
  • Interfaccie WiFi + Ethernet 1G + SATA
  • RAM 1G DDR3
  • 4 Porte USB
  • HDMI + LVDS
  • Audio analog
  • CSI camera
  • Micro SD card connector
  • Arduino R3 compatible connector

 

Grunt : the Javascript Task Runner

Cos’è Grunt? il personaggio di un videogame?

grunt

No, Grunt è per javascript ciò che Makefile è per il CAnt per java, Rake per ruby

Qualcuno si sta già chiedendo a cosa serve un’altro task manager e in effetti me lo sono chiesto anch’io. La cosa innovativa di Grunt sono i plugin (oltre 2200) sviluppati dalla community che forniscono una soluzione alla maggior parte delle esigenze di chi sviluppa applicazioni in javascritp. Potete ammirarne l’elenco su questa pagina.

Quello che segue è un esempio di un semplicissimo Gruntfile che assolve a 3 compiti che chiunque sviluppa in javascript deve svolgere: verificare la correttezza del codice, concatenare i files javascript in un unico file, e infine comprimerlo:

module.exports = function(grunt) {

  //  Project configuration.
    grunt.initConfig({
      pkg: grunt.file.readJSON('package.json'),
        concat: {
          options: {
            separator: ';'
          },
          dist: {
            src: ['src/app.js', 'src/app1.js'],
            dest: 'build/output.js'
          }
        },
        uglify: {
            build: {
                  src: 'build/output.js',
                  dest: 'build/<%= pkg.name %>.min.js'
            }
        },
        jshint: {
            all: ['Gruntfile.js', 'src/*.js']
        }
    });

  // Load the plugin 
  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-contrib-concat');

  // default task
 grunt.registerTask('default', ['jshint', 'concat', 'uglify']);
};

… segue nella prossima puntata ….

Arietta G25 : è iniziata la prevendita

E’ possibile acquistare sul sito di ACMESYSTEMS la nuova board Arietta G25, un completo sistema linux in soli 12,5 cmq (25×50 mm) al prezzo speciale di lancio di Euro 9.99 (attenzione, questo prezzo aumenterà ogni settimana fino a stabilizzarsi al prezzo finale di Euro 19.99

l

Questa scheda è dotata di 2 porte USB, può montare un SDCARD (fino a 32G), non dispone di uscita video nè di interfaccia ethernet ma è previsto un modulo opzionale WiFi basato sul chip RaLink RT5370N IEEE 802.11 b/g/n che costa solo 7 Euri.

l