All posts by Paul

La scrivania del futuro: una superficie multi-touch in verticale e in orizzontale, ed esiste già.

La notizia non ha avuto molto risalto (risale più o meno al 2010), ma alla RWTH Aachen University hanno creato BendDesk, la scrivania del futuro. Si tratta “della nostra visione di area di lavoro del futuro, capace di consentire un’interazione continua tra le differenti aree”, è stato scritto sul sito del progetto, e anche se la notizia risulta vecchiotta, il progetto sta andando avanti.

Credo che potrebbe essere una delle soluzioni per passare al “next step” dei computer desktop. Che ne pensate? Il sito del progetto è questo: http://d.pr/ijeg mentre qui trovate un video: http://d.pr/hAov

Per la maggior parte delle persone provenienti da discipline diverse la scrivania è un banco di lavoro. Una scrivania tipica è composta da almeno uno o più schermi verticali che mostrano contenuti digitali, dopodiché vi è una superficie orizzontale, contenente i dispositivi di input, come mouse e tastiera, documenti cartacei, e oggetti di uso quotidiano. Queste due zone sono chiaramente separate e rende difficile spostare documenti da una superficie all’altra. Inoltre, ogni area impiega una tecnica diversa di interazione. Per esempio, si usa il mouse per disegnare su schermi verticali, ma penne fisiche per annotare documenti cartacei. BendDesk è la visione di un futuro che permette l’interazione continua tra le due zone.

BendDesk è un ambiente multi-touch nonché una scrivania che unisce senza soluzione di continuità una superficie verticale ad una orizzontale con una curva, in un unico grande spazio di lavoro interattivo. Questo “desktop” innovativo può essere utilizzato per visualizzare qualsiasi contenuto digitale, come documenti, foto, o video. La tecnologia multi-touch consente all’utente di interagire con tutta la superficie. Gli utenti possono comodamente sedersi alla scrivania e posizionare oggetti di uso quotidiano su di esso. Date un’occhiata al video e al sito che ho inserito sopra! Che ne pensate?

HTML5 App Challenge: il primo concorso che disegna il futuro delle web apps

AppCircus e AppsFuel annunciano il lancio del primo HTML5 App Challenge, un concorso online pensato per far emergere le applicazioni HTML5 che popoleranno il mobile web di domani.

La rivoluzione dell’HTML5 è in atto ora: la migrazione verso il nuovo linguaggio HTML sta cambiando il modo in cui interagiamo con i nostri dispositivi mobili, e offre agli sviluppatori la possibilità di integrare al meglio i contenuti multimediali e grafici nelle loro applicazioni. L’HTML5 è un linguaggio cross-platform, compatibile con tutti i device e i sistemi operativi, che offre agli utenti la massima flessibilità di fruizione delle informazioni, di divertimento e di comunicazione, e agli sviluppatori l’opportunità di creare applicazioni profittevoli e facili da usare.

“AppsFuel nasce su una convinzione: crediamo che le tecnologie web siano il futuro nel mondo delle applicazioni mobili. Il nostro intento è dimostrare agli sviluppatori e agli utilizzatori che app innovative e un efficace ecosistema possono essere creati con successo, senza ricorrere alle tecnologie native. Stiamo per rilasciare le nostre API di billing: AppsFuel sarà il primo ‘web app store’ dove gli sviluppatori guadagnano grazie al pagamento via credito telefonico, il metodo più semplice da utilizzare sulle piattaforme mobili.” commenta Emanuele Bolognesi, Head di AppsFuel.

L’HTML5 App Challenge è un concorso online della durata di tre mesi (si concluderà il 20 dicembre) e la deadline per l’iscrizione delle prime app è fissata per il 26 ottobre. Ogni mese le applicazioni saranno votate online e i vincitori potranno godere di hosting gratuito per le loro creazioni e di una visibilità globale. L’applicazione che risulterà vincente su tutte le altre parteciperà al prestigioso Mobile Premier Awards, che si terrà a Barcellona nel 2013.

Carles Fereiro, CEO di AppCircus sottolinea: “L’HTML5 offre agli sviluppatori la straordinaria opportunità di far entrare le app nella vita di tutti i giorni. Speriamo che questa competizione incoraggi gli sviluppatori a scoprire le possibilità offerte da questo nuovo linguaggio.”

