Convertire un SID in stringa con Java

Un security identifier (SID) è un identificativo univoco, comunemente utilizzato dai sistemi Microsoft. Viene ad esempio utilizzato per identificare univocamente degli utenti all’interno di Windows, o ancora più in generale anche di un sistema come Active Directory.

Il SID è un valore binario, di lunghezza arbitraria, e può anche essere rappresentato in una versione alfanumerica. Tale conversione risiede in una particolare funzione chiamata ConvertSidToStringSid, della libreria Advapi32.dll, disponibile solamente per Windows.

Per chi avesse bisogno di questo tipo di conversione può procedere in due modi:

  • Utilizzare Advapi32 (solo in ambiente Windows)
  • Riscrivere la conversione
Molto utile è quindi avere a disposizione tale funzione di conversione in un particolare linguaggio (nel nostro caso Java), in modo da essere utilizzata ovunque. Ho potuto notare che le implementazioni di questa funzione che si trovano in giro su Internet sono pochissime e commettono anche degli errori, nonostante che funzionino bene in generale. Vi presenterò pertanto una mia particolare implementazione testata in maniera approfondita.

Continua a leggere

Integrare PeerSim con Eclipse

PeerSim, per chi non lo conoscesse, è un noto simulatore per reti P2P, scritto in Java. Potete trovare qui la pagina ufficiale di tale progetto.

Soprattutto quando si parla di Java sappiamo che è molto comodo utilizzare Eclipse. In questo articolo parlerò infatti di come poter configurare quest’ultimo per poter lavorare con PeerSim. Ho deciso di scriverlo dopo aver letto uno dei pochi post che tratta dell’argomento, e che risolve la cosa in un modo alquanto bizzarro.

Continua a leggere

Algoritmo del Ruzzle Solver

Con il successo di Ruzzle Solver, molti utenti mi hanno più volte richiesto di pubblicarne il codice sorgente, o semplicemente delle informazioni su come se ne potesse fare uno simile. Altri invece erano particolarmente interessati, visto che avrebbero dovuto fare un progetto simile per un esame universitario.

In questo post cercherò solamente di valutare brevemente alcuni metodi per poter realizzare un algoritmo di questo tipo. Sicuramente scriverò altri articoli che tratteranno di temi più specifici in futuro.

I test che vedrete in seguito sono stati eseguiti con algoritmi scritti in C, ed su un MacBook Pro con processore Intel Core i5 da 2.3 Ghz; altre implementazioni potranno quindi riportare risultati differenti, anche se mi aspetto che il rapporto tra di esse sia identico.

Continua a leggere

Intelligenza Artificiale: Markov Decision Process

In Intelligenza artificiale, in alcune situazioni, hai bisogno di una semplice sequenza di azioni per raggiungere in determinato obiettivo, partendo da uno stato noto; in tutti quegli ambienti dove invece le azioni non sono deterministiche (non deterministiche o stocastiche), questo non è più sufficiente: c’è bisogno di una policy, ovvero di una politica che ci dice qual’è l’azione giusta da fare in ogni stato.

Le Markov Decision Process sono una struttura matematica che ci aiuta a costruire queste policy in ambienti stocastici dove si conoscono le probabilità che si verifichino determinati risultati.

In questo post, io vi darò una brevissima introduzione e poi vi mostrerò le parti essenziali della mia implementazione, in python, dei più importanti algoritmi che vi possono aiutare per trovare le policy in ambienti stocastici. Potete trovare una più dettagliata descrizione delle Markov Decision Process nelle mie slide che ho preparato per un seminario nella mia università.

Continua a leggere

Richiesta Network Time Protocol in C#

Di recente, ho scritto un’applicazione in C# che ha bisogno di conoscere se il sistema ha il tempo corretto. Ho perciò fatto una classe che recupera il tempo utilizzando i server NTP. La classe è scritta per fare in modo che non vengano richiamati sempre gli stessi server, utilizzando un semplice vettore circolare. Per i dati che vengono ritornati dal server, vi invito a leggere RFC-2030.

Continua a leggere