Ci sono vari servizi che mettono a disposizione API per le previsioni meteo, e tra le varie a me piace molto OpenWeatherMap!

Con un account gratuito è possibile usare le API REST, con alcune limitazioni (poche in verità).

Quindi, prima di tutto iscrivetevi e copiatevi la vostra API KEY.

Dopo di che andate a visualizzare le varie possibilità a disposizione (sempre a questo link).

Da un pò di tempo sto usando con soddisfazione Framework7 al posto di jQuery Mobile (che è da un bel pò che non è più aggiornato).

Avevo la necessità di creare dei grafici all'interno di una pagina, prendendo i dati da un database remoto.

Mi hanno consigliato Google Charts (già usato in precedenza, ma non su un sito mobile) e devo dire che sta venendo abbastanza bene.

Quindi vediamo come integrare i due.

Su praticamente qualsiasi linguaggio, siamo abituati ad includere moduli / librerie con istruzioni come include, import, require, ecc.

Su Javascript è possibile ottenere lo stesso risultato, ma in maniera un pò differente.

Prima di usare require, dobbiamo usare exports sul modulo da importare.

Oggi vediamo come connettere Node.js a MongoDB.

Useremo anche Express; ormai è diventato praticamente un modulo standard.

Partiamo dal classico package.json:

{
    "name": "NodeB2B",
    "version": "1.0.0",
    "keywords": ["util", "functional", "server", "client", "browser"],
    "author": "Matteopuffo",
    "contributors": [],
    "dependencies": {
        "express": "*",
        "mongodb": "*"
    }
}

Come dipendenze indichiamo di prendere le ultime versioni di entrambi i moduli.

L'altra settimana stavo combattendo con Node.js ed NPM.

In pratica ottenevo sempre questo errore:

$ npm search mongo npm WARN Building the local index for the first time, please be patient [..................] | : WARN Building the local index for the first time, please be patient
     
    [12455:0x23175c0]    73384 ms: Mark-sweep 1038.6 (1354.9) -> 1032.1 (1351.0) MB, 808.4 / 0.0 ms  allocation failure GC in old space requested [12455:0x23175c0]    74196 ms: Mark-sweep 1032.1 (1351.0) ->
    1031.9 (1314.0) MB, 811.6 / 0.0 ms  last resort gc  [12455:0x23175c0]    75024 ms: Mark-sweep 1031.9 (1314.0) -> 1031.9 (1307.0) MB, 828.2 /
    0.0 ms  last resort gc 
     
    ==== JS stack trace =========================================
     
    Security context: 0x1301816c0d11
        1: fromString(aka fromString) [buffer.js:217] [pc=0xd2afa68dcae](this=0x130181604311 ,string=0x2c89d250c589 ,encoding=0x1301816c9921 <String[4]: utf8>)
        2: from [buffer.js:114] [pc=0xd2afa691090](this=0x12c0d1a860b1 ,value=0x2c89d250c589 ,encodingOrOffset=0x1301816...
     
    FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory  1: node::Abort() [npm]  2: 0xf4e4cc [npm]  3: v8::Utils::ReportOOMFailure(char const*, bool) [npm]  4: v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [npm]  5: v8::internal::Factory::NewRawTwoByteString(int, v8::internal::PretenureFlag) [npm]  6: v8::internal::String::SlowFlatten(v8::internal::Handle, v8::internal::PretenureFlag) [npm]  7: v8::internal::String::Flatten(v8::internal::Handle, v8::internal::PretenureFlag) [npm]  8: v8::String::WriteUtf8(char*, int, int*, int) const [npm]  9: node::StringBytes::Write(v8::Isolate*, char*, unsigned long, v8::Local, node::encoding, int*) [npm] 10: node::Buffer::New(v8::Isolate*, v8::Local, node::encoding) [npm] 11: node::Buffer::CreateFromString(v8::FunctionCallbackInfo const&) [npm] 12: v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo const&)) [npm] 13: 0x7f1698 [npm] 14: 0x7f1a30 [npm] 15: v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*) [npm] 16: 0xd2afa1063a7 Annullato (core dump creato)

L'altro giorno stavo combattendo con una funzione in Javascript di quelle che non voleva proprio funzionare.

Alla fine avevo capito che il problema era nei parametri passati alla funzione, ma non mi andava di controllarli uno per uno.

Cercavo un modo per fare un debug diretto di tutti i parametri (un pò tipo la func_get_args di PHP).

Alla fine ci sono riuscito usando la propretà Array.prototype.

Se usate jQuery DataTable o simili, probabilmente avete già una funzione di esportazione della tabella in Excel.

Ma se avete una semplice tabella da esportare al volo, potete usare un semplice plugin per jQuery che si occupa di fare solo quello: jQuery table2excel!

Il suo utilizzo è molto semplice:

  • includete jQuery
  • includete la libreria
  • impostate un id su un bottone
  • impostate un id sulla tabella
  • impostate qualche riga di codice per attivare il tutto

Alcuni lo considerano cattiva programmazione, altri no, altri sono più moderati.

Ma come la metti la metti il pattern Singleton continua ad essere molto utilizzato in tutti i linguaggi.

Abbiamo già visto qualche implementazione, ed oggi aggiungiamo un esempio in Javascript.

Per chi non sa ancora cosa sia Singleton, vi riporto la definizione di Wikipedia:

Il singleton è un design pattern creazionale che ha lo scopo di garantire che di una determinata classe venga creata una e una sola istanza, e di fornire un punto di accesso globale a tale istanza.

Ho trovato un semplice syntax highlighter da usare all'interno di qualsiasi blog e CMS: Prism!

E' scritto in Javascript, e non ha dipendenze esterne.

E' composto di due file:

  • un CSS per lo stile
  • un Javascript che si occupa del resto

Li dovete scaricare da qua; come vedete nella pagina dovete decidere quali linguaggi volete.

Node.js porta con se parecchi moduli già integrati per tutte le operazioni "base".

Attaverso il modulo fs possiamo interagire con il filesystem!

Oggi andiamo a vedere un piccolo snippet di codice per leggere un semplice file TXT.

Useremo anche Express per recuperare i dati da browser; su come procedere all'installazione di Express potete vedere qui o qui.