Per partecipare al concorso e iscrivere le app o avere maggiori informazioni : http://appcircus.com/competition/AppsFuel-HTML5-App-Challenge

No more country for old men: l’Italia del futuro.

L’Italia è vecchia. L’Italia è per vecchi. “A country for old men”. Non è questo che sentiamo dire sul nostro paese ultimamente? Ma perchè? Siamo forse diventati un paese con un alto tasso di anzianità demografica? Cosa ci rende così vecchi? Dell’aspetto sociale, quello che più ci ha resi “vecchiardi” agli occhi del mondo, è stata l’economia. Una economia che non è mai riuscita ad aggiornarsi, a migliorare, a rendere il nostro come un paese dove la disoccupazione non padroneggi le cronache quitidiane dei giornali, dove la parola “crisi” entri a fare parte delle conversazioni della gente.

Continue reading No more country for old men: l’Italia del futuro.

Rise of Coding: Why We Should All Learn a Little Code

Enthusiasm for learning programming languages is on the rise. And coding is no longer the domain of self-taught savants or formal C.S. students. Students of all ages and disciplines are recognizing the benefits of being more code fluent. Plenty of free, in-browser online tutorials have risen to meet this need. One site, Codecademy, had over 1 million users pledge 2012 as their “code year” and sign up for their free tutorials on Java, HTML and CSS for beginners.

This is a great sign for the future of work in the U.S. Coding familiarity is becoming more of an asset across all industries. You don’t need to know how to reprogram your computer to operate it, but understanding how it works will help you imagine how programs can change to better serve your industry. So, if you’re among those of us who’ve always thought programming was impossibly hard or reserved for the tech-minded, consider learning a little code. There’s never been a better (or more supportive) time to get ahead of the curve. [SOURCE: OnlineCollege]

An implementation of the algorithm “DES” written in Java.

The algorithms described in this standard specifies both enciphering and deciphering operations which are based on a binary number called a key.

A DES key consists of 64 binary digits (“0″s or “1”s) of which 56 bits are randomly generated and used directly by the algorithm. The other 8 bits, which are not used by the algorithm, may be used for error detection. The 8 error detecting bits are set to make the parity of each 8-bit byte of the key odd, i.e., there is an odd number of “1”s in each 8-bit byte1. A TDEA key consists of three DES keys, which is also referred to as a key bundle. Authorized users of encrypted computer data must have the key that was used to encipher the data in order to decrypt it. The encryption algorithms specified in this standard are commonly known among those using the standard. The cryptographic security of the data depends on the security provided for the key used to encipher and decipher the data.

Data can be recovered from cipher only by using exactly the same key used to encipher it. Unauthorized recipients of the cipher who know the algorithm but do not have the correct key cannot derive the original data algorithmically. However, it may be feasible to determine the key by a brute force “exhaustion attack.” Also, anyone who does have the key and the algorithm can easily decipher the cipher and obtain the original data. A standard algorithm based on a secure key thus provides a basis for exchanging encrypted computer data by issuing the key used to encipher it to those authorized to have the data.

For more details, see this document.

This is the main written in java:
</pre>
import java.io.UTFDataFormatException;
import java.nio.charset.Charset;
/**
 *
 * @author Paolo Musolino
 */
public class EsameCrittografia {

&nbsp;

private static final Charset UTF8_CHARSET = Charset.forName("UTF-8");
 /**
 * @param args
 */
 public static void main(String[] args) {


 try{


 String testoInChiaro = "questo è l'algoritmo des";

 //DES
 String k = "5qw8sd4h";

 System.out.println("Testo in chiaro: "+testoInChiaro);

 byte[] enc = DES.encrypt(testoInChiaro.getBytes(), k.getBytes());
 System.out.println("Testo criptato con DES: "+new String(enc));

byte[] dec = DES.decrypt(enc, k.getBytes());
 System.out.println("Testo decriptato con DES: "+new String(dec));
 System.out.println("------------------");



}catch(Exception e){
 e.printStackTrace();
 }
 }

}
<pre>

This is the Java class that contains the operation of the des (comments are written in Italian):

</pre>
/**
 *
 * @author pmusolino
 */
