Hybris è ...

... un linguaggio di scripting open source orientato ad oggetti con tipizzazione dinamica, ovvero un linguaggio che non richiede la dichiarazione esplicita del tipo di una variabile ma capisce come trattare la variabile in questione in base al valore con il quale viene inizializzata e successivamente trattata, che viene in aiuto agli sviluppatori che vogliono automatizzare determinate procedure in modo semplice e veloce, mantenendo tuttavia una sintassi elegante e pulita, nonchè uno strumento potente.

Hybris è distribuito sotto licenza GPL 3, di conseguenza il suo utilizzo è libero così come il suo codice sorgente.
Consulta una descrizione più dettagliata oppure impara subito ad usarlo tramite gli esempi!

» La potenza del Dll loading in un linguaggio di scripting.

L'altro giorno, curiosando nel nopaste, mi sono imbattuto in uno script del buon white_sheep, nel quale provava tramite la classe std.Dll a caricare la libreria ncurses e creare del testo.

Una volta provato e visto che funzionava, mi son detto "beh, vediamo fino a che punto si può arrivare!" :)

Bene, ho preso il primo esempio di ncurses che mi ha restituito google e ho provato a convertirlo con questa tecnica, quindi senza implementare a mano un modulo di binding per la libreria ncurses per Hybris, bensì caricando direttamente il modulo nativo in C .

Il risultato ?

Esattamente come la sua controparte in C!!! :D

Conclusione, la tecnica del Dll loading si sta rivelando molto più potente e utile di quanto previsto! :P

Il codice Hybris lo trovate sul nopaste.

» Cambiato il sistema di compilazione di Hybris, da Rake a CMake.

Come alcuni di voi avranno letto da i miei messaggi su identi.ca e twitter, in questi ultimi due giorni ho lavorato per cambiare il sistema di compilazione di Hybris da Rake a CMake .

Ho preso questa decisione per diversi motivi, ne riporto solo alcuni :

  • Il sistema Rake non genera un Makefile, di conseguenza non offre piena compatibilità con i tool di pacchettizzazione (ad esempio checkinstall) .
  • Richiede l'installazione di Ruby e della versione dev di ruby per il supporto alle routine per il controllo delle dipendenze.
  • Essendo più giovane di CMake, alcune soluzioni mi sono sembrate, per quanto comode, un po "arrabbattate" e poco leggibili/mantenibili.
  • Esclude automaticamente tutti quei sistemi nei quali l'installazione di Ruby è difficoltosa.

Di conseguenza, la procedura (come da documentazione) ora è :

cmake .

make

sudo make install

» Pubblicati modulo e classe per le reti neurali a back propagation.

Ho appena eseguito il primo commit su questo repository di un modulo C++, e una classe in Hybris che lo wrappa, atti a creare, manipolare, gestire ed ovviamente utilizzare delle reti neurali a back propagation.

Ma cosa è una rete neurale ?

Wikipedia ci dice :

Tradizionalmente il termine rete neurale (o rete neuronale) viene utilizzato come riferimento ad una rete o ad un circuito di neuroni biologici, tuttavia ne è affermato l'uso anche in matematica applicata con riferimento alle reti neurali artificiali, modelli matematici composti di "neuroni" artificiali. L'espressione può acquisire pertanto due significati distinti:

   1. Le reti neurali biologiche: sono costituite dai neuroni biologici, cellule viventi tipiche degli animali connesse tra loro o connesse nel sistema nervoso periferico o nel sistema nervoso centrale. Nel campo delle neuroscienze, sono spesso identificati come gruppi di neuroni che svolgono una determinata funzione fisiologica nelle analisi di laboratorio.
   2. Le reti neurali artificiali: sono modelli matematici che rappresentano l'interconnessione tra elementi definiti neuroni artificiali, ossia costrutti matematici che in qualche misura imitano le proprietà dei neuroni viventi. Questi modelli matematici possono essere utilizzati sia per ottenere una comprensione delle reti neurali biologiche, ma ancor di più per risolvere problemi ingegneristici di intelligenza artificiale come quelli che si pongono in diversi ambiti tecnologici (in elettronica, informatica, simulazione, e altre discipline).

Ovviamente si parla del secondo caso .

Ci sono stati molti studi in proposito, molti passi avanti, ma l'algoritmo di back propagation è da sempre ritenuto il più adatto per iniziare questa branca dell'intelligenza artificiale, poichè, nonostante possa sembrare il contrario, è il più semplice ed intuitivo tra quelli esistenti.

Nel repository, è presente quindi un modulo C++ (nnet.cpp) che va compilato ed installato tramite il Makefile, una classe Hybris (nnetwork.hy) che verrà installata insieme al modulo nella directory di default delle librerie di Hybris ed un file di esempio che mostra quanto sia facile utilizzare il sistema.

