Ci sono diverse nuove funzionalità in JMP 14, molte delle quali ampliano o migliorano le capacità di JSL. In questo blog tratterò solo alcune delle nuove funzionalità di JSL e dello Scripting Index.
Richiesta HTTP
Disponi di un'origine dati che supporti un'API REST per accedere ai dati? Vorresti interagire con i servizi pubblici di API REST, come le API di Twitter o Google? Ora in JMP 14, è possibile accedere a tali API in modo nativo, utilizzando la funzione New HTTP Request ().
Ecco un piccolo esempio tratto dallo Scripting Index che utilizza un servizio pubblico API per testare una richiesta POST.
Names Default To Here( 1 );
request = New HTTP Request(
url( "http://httpbin.org/post" ),
Method( "POST" ),
JSON( "\[{"username":"bob","address":"12345"}]\" )
);
data = request << Send();
Dopo aver salvato il risultato della stringa nella variabile data in un file JSON, è possibile visualizzare i risultati nella nuova editor Script evidenziato dalla sintassi JSON. Dopo aver deciso come gestire questa risposta JSON, è possibile utilizzare anche un numero qualsiasi delle funzioni di gestione JSON, come Parse JSON, JSON to List o JSON alla tabella dati.
Integrazione con Python
Hai mai desiderato sfruttare la potenza di Python da una delle tue applicazioni JMP? Con l'integrazione di Python di JMP 14, ora è più facile che mai.
Di seguito è riportato un esempio che crea uno scatterplot di peso vs altezza, colorato in base all'età, utilizzando un pacchetto Python matplotlib.
NamesDefaultToHere( 1 );
// Establish connection to Python
PythonConnection = PythonConnect();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// Send the data table to Python as a dataframe
PythonConnection << Send( dt );
Close( dt, NoSave ); // close the JMP data table
// Submit python program that uses our data table (dataframe in python)
ml = PythonConnection << Submit(
"\[
import matplotlib.pyplot as plt
plt.scatter(dt.weight, dt.height, c=dt.age)
plt.ylabel('Height')
plt.xlabel('Weight')
plt.title('Weight vs. Height for Big Class')
plt.show(block=False)
]\"
);
// Get the graphics added by 'plt.show(...)'
plot = PythonConnection << Get Graphics( png );
// Show the graphic in a new window
pngJMP = NewWindow( "Plot", PictureBox( plot ) );
// close the plot
PythonConnection << Submit( "plt.close()" );
// disconnect from python
PythonConnection << Disconnect;

Classi
Se sei un programmatore JSL con uno sfondo orientato agli oggetti, o se vuoi provare nuove cose nella tua applicazione avanzata, potresti essere interessato alla nuova funzionalità per la definizione delle classi. Le classi sono come spazi dei nomi, ma puoi avere più istanze di esse, note come oggetti. Ciò consente di creare istanze multiple di qualcosa come un gruppo di finestre di visualizzazione, ciascuna delle quali ha i propri comportamenti.
Questi comportamenti in una classe sono fatti usando quello che viene chiamato un metodo. Un metodo è molto simile a ciò che è attualmente noto come funzione, tranne che i metodi possono esistere solo all'interno di una classe.
Ecco un esempio di un semplice calcolatore che può essere aggiunto a una finestra più volte, senza pestarsi l'un l'altro.
// Define the class so we can create instances of it later
Define Class(
"Calculator",
// Define member variables
content = Empty();
num1_neb = Empty();
num2_neb = Empty();
operand_cmb = Empty();
calc_btn = Empty();
result_neb = Empty();
// _init_ is special method called when a new object is created
_init_ = Method( {},
content = H List Box(
num1_neb = Number Edit Box( 0 ),
operand_cmb = Combo Box( {"+", "- "} ),
num2_neb = Number Edit Box( 0 ),
calc_btn = Button Box( "=",
calc( operand_cmb << Get Selected(), num1_neb << Get(), num2_neb << Get() );
),
result_neb = Number Edit Box()
);
initializeValues();
);
// called from the _init_ method
initializeValues = Method( {},
num1_neb << Set( Random Integer( 10 ) );
num2_neb << Set( Random Integer( 10 ) );
);
// called when '=' button is clicked
calc = Method( {operand, n1, n2},
result = If( operand == "+",
addition( n1, n2 ),
subtraction( n1, n2 )
);
result_neb << set( result );
);
// methods called by calc
addition = Method( {n1, n2},
Return( n1 + n2 )
);
subtraction = Method( {n1, n2},
Return( n1 - n2 )
);
);
// Create multiple instances of the Calculator class
c1 = New Object( Calculator );
c2 = New Object( Calculator );
c3 = New Object( Calculator );
// Create a new window with the content of the three instances of Calculator
New Window( "Example", c1:content, c2:content, c3:content );

Utilizzo di un progetto JMP come IDE
Con i progetti JMP 14, puoi facilmente creare una visualizzazione a schede degli script, con un registro e segnalibri integrati. Ciò può consentire un'ottima gestione del flusso di lavoro con tutti gli script per un componente aggiuntivo o un progetto in un'unica posizione. Per ulteriori esempi di utilizzo delle nuove funzionalità dei progetti JMP, consulta il blog Resta organizzato con JMP 14 .

Spero che ti piacciano tutte queste nuove funzionalità in JSL per JMP 14. Per ulteriori miglioramenti in JSL, consulta la sezione Scripting del documento Nuove funzionalità, disponibile tramite Guida> Nuove funzionalità.