public class DES {
 // tabella di permutazione iniziale
 private static int[] IP = { 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36,
 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32,
 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19,
 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7 };
 // tabella di permutazione finale
 private static int[] invIP = { 40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47,
 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13,
 53, 21, 61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51,
 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17,
 57, 25 };
 // Permutazione P (nel metodo f(Feistel))
 private static int[] P = { 16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5,
 18, 31, 10, 2, 8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4,
 25

};
 // chiave di permutazione iniziale 64 bit => 56 bit
 private static int[] PC1 = { 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34,
 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63,
 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53,
 45, 37, 29, 21, 13, 5, 28, 20, 12, 4 };
 // chiave di permutazione al round i 56 => 48
 private static int[] PC2 = { 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10,
 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55,
 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29,
 32 };
 // shift della chiave per ogni round
 private static int[] keyShift = { 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2,
 2, 1 };
 // tabella di permutazione per l'espansione nella funzione di feistel
 private static int[] expandTbl = { 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8,
 9, 10, 11, 12, 13, 12, 13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21,
 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32,
 1 };

 // scatola di sostituzione s-box
 private static int[][][] sboxes = {
 { { 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 },
 { 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8 },
 { 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0 },
 { 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 }
 },
 { { 15, 1, 8, 14, 6, 11, 3, 2, 9, 7, 2, 13, 12, 0, 5, 10 },
 { 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5 },
 { 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15 },
 { 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 }
 },
 { { 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8 },
 { 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1 },
 { 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7 },
 { 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 }
 },
 { { 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15 },
 { 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9 },
 { 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4 },
 { 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 }
 },
 { { 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9 },
 { 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6 },
 { 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14 },
 { 11, 8, 12, 7, 1, 14, 2, 12, 6, 15, 0, 9, 10, 4, 5, 3 }
 },
 { { 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11 },
 { 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8 },
 { 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6 },
 { 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 }

},
 { { 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 },
 { 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6 },
 { 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2 },
 { 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 }

},
 { { 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7 },
 { 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2 },
 { 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8 },
 { 2, 1, 14, 7, 4, 10, 18, 13, 15, 12, 9, 0, 3, 5, 6, 11 }

} };

// contiene le subkeys
 private static byte[][] K;

&nbsp;

//setta i bit all'interno dell'array di byte che gli passiamo con val nella posizione prestabilita
 private static void setBit(byte[] data, int pos, int val) {
 int posByte = pos / 8;
 int posBit = pos % 8;
 byte tmpB = data[posByte];
 tmpB = (byte) (((0xFF7F >> posBit) & tmpB) & 0x00FF);
 byte newByte = (byte) ((val << (8 - (posBit + 1))) | tmpB);
 data[posByte] = newByte;
 }

//funzione che estrae un bit (singolo) da un array di byte.
 private static int extractBit(byte[] data, int pos) {
 int posByte = pos / 8;
 int posBit = pos % 8;
 byte tmpB = data[posByte];
 int bit = tmpB >> (8 - (posBit + 1)) & 0x0001;
 return bit;
 }

//rotazione verso sinistra, di uno o due bit.
 //Questa funzione viene richiamata nella generazione delle chiavi.
 //entrambe le metà vengono fatte slittare verso sinistra di 1 o 2 bit
 // (per i round 1, 2, 9, 16 lo shift, cioè lo slittamento, è di 1 bit, per gli altri è di 2)
 private static byte[] rotLeft(byte[] input, int len, int pas) {
 int nrBytes = (len - 1) / 8 + 1;
 byte[] out = new byte[nrBytes];
 for (int i = 0; i < len; i++) {
 int val = extractBit(input, (i + pas) % len);
 setBit(out, i, val);
 }
 return out;
 }

//questo metodo estrae i bit dividendo il testo in chiaro da 64 bit in due metà, richiamata in encrypt64Bloc
 private static byte[] extractBits(byte[] input, int pos, int n) {
 int numOfBytes = (n - 1) / 8 + 1;
 byte[] out = new byte[numOfBytes];
 for (int i = 0; i < n; i++) {
 int val = extractBit(input, pos + i);
 setBit(out, i, val);
 }
 return out;

}