Il tutto è documentato seguendo lo standard doxygen, nenchè non ho ancora implementato un filtro per generare documentazione html/rtf/pdf partendo da un sorgente Hybris, tuttavia risulta comunque uno standard chiaro per commentare il codice al fine di redistribuirlo ad altre persone.

Come sempre, per il download e l'installazione :

git clone git://github.com/evilsocket/hybris-nnet.git
cd hybris-nnet
make
sudo make install

» Implementati operatori aritmetici per i vettori.

In effetti non so perchè non li avevo implementati prima ... forse perchè l'engine, per come era strutturato prima, non l'avrebbe consentito e poi una volta ristrutturato mi sono scordato di farlo ... o semplicemente mi sono scordato a priori :)

In ogni caso, ho appena implementato (e ovviamente documentato) gli operatori aritmetici per i vettori, che consentono quindi di eseguire differenze o merge tra vettori e/o valori .

» Prima bozza della documentazione sullo sviluppo dei moduli

Come da titolo, è pronta una prima bozza della documentazione sullo sviluppo dei moduli.
Questa documentazione contiene le informazioni basilari necessarie per la creazione di un modulo dinamico di Hybris, la compilazione, l'installazione, rifermenti sulle API da usare, ecc ecc ecc .

Dico che è una bozza, poichè, mentre a me alcuni concetti potrebbero sembrare scontati e quindi non necessariamente da documentare, ad una persona che non ha partecipato allo sviluppo del core di Hybris magari (quasi sicuramente) non sembrano così scontati.
Quindi chiedo agli utenti volenterosi, di leggere la documentazione e, nel caso non capissero qualcosa o ritenessero che qualcosa manca proprio, di farmelo presente in questo thread, così da darmi un feedback sulla qualità della doc ed eventualmente su cosa migliorare.
Se poi proprio volete aiutarmi seriamente, potete sempre usufruire di tale documentazione per sviluppare dei moduli che, se conformi, andranno a far parte della libreria standard per il rilascio della 1.0 o, nel caso troppo specifici per far parte dello standard, comunque saranno distribuiti come moduli "ufficiali".

Grazie a tutti.

» Funzioni 'array' e 'map' ora deprecate.

Come mi prefiggevo di fare da quando è stata implementata la creazione inline di array e mappe tramite operatori [] e [:], modificando leggermente il parser ho eliminato del tutto la necessità dei moduli :

  • std.lang.array
  • std.lang.map

Rendendo così deprecate le funzioni array e map .

Come la documentazione, aggiornata di conseguenza, riporta, per inizializzare mappe e array vuoti, basta fare rispettivamente :

array = [];

o

mappa = [:];

» Nasce HyPaste, il nopaste gestito da Hybris.

Ho appena rilasciato e linkato nel sito HyPaste, un nopaste scritto in PHP ma gestito (in remoto) da script in Hybris .

Questo servizio nasce per due motivazioni, la prima è la necessità di un servizio unico da sfruttare per nopast-are script in Hybris con una corretta evidenziazione della sintassi, la seconda è creare un servizio di indicizzazione di codice il cui front-end è implementato in PHP mentre il back-end (la parte di gestione e di indicizzazione) in Hybris.

Il servizio è aperto a tutti e per qualsiasi tipologia di codice/testo, non solo per script in Hybris.

» Hybris v1.0 beta 3, tante le novità!

Ho appena eseguito l'ultimo commit della seconda beta e siamo entrati nella terza, le novità sono molte.

Innanzitutto, ho risolto un bug abbastanza grave (e difficile da inquadrare) nel garbage collector che causava in determinate circostanze la cancellazione di oggetti contenuti in altri oggetti (l'elemento di un vettore ad esempio), prima che venisse cancellato l'oggetto padre.

Come discusso questi giorni con alcuni utenti, sono cambiati un paio di operatori per favorire la leggibilità e l'eleganza della grammatica di Hybris.

L'operatore per concatenare dei valori ad una stringa non è più . (il punto) ma + che normalmente serve per l'addizione algebrica, ma se rileva che la parte sinistra o la parte destra di un espressione è una stringa, effettuera la concatenazione.

In questo modo, l'operatore . si è liberato, e viene ora usato per accedere ad attributi e metodi di classi e strutture.

Inoltre ho introdotto il concetto di metodi intrinsechi dei tipi, ovvero ora anche i tipi di base (stringa, array, ecc) sono oggetti e possiedono dei metodi "di default" per controllarne la grandezza ed eseguire operazioni di vario generi su di essi.

Per questo rimando alla documentazione che è stata aggiornata di conseguenza.

» Implementati attributi e metodi statici.

Per membro statico, dichiarato con la keyword static si intende un attributo o un metodo che esiste a prescindere dall'istanza della classe, poichè risiede direttamente nel prototipo della classe stessa.
Sono valori o metodi che in pratica possono essere utilizzati tramite il nome della classe e non necessariamente da un istanza di essa.

Per ulteriori informazioni consultare la documentazione .

Syndicate content

Launchpad logo