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

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

ExitWindowsEx in C#

Vi posto una semplice classe per spegnere, riavviare e fare logoff in Windows utilizzando il famoso ExitWindowsEx. Per ogni metodo viene fatto overloading con un altro che può forzare l’azione. In altre parole, l’azione viene eseguita proibendo a Windows di mandare il messaggio WM_QUERYENDSESSION. In questo modo l’utente non potrà mai annullare l’azione.

Continua a leggere

Nascondere la finestra della Console in C#

Di recente ho realizzato un’applicazione per controllare (e limitare) il tempo che mio fratello impiega giornalmente al computer (cattivo!). Avendo la necessità di nascondere qualunque finestra mi sono ingegnato nel trovare una soluzione. Vi mostrerò pertanto la mia personale soluzione per farlo considerando sia un progetto di tipo Console Application che uno di tipo Windows Form Application.

Continua a leggere