 //permuta i byte in input con quelli presente su una delle tavole (esempio: IP, inv IP)
 private static byte[] permutFunc(byte[] input, int[] table) {
 int nrBytes = (table.length - 1) / 8 + 1;
 byte[] out = new byte[nrBytes];
 for (int i = 0; i < table.length; i++) {
 int val = extractBit(input, table[i] - 1);
 setBit(out, i, val);
 }
 return out;

}

 //funzione che permette lo xor dei bit, ed è utilizzato per esempio nel terzo passaggio del DES
 //poiché ai 48 bit dell'espansione viene applicato un or esclusivo con la chiave
 //di ciclo a 48 bit.
 private static byte[] xor_func(byte[] a, byte[] b) {
 byte[] out = new byte[a.length];
 for (int i = 0; i < a.length; i++) {
 out[i] = (byte) (a[i] ^ b[i]);
 }
 return out;

}

 /*
 * E' la funzione che cripta realmente, quella che elabora blocchi da 64 bit,
 * che divide il blocco in due parti uguali da 32 bit, e che esegue tutte le operazioni (richiamando
 * le altre funzioni).
 * Il risultato viene poi utilizzato in "encrypt" che compatta tutto il testo in chiaro in blocchi
 * maggiori di 64 bit (se più lungo ovviamente).
 */
 private static byte[] encrypt64Bloc(byte[] bloc,byte[][] subkeys, boolean isDecrypt) {
 byte[] tmp = new byte[bloc.length];
 byte[] R = new byte[bloc.length / 2];
 byte[] L = new byte[bloc.length / 2];

tmp = permutFunc(bloc, IP);

L = extractBits(tmp, 0, IP.length/2);
 R = extractBits(tmp, IP.length/2, IP.length/2);

for (int i = 0; i < 16; i++) {
 byte[] tmpR = R;
 if(isDecrypt)
 R = f_func(R, subkeys[15-i]);
 else
 R = f_func(R,subkeys[i]);
 R = xor_func(L, R);
 L = tmpR;
 }

tmp = concatBits(R, IP.length/2, L, IP.length/2);

tmp = permutFunc(tmp, invIP);
 return tmp;
 }

/* La funzione Feistel, opera su mezzo blocco (32 bit) per volta e consiste di 4 passi.
 1. Espansione - il mezzo blocco di 32 bit è espanso fino a 48 bit utilizzando la permutazione
 di espansione che duplica alcuni bit.
 2. Miscelazione con la chiave - il risultato è combinato con una sottochiave usando
 * un'operazione di XOR. Sedici sottochiavi di 48 bit — una per ogni ciclo —
 * sono derivate dalla chiave principale usando il gestore della chiave (descritto più avanti
 * nella funzione generateSubKeys).
 3- Sostituzione - dopo la miscelazione con la sottochiave, il blocco viene diviso in 8 parti
 * di 6 bit prima del processamento con le S-box.
 * Ognuna delle 8 S-box sostituisce 6 bit in input con 4 bit in output mediante una trasformazione
 * non lineare effettuata mediante una tabella. Le S-box forniscono il cuore della sicurezza del DES
 * — senza di esse, la cifratura sarebbe lineare e quindi facilmente violabile.
 * Permutazione - infine, i 32 bit risultanti dalle S-box sono riordinati in base alle permutazioni
 * fisse della Permutation-box.
 4. L'alternanza di sostituzioni mediante le S-box, le permutazioni con la P-box
 * e le espansioni forniscono la cosiddetta confusione e diffusione,
 * (concetto identificato da Claude Shannon negli anni '40) come condizione necessaria
 * per rendere pratica e sicura la cifratura.
 */
 private static byte[] f_func(byte[] R, byte[] K) {
 byte[] tmp;
 tmp = permutFunc(R, expandTbl);
 tmp = xor_func(tmp, K);
 tmp = s_func(tmp);
 tmp = permutFunc(tmp, P);
 return tmp;
 }

/*
 * Utilizzata nel 4° passaggio di ogni round del DES .
 * Il risultato dello XOR del 3° passaggio viene utilizzato
 * nella S-box (sboxes). Il risultato è una parola di 32 bit.
 */
 private static byte[] s_func(byte[] in) {
 in = separateBytes(in, 6);
 byte[] out = new byte[in.length / 2];
 int halfByte = 0;
 for (int b = 0; b < in.length; b++) {
 byte valByte = in[b];
 int r = 2 * (valByte >> 7 & 0x0001) + (valByte >> 2 & 0x0001);
 int c = valByte >> 3 & 0x000F;
 int val = sboxes[b][r];
 if (b % 2 == 0)
 halfByte = val;
 else
 out[b / 2] = (byte) (16 * halfByte + val);
 }
 return out;
 }


 // dopo la miscelazione con la sottochiave, il blocco viene diviso in 8 parti di 6 bit.
 //Viene utilizzata nella s_func.
 private static byte[] separateBytes(byte[] in, int len) {
 int numOfBytes = (8 * in.length - 1) / len + 1;
 byte[] out = new byte[numOfBytes];
 for (int i = 0; i < numOfBytes; i++) {
 for (int j = 0; j < len; j++) {
 int val = extractBit(in, len * i + j);
 setBit(out, 8 * i + j, val);
 }
 }
 return out;
 }

 //Metodo utilizzato nella generazione delle subKeys, per concatenere le due metà della chiave.
 private static byte[] concatBits(byte[] a, int aLen, byte[] b, int bLen) {
 int numOfBytes = (aLen + bLen - 1) / 8 + 1;
 byte[] out = new byte[numOfBytes];
 int j = 0;
 for (int i = 0; i < aLen; i++) {
 int val = extractBit(a, i);
 setBit(out, j, val);
 j++;
 }
 for (int i = 0; i < bLen; i++) {
 int val = extractBit(b, i);
 setBit(out, j, val);
 j++;
 }
 return out;
 }

 /*
 * Elimina il padding.
 * Se il testo in chiaro non è un multiplo esatto,
 * è necessario riempire il tutto prima della cifratura (pad)
 * con l'aggiunta di una stringa di padding.
 * Quando si decodifica, la funzione ricevente (quella che che decripta)
 * ha bisogno di eliminare il padding.
 */
 private static byte[] deletePadding(byte[] input) {
 int count = 0;

int i = input.length - 1;
 while (input[i] == 0) {
 count++;
 i--;
 }

byte[] tmp = new byte[input.length - count - 1];
 System.arraycopy(input, 0, tmp, 0, tmp.length);
 return tmp;
 }
 /*Genera le SubKeys di ogni round. Inizialmente, vengono selezionati 56 bit della chiave
 * dagli iniziali 64 bit mediante la funzione permutFunc (PC-1) -
 * i rimanenti 8 bit sono scartati o utilizzati come bit di controllo della parità.
 * I 56 vengono poi suddivisi in 2 metà di 28 bit; ogni metà è poi trattata separatamente.
 * Nei cicli successivi entrambe le metà vengono fatte slittare verso sinistra di 1 o 2 bit
 * (per i round 1, 2, 9, 16 lo shift, cioè lo slittamento, è di 1 bit, per gli altri è di 2)
 * e quindi vengono scelti 48 bit per la sottochiave mediante la funzione Permuted Choice 2 (PC-2)
 * - 24 bit dalla metà di sinistra e 24 bit da quella di destra. La rotazione significa che
 * in ogni sottochiave è usato un insieme differente di bit; ogni bit è usato più o meno in
 * 14 delle 16 sottochiavi. Il gestore delle chiavi per la decifratura è simile -
 * deve generare le chiavi nell'ordine inverso quindi la rotazione è verso destra invece che verso
 * sinistra.
 */
 private static byte[][] generateSubKeys(byte[] key) {
 byte[][] tmp = new byte[16][];
 byte[] tmpK = permutFunc(key, PC1);

byte[] C = extractBits(tmpK, 0, PC1.length/2);
 byte[] D = extractBits(tmpK, PC1.length/2, PC1.length/2);

for (int i = 0; i < 16; i++) {

C = rotLeft(C, 28, keyShift[i]);
 D = rotLeft(D, 28, keyShift[i]);

byte[] cd = concatBits(C, 28, D, 28);

tmp[i] = permutFunc(cd, PC2);
 }

return tmp;
 }

 //è la funzione richiamata nel main che cripta il messaggio
 public static byte[] encrypt(byte[] data, byte[] key) {
 int lenght=0;
 byte[] padding = new byte[1];
 int i;
 lenght = 8 - data.length % 8;
 padding = new byte[lenght];
 padding[0] = (byte) 0x80;

 for (i = 1; i < lenght; i++)
 padding[i] = 0;

byte[] tmp = new byte[data.length + lenght];
 byte[] bloc = new byte[8];

K = generateSubKeys(key);

 int count = 0;

for (i = 0; i < data.length + lenght; i++) {
 if (i > 0 && i % 8 == 0) {
 bloc = encrypt64Bloc(bloc,K, false);
 System.arraycopy(bloc, 0, tmp, i - 8, bloc.length);
 }
 if (i < data.length)
 bloc[i % 8] = data[i];
 else{
 bloc[i % 8] = padding[count % 8];
 count++;
 }
 }
 if(bloc.length == 8){
 bloc = encrypt64Bloc(bloc,K, false);
 System.arraycopy(bloc, 0, tmp, i - 8, bloc.length);
 }
 return tmp;
 }





 //è la funzione richiamata nel main che decripta il messaggio
 public static byte[] decrypt(byte[] data, byte[] key) {
 int i;
 byte[] tmp = new byte[data.length];
 byte[] bloc = new byte[8];

 K = generateSubKeys(key);

for (i = 0; i < data.length; i++) {
 if (i > 0 && i % 8 == 0) {
 bloc = encrypt64Bloc(bloc,K, true);
 System.arraycopy(bloc, 0, tmp, i - 8, bloc.length);
 }
 if (i < data.length)
 bloc[i % 8] = data[i];
 }
 bloc = encrypt64Bloc(bloc,K, true);
 System.arraycopy(bloc, 0, tmp, i - 8, bloc.length);
 tmp = deletePadding(tmp);

return tmp;
 }
}
<pre>

Italia, Germania, Regno Unito: le start up a confronto.

“To start up” in inglese significa “iniziare”, “avviare”. Una start up è una azienda, una compagnia, un business che è appena avviato, che fonda la sua forza sull’intraprendenza di chi gli dà il calcio di inizio, sugli investitori disposti a finanziare le idee che stanno alla base del business che si desidera avviare  e sulle possibilità del mercato ovviamente. La realtà delle start up si sta imponendo sempre di più nella società di oggi: là dove accade in maniera più marcata, e là dove accade sì, ma costituisce ancora solo un sottostrato della struttura economica e sociale.

Dipende dove, quindi, non solo come e quando (la tempistica conta quando si tratta di dare avvio ad una nuova attività commerciale), ed è il dove più del resto a stabilire in qualche modo che direzione le start up prenderanno. Vediamo insieme l’esempio di tre nazioni, dove le start up stanno iniziando a prendere piede in misura diversa ma sempre maggiore rispetto a qualche anno fa, dove, insomma, si può iniziare a parlare di svolta nel modo di fare business.

L’Italia: 

L’Italia sta facendo i conti con una delle più profonde crisi economiche che il Bel Paese sta attraversando. E, in parte, è la stessa crisi ad influenzare la crescita e l’apparire di nuove stratup, e non per forza in negativo stavolta. Si profila all’orizzone una valida alternativa all’ambito posto fisso che tanto scarseggia: le startup, appunto. I giovani italiani si stanno aprendo al mondo della web economy e si inizia a delineare una nuova generazione: quella che si sradica dal territorio Italia e si apre al mondo interconnesso della rete, del social, quella che necessariamente deve imparare l’inglese, quella generazione insomma che si trova ad affacciarsi nel panorama lavorativo dei giorni d’oggi, completamente cambiato da come siamo sempre stati abituati a pensarlo. Un famoso startupper, Gianluca Dettori, ha affermato che “In fatto di venture capital siamo l’ultimo paese d’Europa, per ogni dollaro investito in Italia, la Svizzera ne investe 69, l’Olanda 62 e persino Portogallo e Grecia fanno meglio di noi”. Il venture capital è il segreto di ogni startup. Eppure da quella affermazione qualcosa è cambiato, muivendosi in direzione proficua per le startup: il Fondo Italia ha garantito 50 milioni di Euro per finanziare i venture capital. Una speranza, una spinta. Anche se ancora in molti sono convinti che in Italia le startup non prenderanno piede come, per esempio, hanno fatto America, perché non si vuole investire (o forse perché non c’è da investire?).  Si spera che con questi soldi stanziati si possa iniziare a crescere in una direzione più attuale, che è una valida alternativa per migliaia di giovani, oggi, e una possibilità concreta di porre nuove basi per una economia che, nel caso Italia, deve rialzarsi.

 

Il Regno Unito:

è di maggio la notizia che 82 milioni e mezzo di sterline sono state stanziate dal governo inglese per finanziare nuovi business. Un loan, un prestito, nel perfetto stile inglese, ai giovani tra i 18 e i 24 anni. Negli UK i giovani si affacciano prima nel panorama lavorativo, rispetto all’Italia. Non ci sono i nostri lunghi tempi universitari e il governo mette a disposizione questi prestiti sin dall’avvio della carriera universitaria, per garantire al giovane di avere una formazione sempre e comunque. È un modus operandi  che ha permesso all’Inghilterra di essere un paese con laureati giovani, quindi pieni di voglia di fare e molto più indipendenti nel pensare ed agire di come lo sono gli italiani. Un altro modo di pensare,  semplicemente. Il Primo Ministro Cameron ha affermato “Lo startup loan è una grande opportunità per i giovani, non solo per avere i fondi necessari per realizzare le loro idee ma anche per dare loro la fiducia di credere che sia possibile realizzarle, queste idee”. Dobbiamo aspettare almeno la fine dell’anno per avere un report su quanto efficace sia stato questo schema, per ora possiamo soltanto constatare che la tendenza nel Regno Unito è quella di essere pro start up e di garantire (come spesso succede in questo Paese) che i giovani abbiano almeno una possibilità basata poi sulla loro capacità o meno di riuscire.

 

La Germania:

Il caso della Germania, quando si parla di startup, fa capo al caso di Berlino, dove sono concentrate le idee, dove si poggia il fulcro del concetto stesso di startup. Berlino si è ripresa dalla caduta del Muro soprattutto perché si è voluta trasformare in una “città digitale”, e così gli investitori, unitamente alle avanguardie berlinesi e l’arrivo dell’era 2.0, hanno dato vita a quella che oggi è stata riconosciuta come “la capitale delle startup”. Berlino, appunto. La web economy è tutto a Berlino, ed è su questo assunto che possiamo basarci per capire quanto la capitale tedesca sia, oggi, la Mecca degli stratupper. La multiculturalità della città, il fatto che sia ancora considerabile un posto economico in cui vivere, lo spazio che è ancora in ricostruzione post-Muro, e gli investimenti delle venture capital, stanno facendo la differenza a Berlino. Si dice che in alcuni bar di Berlino abbiano preso forma le idee che stanno alla base delle startup di successo che caratterizzano questa città in questo senso. Berlino si sta trasformando sempre di più in un vero e proprio laboratorio dove sviluppare quelle idee all’avanguardia che spostano le basi su cui si tiene in piedi una società, come quelle economiche.

 

È il mondo intero che si apre alle startup, che su queste fonda l’economia del futuro. Nel caso dei tre paesi citati, bisogna ricercare motivi prettamente culturali che vanno ad incidere su come approcciare la nuova tendenza economica che si profila con il crescere delle startup. L’Italia che non cambia, vincolata sempre troppo al passato e a quei clichè che la fanno da padrone da noi, l’Inghilterra conservativa ma non troppo quando si tratta delle opportunità, abituata a dare ai propri cittadini più che a ricevere e Berlino che si riprende ancora da quel Muro che l’ha limitata così tanto in passato, che scalpita per affermarsi come prima capitale del mondo in qualcosa (qualsiasi cosa) forse in questo? Per ora, ci sta riuscendo.

Aspettiamo, e vediamo cosa succederà. I tempi corrono più veloci rispetto a prima, e tutto cambia in modo repentino e quasi inaspettato. Le startup diventeranno presto da fenomeno/tendenza a modello economico?

 

Roberta Martucci Schiavi, web writer freelance per twago Italia, startup di Berlino.

Get more from Google searches.

Google offers many tools to refine your searches, establishing the exact terms, words to be excluded, reference sites, publication period, and much more. We propose now unearthed this interesting infographic on Hackcollege which lays bare all the available syntax, making you able to carry out targeted searches through complex queries.

MARCO MAZZAGLIA IT Managere e Video Game Evangelist – Milestone @ VIEW Conference 2012

Oggi  vi parlo di VIEW Conference (www.viewconference.it), Conferenza Internazionale sulla grafica digitale, il cinema digitale, l’animazione 3D, i videogiochi, gli effettivi visivi e le tecniche interattive che quest’anno volge alla sua tredicesima edizione. La location è  Torino, le date dal 16 al 19 Ottobre 2012.

All’evento parteciperà Marco Mazzaglia,IT Manager e Video Game Evangelist per Milestone. Ecco tutte le informazioni necessarie.

MARCO MAZZAGLIA

IT Manager and Video Game Evangelist – Milestone

Marco Mazzaglia è nato a Torino nel 1974. All’età di 3 anni ha avuto il suo primo contatto con i computer e i videogiochi. Molti anni dopo ha ottenuto la laurea in informatica all’Università degli Studi di Torino, scrivendo una tesi su DyLog, un metalinguaggio di Prolog per le intelligenze artificiali.

 Nel 1996 con altre 23 persone ha fondato la cooperativa sociale “La Bussola”, con l’obiettivo di fornire servizi collegati alla tecnologia web e di insegnare l’uso di internet alle organizzazioni no-profit.

 Al suo primo lavoro si è occupato di architetture web e di servizi basati sulla geolocalizzazione per il Ministero degli Interni e per la Polizia di Stato. Dal gennaio 2008 lavora come IT Manager e come “evangelizzatore” dei videogame per Milestone; in questo contesto si occupa dello sviluppo di sistemi e lavora sulle architetture dei giochi online.

 

Feature Presentation: IL LATO OSCURO DEI VIDEOGIOCHI

I videogiochi sono soltanto puro divertimento? Si può affermare che un gioco può comunicare un messaggio o insegnare? Un viaggio di un’ora attraversando il lato meno conosciuto dell’arte videoludica tra videogiochi commerciali, serious game e altre applicazioni correlate al mondo del divertimento elettronico.

 

Workshop: CREATIVI SENZA PADRONE

Fin dalla nascita, l’opportunità di creare prodotti in libertà è stata una caratteristica dei videogiochi che sono diventati pietre miliari. In questo laboratorio il partecipante scoprirà le origini dello sviluppo indipendente e gli strumenti per realizzare la propria opera d’arte.

 Altri ospiti confermati sono: GARY RYDSTROM, sound designer dello Skywalker Sound vincitore di 7 Academy Awards, “Brave”, “War horse”, “Mission Impossible”, Toy Story”, A bugs life”, “Finding Nemo”, “Titanic”, “Jurassic Park”; DAN ATTIAS, vincitore del Directors Guild of America Award, regista di molte delle più famose serie tv americane tra i cui “I Soprano”, “The Wire”, “Deadwood,” “Lost”, “Six Feet Under”, “Dr. House”, “Alias”, “True Blood” e “The Killing”;JOSH HOLMES, direttore creativo di HALO, che presenterà in anteprima HALO 4.

http://viewconference.it/fantastici-ospiti-view-2012; GLENN ENTIS Academy Award Winner, Co-Founder and General Partner at Vanedge Capital

 

Concorsi & date ufficiali 2012

VIEW SOCIAL CONTEST/un film, un corto, un video musicale o una pubblicità realizzati mediante animazione 2D/3D e/o VFX che si focalizzino su temi sociali/ Scadenza:15 Settembre 2012 / Primo premio: 1500 €

VIEW AWARD/ cortometraggi animati realizzati mediante animazione 2d/3D e/o VFX / videogiochi/ Scadenza: 15 Settembre 2012 / Primo Premio: 2000€

ITALIANMIX/ opere realizzate da autori italiani o stranieri ma che abbiano come argomento l’Italia o soggetti Italiani / Scadenza: 15 Seettembre 2012

GRIMM ANIMATED/ cortometraggi animati della durata massima di 5 minuti che esplorino i classici dei fratelli Grimm in maniera innovativa/ Scadenza: 24 Agosto 2012 / Primo Premio: 1500 €

Tutti i moduli di partecipazione: http://viewconference.it/view-awards-2012

 

VIEW Conference si svolgerà a Torino dal 16 al 19 Ottobre 2012 e sarà seguito dal VIEWFest, dal 19 al 21 Ottobre 2012.