Anteprima di Windows 7 (Windows Seven) l’atteso successore di windows vista

December 31st, 2008


Dopo il fallimento di Windows Vista la Microsoft non è restata di certo con le mani in mano, a distanza di poco tempo è gia disponibile una versione beta dell’attesissimo Windows Seven!

In questo articolo vedremo un pò cosa casa MS ci propone analizzando le principali funzione della versione di test pubblicata pochi giorni fa.

Windows 7 si presenta come un Vista revisionato,  sembrerebbe proprio che l’idea della Microsoft è stata quella di creare un Vista con qualche difetto in meno e qualche nuova funzione.

La prima cosa che spicca nel desktop è l’innovativa barra: A differenza dei predecessori os ogni istanza di applicazione (ogni finestra aperta) viene visualizzata nella barra delle appicazioni con l’icona dell’applicazione al posto di un riquadro col nome della finestra come avviene in vista, xp etc… E’ possibile inserire con facilità i collegamenti ai programmi preferiti nella barra  semplicemente aprendo una applicazione e selezionando le impostazioni della finestra.

Altra cosa molto gradita è la possibilità di spostare l’ordine delle icone delle applicazioni aperte semplicemente trascinandole col mouse.

Queste sono solo alcune delle nuove caratteristiche della barra, sono disponibili molte altre opzioni ma servirebbe un articolo intero solo per descriverle, ogettivamente possiamo affermare che la nuova barra  è più funzionale rispetto alle precedenti versioni.

Una nuova divertente funzione del os permette di fare spazio sul desktop semplicemente scuotendo con il mouse una finestra aperta sopra le altre, tutte le finestre coplite verranno minimizzate autamaticamente.

Non male la compatibilità software, appartentemente il sistema operativo sembra supportare qualsiasi software compatibile con windows vista (anche se non è proprio cosi..).

Una caratteristica migliorata è sicuramente l’utilizzo di risorse, windows seven sembra più leggero di windows Vista.

Nel desktop trovano spazio i gadget presenti anche in windows vista, ma senza la barra nera di sottofondo, non danno fastidio alle altre applicazioni.

In windows seven con un semplice click destro in una parte vuota del desktop è possibile utilizzare le nuove funzioni di personalizzazione: Gadget, Risoluzione, Temi Desktop.


Queste nuove funzionalità semplificano al massimo la personalizzazione del proprio pc.

I nuovi temi del desktop aggiungono un pizzico di modernità al sistema operativo, ogni tema è dotato di diversi sfondi che vengono ciclicamente cambiati in automatico per rompere la monotonia..

Dal punto di vista della sicurezza il sistema riprende le funzionalità di controllo programmi di windows vista e un efficiente promemoria per gli utenti più pigri che ricorda di aggiornare il sistema operativo, di installare un software antivirus, firewall etc..

In windows 7 notiamo molte utility disponibili con il sistema operativo come adesempio la powershell (una finestra per eseguire comandi relativi al framework .net, ricorda molto quella di linux, con la possibilità di scrivere rapidamente i comandi con il tasto tab)

Qui sotto altre immagini di Windows Seven che da sole esplicitano le nuove caratteristiche rispettivamente: nuovo menu applicazioni, gestione dei dispositivi, utilizzo del desktop, navigazione rapida grazie IE8

Pur promettendo bene windows seven non convince i più attenti analisti che affermano: “Questo sistema operativo non conquisterà il pubblico, proprio per le stesse ragioni per cui Windows Vista non ha convinto i consumatori”, c’è da chiedersi:  Cosa può spingere un utente ad abbandonare un sistema operativo molto funzionale come Windows Xp per un nuovo sistema operativo che pur innovando alcuni aspetti marginali non migliora nulla di funzionale?

Il tutto poi in un clima di recessione a livello globale…

Per adesso è tutto!

Non ci resta che attendere l’uscita di windows seven attesa per Giugno.


Caratteristiche dei condizionatori, motivi per installare un condizionatore e guida sul come installare un condizionatore.

November 3rd, 2008




In questo articolo parleremo dei condizionatori d’aria precisamente dei modelli classici composti da parte interna (split) e parte esterna (motore) tralasciando i modelli con tutto integrato  (il modello interno a mio avviso è troppo rumoroso e di dubbia utilità),  in particolare parleremo sui vantaggi offerti, sulle caratteristiche degli apparecchi e sul come installare un condizionatore d’aria a modo fai da te.

Iniziamo col vedere i vantaggi che un condizionatore d’aria può offrire rispetto altri sistemi di trattamento aria:

- RISPARMIO ENERGETICO: Il rendimento dei nuovi condizionatori d’aria di classe A può arrivare fino a 3.6 punti (in modalità raffreddamento e riscaldamento), è un valore che dovrebbe essere considerato dato che è di gran lunga superiore rispetto ad altri valori di rendimento che sistemi tradizionali di trattamento aria possono offrire (es:una caldaia può offrire un rendimento massimo vicino al valore 1).

Cosa significa tutto ciò?

Che ad esempio un moderno condizionatore d’aria può produrre una quantità di calore di N KW/h con ampi margini di risparmio (di oltre 1/3 dell’energia) rispetto ad altri sistemi.

Tutto cio è possibile sfruttando alcuni fenomeni dei gas, e qui la fisica con le sue leggi ci spiega il tutto: il principio di funzionamento di un condizionatore d’aria sfrutta la caratteristica dei gas di produrre calore (se il gas viene compresso) o freddo (quando il gas si espande di volume), un condizionatore grazie ad un motore, o più precisamente una pompa che viene installata esternalmente all’ambiente con un sistema di tubazioni può comprime e decomprimere un gas (ci sono vari tipi di gas utilizzati a tale scopo) a seconda della funzione desiderata.

Parlando di risparmio energetico andrebbe inoltre considerato che esistono 2 modelli di condizionatore:

- On/Off

-A inverter

Il modello di condizionatore On/Off come dice la parola stessa, una volta acceso entra in azione se la temperatura desiderata è diversa dalla temperatura dell’ambiente  e si disazione quando la temperatura desiderata viene raggiunta. Questo principio di funzionamento è lo stesso del frigorifero e presenta alcuni svantaggi:

- La temperatura ambientale ed umidità non è stabilissima nel tempo

- I consumi non sono ottimizzati dato che quando l’apparecchio si aziona presenta un consumo di energia piuttosto notevole

- Dato il principio di funzionamento non sarà possibile avere più di 2 condizionatori di questa tipologia in funzione dentro casa in contemporanea con un normale contratto residenziale da 3.3 Kw/h

Tuttavia i modelli On/Off costano meno dei modelli ad inverte.

I modelli ad Inverter presentano un sofisticato sistema che consente al condizionatore di regolare la potenza a seconda della temperatura raggiunta, questo significa che il condizionatore non si spegnerà una volta che la temperatura ambientale viene raggiunta ma continuera nel suo funzionamento con un utilizzo di potenza ridotto. I vantaggi di questo sitema sono:

- La temperatura ambientale e l’umidità dell’ambiente condizionato risulterà stabile

- I consumi possono essere ridotti anche fino al 30% rispetto un modello on/off  dopo che la temperatura ambientale si è stabilizzata (di solito dopo 1, 2 o 3 ore a seconda dell’ambiente e delle condizioni)

- Data la filosofia di funzionamento sarà possibile tenere in funzione anche più di due condizionatori in contemporanea con un contratto residenziale di 3.3 KW senza avere troppi problemi nell’eccedere il valore massimo di corrente del contratto.

Ovviamente il prezzo di questi apparecchi è superiore rispetto al modello on/off ma il costo può essere ammortizzato nel tempo grazie ad un ulteriore risparmio.

- APPARECCHIO MULTI-FUNZIONE un condizionatore d’aria ha il vantaggio di poter trattare l’aria in diverse modalità: Riscaldamento, Refrigerazione, Deumidificazione e Ionizzazione dell’aria. Qualche parola può essere detta sull’ultima funzione, dato che è la meno conosciuta. Per Ionizzazione dell’aria si intende l’introduzione di ioni negativi nell’ambiente (si cerca di riprodurre per certi versi l’aria presente in montagna), questa funzione dovrebbe fornire condizioni di benessere all’ambiente e ridurre i sintomi di molte malatie respiratorie. Quindi con la spesa di un condizionatore d’aria si può beneficiare di tutte queste funzioni!

- SICUREZZA E MANUTENZIONE MINIMA un condizionatore d’aria non necessita di una grande manutenzione, bisogna solo ripulire i filtri dell’aria ogni tanto, inoltre il sistema è assolutamente sicuro non c’è nessun gas che può infiammarsi a differenza di una caldaia

Parliamo adesso di come installare un condizionatore a modo fai da te!

Iniziamo col dire che il miglior periodo per installare un condizionatore d’aria a mio avviso è dopo la fine dell’estate, è possibile trovare molti condizionatori con ottimi sconti presso rivenditori/installatori, centri commerciali etc..

Premetto che per quanto riguarda l’installazione consiglio a tutti gli inesperti nei lavori domestici,  e nelle materie tecniche di far eseguire il lavoro d’installazione da un professionista del settore (un costo  onesto a mio parere non dovrebbe essere superiore ai 300 euro per un modello Mono Split cioè con un solo punto interno di trattamento aria) e consiglio di procedere all’installazione fai da te solo ai più esperti e volenterosi premettendo che bisognerà accettare tutti i rischi del mestiere che possono essere:

- Danneggiamento dell’apparecchio

- Dispersione dei gas delc ondizionatore nell’ambiente

- Incidenti e possibili traomi durante l’installazione

-Etc… etc…

L’installazione di un condizionatore quindi non è certo una passeggiata per chi non ha mai avuto modo di cimentarsi con questo tipo di lavoro e richiede diversi attrezzi assolutamente non convenzionali inoltre non è sicuramente alla portata di tutti.

Per prima cosa è opportuno comunque leggere molto attentamente il manuale di installazione del condizionatore.

Qui sotto elenco gli attrezzi e materiali necessari per “improvvisare” un installazione e li marchierò con un * e anche i materiali necessari per un istallazione a regola d’arte ma di cui si può fare anche a meno marchiati con il simbolo -

Lista:

* Almeno 2 chiavi per avvitare/svitare i raccordi dei tubi

- una chiave dinamometrica (per avvitare a regola d’arte i raccordi misurando la forza impiegata)

* Un trapano con una speciale punta lunga almeno più della parete da forare e di diametro sufficiente per far passare cavi elettrici e 2 tubi per il condizionatore

* Una livella (per mettere in piano split e motore)

* Una cartellatrice (per fare le cartelle ai tubi)

* Un taglia tubi

* Una pompa per il vuoto per condizionatori d’aria (per eliminare aria e impurità dalle tubazioni) a dir il vero questo strumento non è strettamente necessario se le tubazioni sono di pochi metri (3/4), ma in questo caso l’installazione non sarebbe fatta a regola d’arte.

- Una soluzione per testare le perdite

- Un calibro per eseguire misure di precisione

* Staffe / supporto per sistemare la parte esterna motore

* Tubature per condizionatori (per collegare unità esterna all’unità interna)

* Cavi elettrici della stessa lunghezza delle tubature e con numero di fili pari a quello indicato nel manuale di installazione

Se non siete gia scoraggiati da questa lista si può procedere con l’installazione, basta seguire queste istruzioni:

- Scegliere una posizione per l’unità interna valutando eventuali presenze di linee elettriche o tubazioni dentro la parete, smontare quindi la dima (o staffa) dall’unità interna e fissarla al muro allineandola con l’aiuto di una livella (possibilmente), tenendo ovviamente conto degli ingombri delle tubazioni e dei cavi elettrici che dovranno attraversare il  muro.  Consiglio di posizionare le tubature dell’unità interna in modo da rendere facilmente accessibili i giunti per testare successivamente eventuali perdite di gas.

-Una volta deciso il percorso dei tubi si può procedere effettuando il foro per far passare tubazioni e cavi elettrici tramite il trapano.

-Posizionare l’unità esterna nella locazione più comoda fissandola a delle staffe o mettendola a terra con degli speciali gommini, se possibile evitare di esporla a pioggia diretta, vento e luce solare.

-Realizzare la linea di tubazioni:

per prima cosa bisogna tagliare i tubi nella lunghezza desiderata (meglio se tramite un taglia tubi) lasciando qualche cm in più per eventuali errori nella realizzazione della linea, successivamente dopo aver inserito i dadi nel tubo bisogna creare le cartelle con la cartellatrice.

I giunti vanno stretti con forza, ma non eccedendo dato che il rame se stretto a limite tende a deformarsi. Per evitare perdite dunque bisogna stringere il tutto quasi quanto basta! A tutti i perfezionisti consiglio di usare la chiave dinamometrica che consente di regolare la forza (per sapere quanta forza utilizzare basta far riferimento al manuale d’installazione, dovrebbero esserci le tabelle relativi a tubi e forza da utilizzare).

Una volta realizzata la linea di tubature occorre creare il vuoto all’interno delle stesse. Per far cio’ è necessario aprire l’attacco di servizio dell’unita esterna e collegarci la pompa del vuoto che dovrà lavorare per circa mezzora o più a seconda della lunghezza delle tubature. Finita questa operazione è già possibile verificare in parte eventuali perdite osservando il vuotometro. Se a pompa spenta la lancetta del vuotometro tende a tornare verso la posizione di nuon vuoto significa che c’è qualche perdita. In questo caso è opportuno stringere / sistemare i giunti e riprovare il tutto.

Nell’altro caso invece possiamo aprire le valvole del gas, e mandarlo in ciclo. Subito dopo aver eseguito questa operazione possiamo testare eventuali perdite di gas impregnando le giunzioni con una soluzione per testare le perdite, se si osservano delle bollicine potrebbe essere necessario stringere i tubi per eliminare le perdite.

Fatto ciò non resta che eseguire i collegamenti elettrici come da manuale e testare l’appartato.

Lavorare con i bit in C# .Net e implementazione dell’algoritmo Base64

May 6th, 2008



Spesso capita di dover lavorare con i bit, specialmente quando si lavora con i protocolli di comunicazione.

Sfortunatamente nei linguaggi di programmazione ad alto livello a differenza dell’asm, spesso mancano le funzioni giuste per accedere direttamente ai valori dei bit e il dato minimo che si può leggere è il byte.

In questo articolo propongo una semplice classe per il linguaggio di programmazione C# .Net utile per accedere direttamente ai bit di una variabile di tipo byte. Per un ulteriore dimostrazione dell’utilità di questa classe ho implementato anche l’algoritmo Base64 sfruttando i metodi per i bit.

I metodi della classe consentono di :

-Leggere il valore di un bit da un byte

-Settare il valore di un bit in un byte

-Codificare e Decodificare in base64

Spero che questa classe torni utile a qualcuno a presto!
using System;
using System.Collections.Generic;
using System.Text;

namespace BitClass
{
class BitFunction
{

//Get bit 0-7 flag return 1 or 0, if any error return -1
public int GetBitFlag ( Byte MyByte , int BitN )
{
Byte B;

switch (BitN)
{
case 0:
B = (byte)((byte)MyByte & (byte)0×01);
return System.Convert.ToInt32(B);
break;

case 1:
B = (byte)((byte)MyByte & (byte)0×02);
B = System.Convert.ToByte(B >> 1);
return System.Convert.ToInt32(B);
break;

case 2:
B = (byte)((byte)MyByte & (byte)0×04);
B = System.Convert.ToByte(B >> 2);
return System.Convert.ToInt32(B);
break;

case 3:
B = (byte)((byte)MyByte & (byte)0×08);
B = System.Convert.ToByte(B >> 3);
return System.Convert.ToInt32(B);
break;

case 4:
B = (byte)((byte)MyByte & (byte)0×10);
B = System.Convert.ToByte(B >> 4);
return System.Convert.ToInt32(B);
break;

case 5:
B = (byte)((byte)MyByte & (byte)0×20);
B = System.Convert.ToByte(B >> 5);
return System.Convert.ToInt32(B);
break;

case 6:
B = (byte)((byte)MyByte & (byte)0×40);
B = System.Convert.ToByte(B >> 6);
return System.Convert.ToInt32(B);
break;

case 7:
B = (byte)((byte)MyByte & (byte)0×80);
B = System.Convert.ToByte(B >> 7);
return System.Convert.ToInt32(B);
break;

default:
return -1;
break;

}

return -1;
}

//Set bit 0-7 flag, return a setted Byte.. if any error return the original byte
public Byte SetBitFlag(Byte MyByte, int BitN, int value)
{
// If any errors return the original Byte!
if (((BitN < 0) && (BitN > 7)) || ((value < 0) && (value > 1)))
return MyByte;

//Setting the bit…

switch (BitN)
{
case 0:
if (value == 0)
{
// Is the bit 0 == 0?
if (GetBitFlag(MyByte, 0) == 0)
return MyByte; // It’s Already setted to 0!
else //it’s setted to 1
{
MyByte = (byte)( MyByte ^ (byte)0×01); // Need to set it to 0
return MyByte;
}
}
if (value == 1)
// Is the bit 0 == 1?
if (GetBitFlag(MyByte, 0) == 1)
return MyByte; // It’s Already setted to 1!
else //it’s setted to 0
{
MyByte = (byte)(MyByte ^ (byte)0×01);// Need to set it to 1
return MyByte;
}
break;

case 1:
if (value == 0)
{
// Is the bit 0 == 0?
if (GetBitFlag(MyByte, 1) == 0)
return MyByte; // It’s Already setted to 0!
else //it’s setted to 1
{
MyByte = (byte)(MyByte ^ (byte)0×02); // Need to set it to 0
return MyByte;
}
}
if (value == 1)
// Is the bit 0 == 1?
if (GetBitFlag(MyByte, 1) == 1)
return MyByte; // It’s Already setted to 1!
else //it’s setted to 0
{
MyByte = (byte)(MyByte ^ (byte)0×02);// Need to set it to 1
return MyByte;
}
break;

case 2:
if (value == 0)
{
// Is the bit 0 == 0?
if (GetBitFlag(MyByte, 2) == 0)
return MyByte; // It’s Already setted to 0!
else //it’s setted to 1
{
MyByte = (byte)(MyByte ^ (byte)0×04); // Need to set it to 0
return MyByte;
}
}
if (value == 1)
// Is the bit 0 == 1?
if (GetBitFlag(MyByte, 2) == 1)
return MyByte; // It’s Already setted to 1!
else //it’s setted to 0
{
MyByte = (byte)(MyByte ^ (byte)0×04);// Need to set it to 1
return MyByte;
}
break;

case 3:
if (value == 0)
{
// Is the bit 0 == 0?
if (GetBitFlag(MyByte, 3) == 0)
return MyByte; // It’s Already setted to 0!
else //it’s setted to 1
{
MyByte = (byte)(MyByte ^ (byte)0×08); // Need to set it to 0
return MyByte;
}
}
if (value == 1)
// Is the bit 0 == 1?
if (GetBitFlag(MyByte, 3) == 1)
return MyByte; // It’s Already setted to 1!
else //it’s setted to 0
{
MyByte = (byte)(MyByte ^ (byte)0×08);// Need to set it to 1
return MyByte;
}
break;

case 4:
if (value == 0)
{
// Is the bit 0 == 0?
if (GetBitFlag(MyByte, 4) == 0)
return MyByte; // It’s Already setted to 0!
else //it’s setted to 1
{
MyByte = (byte)(MyByte ^ (byte)0×10); // Need to set it to 0
return MyByte;
}
}
if (value == 1)
// Is the bit 0 == 1?
if (GetBitFlag(MyByte, 4) == 1)
return MyByte; // It’s Already setted to 1!
else //it’s setted to 0
{
MyByte = (byte)(MyByte ^ (byte)0×10);// Need to set it to 1
return MyByte;
}
break;

case 5:
if (value == 0)
{
// Is the bit 0 == 0?
if (GetBitFlag(MyByte, 5) == 0)
return MyByte; // It’s Already setted to 0!
else //it’s setted to 1
{
MyByte = (byte)(MyByte ^ (byte)0×20); // Need to set it to 0
return MyByte;
}
}
if (value == 1)
// Is the bit 0 == 1?
if (GetBitFlag(MyByte, 5) == 1)
return MyByte; // It’s Already setted to 1!
else //it’s setted to 0
{
MyByte = (byte)(MyByte ^ (byte)0×20);// Need to set it to 1
return MyByte;
}
break;

case 6:
if (value == 0)
{
// Is the bit 0 == 0?
if (GetBitFlag(MyByte, 6) == 0)
return MyByte; // It’s Already setted to 0!
else //it’s setted to 1
{
MyByte = (byte)(MyByte ^ (byte)0×40); // Need to set it to 0
return MyByte;
}
}
if (value == 1)
// Is the bit 0 == 1?
if (GetBitFlag(MyByte, 6) == 1)
return MyByte; // It’s Already setted to 1!
else //it’s setted to 0
{
MyByte = (byte)(MyByte ^ (byte)0×40);// Need to set it to 1
return MyByte;
}
break;

case 7:
if (value == 0)
{
// Is the bit 0 == 0?
if (GetBitFlag(MyByte, 7) == 0)
return MyByte; // It’s Already setted to 0!
else //it’s setted to 1
{
MyByte = (byte)(MyByte ^ (byte)0×80); // Need to set it to 0
return MyByte;
}
}
if (value == 1)
// Is the bit 0 == 1?
if (GetBitFlag(MyByte, 7) == 1)
return MyByte; // It’s Already setted to 1!
else //it’s setted to 0
{
MyByte = (byte)(MyByte ^ (byte)0×80);// Need to set it to 1
return MyByte;
}
break;

case 8:
if (value == 0)
{
// Is the bit 0 == 0?
if (GetBitFlag(MyByte, 8) == 0)
return MyByte; // It’s Already setted to 0!
else //it’s setted to 1
{
MyByte = (byte)(MyByte ^ (byte)0×01); // Need to set it to 0
return MyByte;
}
}
if (value == 1)
// Is the bit 0 == 1?
if (GetBitFlag(MyByte, 8) == 1)
return MyByte; // It’s Already setted to 1!
else //it’s setted to 0
{
MyByte = (byte)(MyByte ^ (byte)0×01);// Need to set it to 1
return MyByte;
}
break;

default:
return MyByte;
break;

}

return MyByte;
}

//GEt the value of Upper Nibble of a byte
public byte GetUpperNibble(Byte B) // Return Upper nibble of a byte
{
B = (byte)((byte)B & (byte)0xF0);
B = System.Convert.ToByte(B >> 4);
return B;
}

//GEt the value of Lower Nibble of a byte
public byte GetLowerNibble(Byte B) // Return Lower nibble of a byte
{
B = (byte)((byte)B & (byte)0×0F);
return B;
}

public string Base64_Encode ( Byte[] ToEncode )
{
String BaseArray = “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”;
String Encoded = “”;

Byte[] encoded_char = new Byte[4];
int BitIndex = 7;

for (int i = 0; i < ToEncode.Length – ToEncode.Length % 3; )
{
for (int x = 0; x < 4; x++)
{
for (int j = 5; j >= 0; j–)
{
encoded_char[x] = SetBitFlag(encoded_char[x], j, GetBitFlag(ToEncode[i], BitIndex));
BitIndex = BitIndex – 1;

if (BitIndex == -1)
{
BitIndex = 7;
i++;
}

}
}

for (int y = 0; y < 4; y++)
Encoded += BaseArray[System.Convert.ToInt32(encoded_char[y])].ToString();
}

encoded_char[0] = 0;
encoded_char[1] = 0;
encoded_char[2] = 0;
encoded_char[3] = 0;

// If 1 byte miss case
if (ToEncode.Length % 3 == 2)
{
BitIndex = 7;
for (int i = ToEncode.Length – 2; i < ToEncode.Length; )
{
for (int x = 0; x < 3; x++)
{

for (int j = 5; j >= 0; j–)
{
if (i < ToEncode.Length )
encoded_char[x] = SetBitFlag(encoded_char[x], j, GetBitFlag(ToEncode[i], BitIndex));
else
{
i++;
}

BitIndex = BitIndex – 1;

if (BitIndex == -1)
{
BitIndex = 7;
i++;
}

}

}

for (int y = 0; y < 3; y++)
Encoded += BaseArray[System.Convert.ToInt32(encoded_char[y])].ToString();
Encoded += “=”;
}

}

encoded_char[0] = 0;
encoded_char[1] = 0;
encoded_char[2] = 0;
encoded_char[3] = 0;
// If 1 byte miss case
if (ToEncode.Length % 3 == 1)
{
BitIndex = 7;
for (int i = ToEncode.Length – 1; i < ToEncode.Length; )
{
for (int x = 0; x < 2; x++)
{

for (int j = 5; j >= 0; j–)
{

encoded_char[x] = SetBitFlag(encoded_char[x], j, GetBitFlag(ToEncode[i], BitIndex));
BitIndex = BitIndex – 1;

if (BitIndex == -1)
{
BitIndex = 7;
i++;
if (i == ToEncode.Length)
break;
}

}

}

for (int y = 0; y < 2; y++)
Encoded += BaseArray[System.Convert.ToInt32(encoded_char[y])].ToString();
Encoded += “==”;
}

}

return Encoded;
}

public byte[] Base64_Decode(String ToDecode)
{
String BaseArray = “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”;
byte[] Decoded = new byte[0];
int LenDecoded = 0;
int StopIt = 0;
if (ToDecode.Length > 3)
{
Byte[] ToDecodeValue = new Byte[ToDecode.Length];

if ((ToDecode[ToDecode.Length - 1] == ‘=’) && (ToDecode[ToDecode.Length - 2] != ‘=’))
{
StopIt = 1;
if (ToDecode.Length > 4)
LenDecoded = (((ToDecode.Length – 4) / 4) * 3) + 2;
else
LenDecoded = 2;
}

if ((ToDecode[ToDecode.Length - 1] == ‘=’) && (ToDecode[ToDecode.Length - 2] == ‘=’))
{
StopIt = 2;
if (ToDecode.Length > 4)
LenDecoded = (((ToDecode.Length – 4) / 4) * 3) + 1;
else
LenDecoded = 1;
}

if ((ToDecode[ToDecode.Length - 1] != ‘=’) && (ToDecode[ToDecode.Length - 2] != ‘=’))
{

LenDecoded = (((ToDecode.Length) / 4) * 3);
}
Decoded = new byte[LenDecoded];

for (int i = 0; i < ToDecode.Length – StopIt; i++)
{
int z = 0;
while ( ToDecode[i] != BaseArray[z] )
z++;

ToDecodeValue[i] = System.Convert.ToByte( z );

}

int BitIndex = 5;
int EncodedIndex = 0;

for (int i = 0; i < LenDecoded; i++)
{
for (int j = 7; j >= 0; j–)
{
Decoded[i] = SetBitFlag(Decoded[i], j, GetBitFlag(ToDecodeValue[EncodedIndex], BitIndex));
BitIndex = BitIndex – 1;

if (BitIndex == -1)
{
BitIndex = 5;
EncodedIndex = EncodedIndex + 1;
}

}

}

}

return Decoded;
}

}
}

Telefonate nazionali e internazionali al minor prezzo possibile

April 30th, 2008


Grazie alla tecnologia VOIP è possibile effettuare chiamate verso telefoni fissi e telefoni cellulari a prezzi molto bassi verso la maggior parte dei paesi del mondo.

Per VOIP (Voice Over IP) si intende una tecnologia che trasporta la voce su internet, questa caratteristica può essere sfruttata essenzialmente in due modi:

1) La voce può essere inviata direttamente all’utente finale tramite internet se l’utente che riceve la telefonata è ingrado di ricevere chiamare voip. Generalmente in questo caso la chiamata è completamente gratuita (eccetto per i costi di connessione ad internet).

2) La chiamata voip può essere effettuata verso un telefono fisso classico o telefono cellulare.In questa casistica in una prima fase la tecnologia voip provvederà a convertire la voce in dati per poi trasportarla su internet “avvicinandola” alla centrale di smistamento telefonico più vicina al destinatario, mentre nella seconda fase la voce viene riconvertita in una classica chiamata telefonica.
Il vantaggio sui prezzi di questa tecnologia è che una qualsiasi chiamata in un qualsiasi paese del mondo assume il costo di una telefonata urbana.

Vantaggi della tecnologia voip:

-Telefonate gratuite verso tutti gli utenti voip.

-Telefonate a costi molto contenuti verso tutti i telefoni fissi e cellulari in tutti i paesi del mondo.

-Difficolta di essere intercettati nel caso di chiamate voip verso utenti voip (generalmente i software voip cifrano i dati audio che transitano su internet tramite algoritmi robusti).

Svantaggi della tecnologia voip:

-Si notano dei brevi ritardi nella comunicazione (la voce tarda ad arrivare di circa 1/2 – 1 sec.).

-Tecnologia non sempre alla portata di tutti (sarà difficile convincere i più pigri ad utilizzare questa tecnologia!).

Requisiti per l’utilizzo della tecnologia voip

I requisiti per utilizzare questa tecnologia sono ormai alla portata di tutti:

-Disporre di una connessione internet (meglio se performante, basta comunque anche una connessione UMTS)

-Di un dispositivo elettronico ingrado di supportare un software voip (pc + microfono e cuffie/telefono voip usb, telefonino di ultima generazione, computer palmare, telefono voip standalone, etc..), e

-Ovviamente di un software voip.

Il più noto software voip disponibile è Skype, questo software è piuttosto semplice ed intuitivo da utilizzare, è disponibile per svariati dispositivi elettronici: per pc (su diversi sistemi operativi) , per cellulare etc… Una volta installato offre la possibilità di effettuare una prima chiamata gratuitamente verso un telefono fisso.

Backup di MySQL intelligente tramite uno script Java

April 11th, 2008


In questo articolo viene presentato un metodo semplice e veloce (se volete anche un pò grezzo) per eseguire dei backup intelligenti con storico temporale di un database MySQL installato su una macchina windows tramite uno script java.

I requisiti necessari per utilizzare questo script sono:

-Un database MySQL dotato dell’utility mysqldump.exe

-Java virtual macchine aggiornata

-Software MySQL Administrator (per gestire con facilità il database MySQL)

Lo scopo dello script è quello di:

-Creare dei backup automatizzati grazie all’utilizzo della funzionalità operazioni pianificate di windows.

-Creare uno storico con un certo numero configurabile di backup.

-Eliminare i backup meno recenti.

Per raggiungere questo obiettivo bisogna seguire dei semplici passi.

1) Aggiungere un utente privo di password al database mysql (è possibile effettuare questa operazione con facilità tramite l’utility MySQL Administrator) con privilegi di sola lettura della tabella da mettere in backup.

2) Copiare lo script e i relativi file di configurazione in una qualsiasi directory.

3) Configurare i file dello script

4) Pianificare il backup tramite l’utility operazioni pianificate di windows

Per configurare i file dello script:

-Nel file “step.txt” inserire il numero progressivo che verrà assegnato al file di backup (di default “0″).

-Nel file “string_cfg.txt” inserire il comando per mysqldump nella forma:

C:\percorso_di_mysql\bin\mysqldump.exe -u nomeutente NomeTabellaDaBackuppare

-Nel file “destination.txt” inserire la directory di destinazione dei file backup nella forma:

C:\dbt\

Una volta configurato il tutto basta semplicemente aggiungere delle operazioni pianificate che abbiano come parametri il file script.

Utilizzare la forma java -jar C:\percorso\DatabaseBackup.jar

Esegui il download di tutto il materiale cliccando su: Smart Dump

Una rete in casa (con linux!)

March 30th, 2008


PREMESSA:

Il Networking è un argomento molto vasto, quindi, vedremo solo la configurazione di una piccola lan domastica, inoltre, faremo in modo di condividere una conessione internet con 2 pc.
Parleremo del comando iptables( con il quale agirete sul firewall Netfilter) tecnica definita firewalling.

MATERIALE NECESSARIO:

1) n°2 schede di rete ethernet ( una per ogni pc )
2) cavo incrociato
3) n°2 pc (host1 ed host2)

INIZIO:

Lo standard più diffuso per reti lan è ethernet,questa tipologia di rete viene definita a bus, cioè, ogni pacchetto dati trasmesso all’interno della stessa viene ricevuto da tutti gli hosts ma, solo il destinatario lo leggerà.
In una distrò linux è possibile configurare una scheda ethernet sia in modo grafico (tramite un tool) o a linea di comando (shell), noi lo faremo con una shell bash…
Una volta installata la vostra distribuzione linux preferita dovete assegnare un indirizzo ip ad ogni pc.Apriamo una shell e digitiamo (da root) il seguente comando:

host1# ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up

Questo comando ci permette di assegnare l’ip 192.168.0.1 a host1 ( da notare che in ogni classe di ip c’è un range di ip dedicato ad indirizzi privati, se qualcuno vuole approfondire l’argomento si deve leggere una guida sul protocollo TCP/IP perchè tale argomento non lo tratterò quì..).
Lo stesso comando digitatelo in host2 mettendo come ip 192.168.0.2 fatto questo dobbiamo verificare se il kernel ha riconosciuto l’interfaccia eth0.
ora digitate il comando ifconfig senza opzione ( host1# ifconfig ) in output vedremo:

eth0 link encap:ethernet HWaddr 00:00:09:45:22:11
inet addr:192.168.0.1 Bcast:192.168.0.255
……………
……………

lo link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
……………
……………

Questo significa che tutto è andato a buon fine, infatti, possiamo notare che abbiamo 2 interfaccie attive, una è eth0 l’altra è lo (questa interfaccia la possiamo considerare come dispositivo virtuale il quale ci consente di utilizzare lo stack tcp/ip anche non disponendo di alcuna scheda di rete).L’ip 127.0.0.1 corrisponde al localhost, valido solo all’interno della singola macchina.
Se anche in host2, dopo aver digitato il comando ifconfig, avete lo stesso output potete vedere se i due host (collegati fra loro con le 2 schede eth0)sono in grado di dialogare digitando il comando:

host1# ping -c 3 192.168.0.2

come output avrete:

PING 192.168.0.2 (192.168.0.2): 56 data bytes
64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=0.2 ms
………………..
………………..
3 packets trasmitted, 3 packets received, 0% packets loss

Perfetto, ora i due host sono collegati fra loro e stanno dialogando, infatti abbiamo inviato 3 pacchetti da host1 a host2 e nessuno di questi è stato perso.
Arrivati a questo punto la vostra rete privata è configurata e potete aprire una sessione ssh digitando il seguente comando:

host1# ssh nomeutente@192.168.0.2

ora potete prendere confidenza (o pratica) con questo protocollo.

INTERNET:

Immaginando che host1 abbia già configurata una connessione internet (se non è così dovete farlo) con ip 110.10.11.12 (ip teorico) provate da host2 ad inviare dei pacchetti verso l’interfaccia ppp0 digitando il comando:

host2# ping -c 3 110.10.11.12

noterete il nascere di un piccolo problema… infatti host2 non riconosce l’interfaccia ppp0, questo dipende dalla tabella di routing (argomento che spero di trattare in futuro…)per aggirare questo ostacolo dovete assegnare un default Gatway (nel caso un host non sa raggiungere direttamente l’indirizzo dei pacchetti inviati).Per assegnare tale gatway digitate il comando:

host2# route add default gw 192.168.0.1

per controllare se è stato assegnato in modo corretto digitate:

host2# route

Se come output vedete quanto segue allora è tutto ok:

kernekl IP routing table
destination gatway genmask iface
192.168.0.0 * 255.255.255.0 eth0
default 192.168.0.1 0.0.0.0 eth0

Ora ripetete il comando host2# ping -c 3 110.10.11.12, noterete che i tre pacchetti inviati sono stati ricevuti correttamente.

Ricapitoliamo quanto fatto fin quì:

1) avete configurato le due interfaccie eth0
2) su host1 avete anche l’interfaccia ppp0 (connessione internet)
3) su host2 avete assegnato un default gatway (per l’invio di pacchetti aventi come destinazione un indirizzo pubblico, cioè non appartenente alla rete privata)

L’ultimo ostacolo che vi rimane è quello di permettere ad un host con ip privato ( nel vostro caso 192.168.0.2) di essere raggiunto da un echo-reply (risposta ad un ping) avente come ip un indirizzo pubblico.Infatti dovete sapere che un pacchetto con ip privato al di fuori della propria rete non ha nessun valore, di conseguenza verrà perso sicuramente.
Dovete fare in modo che un pacchetto inviato da host2 (con ip privato) raggiunga internet con un ip pubblico ci viene in aiuto il firewall Netfilter di linux conosciuto anche come iptables (iptables è il comando).Infatti ci permette di mascherare l’ip privato di host2 con l’ip pubblico dell’interfaccia ppp0 di host1 in questo modo potete navigare anche con host2.
Ovviamente il compito di host1 non è solo quello di mascherare l’ip dei pacchetti in uscita ma deve fare in modo che host2 riceva i pacchetti provenienti da una rete esterna, faccio un semplice esempio; se da host2 invio un ping ad un host in internet host1 deve essere in grado di ricevere la risposta echo-reply e di inoltrarla ad host2( spero di essere stato chiaro).
Digitate il seguente comando:

host1# iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Di default linux non permette il Forward (inoltro) dei pacchetti da un’interfaccia all’altra quindi dovete digitare il comando:

host1# echo 1 > /proc/sys/net/ipv4/ip_forward

Dando il valore 1 avrete il forward dei pacchetti.Per verifica digitate il comando:

host2# ping -c 3 66.102.9.104 ( è quello di google il primo che mi è venuto in mente…)

come output avrete:

PING 66.102.9.104 (66.102.9.104): 56 data bytes
64 bytes from 66.102.9.104: icmp_seq=1 ttl=64 time=0.2 ms
………………..
………………..
3 packets trasmitted, 3 packets received, 0% packets loss

Se provate a digitare il comando:

host2# ping www.google.com

come output avrete:

ping: unknown host www.google.com

Azzz…. ma come ora non funziona più? No.. no.. non è questo, dipende tutto dal fatto che su host2 non è attivo il servizio DNS ( trasforma tutti gli indirizzi numerici in alfanumerici e viceversa).
Per risolvere questo problema dovete dare un’occhiata al file /etc/resolv.conf con il comando:

host1# cat /etc/resolv.conf

poi fate una copia di questo file in tutti gli host della vostra rete privata, ora digitate di nuovo il comando ping www.google.com e vedrete che tutto funziona….

Per ora ho finito vi auguro buon lavoro……

By Jurus

Articolo tratto dalla vecchia crew xploit-team.org

Modulo di criptografia in php – Php Cryptography module in php

March 1st, 2008


Bayeroo’ ha di recente pubblicato su sourceforge.net al seguente indirizzo: http://sourceforge.net/projects/phpcryptfunctio/ uno script di crittografia dati avanzato completamente realizzato in php, lo scopo di questo script è quello di contribuire a rendere sicure le informazioni che transitano nei siti web, in particolare lo script è adatto per: Cifrare il contenuto dei databases, cifrare files sul server, creare un algoritmo di hash personalizzato e resistente agli attacchi.

Gli ultimi standard per la creazione di codici di hash come ad esempio il sorpassato md5 hanno manifestato una certa debolezza in tema di sicurezza e resistenza, alcuni istituti informatici hanno dichiarato di poter decifrare uno di questi hash in pochi giorni, utilizzando sistemi informatici complessi. Colpa forse del passare del tempo, basta visitare il sito web http://www.md5oogle.com/ per rendersi conto di quanto sia semplice decifrare un md5 hash code..

Per chi non lo sapesse un codice hash è un codice univoco associato ad una stringa o ad un file, solitamente questo codice è di una lunghezza ben prefissata e nell’ambito della sicurezza informatica un algoritmo di hash è anche utile per mascherare una password all’interno di un database. Per esempio facciamo finta di dover salvare la password “pippo” su un database. Se si salvasse la password “pippo” cosi com’è digitata dall’utente che vuole associare al suo account questa password un eventuale bug del sistema renderebbe subito visibile qualsiasi password salvata.
Per ovviare a questo problema solitamente si salva l’hash della password nel database, generabile tramite la funzione dell’algoritmo di hash, ad esempio la funzione standard md5(”pippo”) restituisce: 0c88028bf3aa6a6a143ed846f2be1ea4
Se l’algoritmo md5 fosse sicuro, non ci sarebbe nessun problema, difficilmente un cracker potrebbe risalire alla password pippo con un algoritmo sicuro, ma si parla di md5, basta quindi digitare “0c88028bf3aa6a6a143ed846f2be1ea4″ nel sito md5oogle per avere come d’incanto la password in chiaro pippo!

Lo script pubblicato da Bayeroo’ contiene un esempio su come generare un algoritmo di hash personalizzato in questo caso generato tra la combinazione di 4 algoritmi (xXx_Crypter di Bayeroo’, crc32, md5, sha-1): questo algoritmo può essere segreto, sicuro e con nessuna tecnica provata per attaccarlo, visto che per modificarlo radicalmente basta ben poco.

All’indirizzo http://www.bayeroo.com/Crypter_Hash/ c’è una semplice pagina di prova dell’algoritmo, si può provare a generare l’X_Hash di “pippo”, si noterà una stringa del tipo: 87fshMm7VOU5uQG741t2J8M+kiF+HBoDjX0/MUqKn+B45Gb1KwbrbnPd8gkq9Jepoif38kNVhLM=

Ma questo algoritmo non è pensato solo come generatore di hash, è utile come detto in precedenza per cifrare qualsiasi informazione.
I vantaggi principali di questo algoritmo sono:
-E’ direttamente utilizzabile tramite un modulo php, non c’è bisogno di nessun operazione complessa sul server.
-E’ Personalizzabile in quanto Open Source, secondo le disposizioni della licenza GPL
-E’ Software libero

L’unico requisito richiesto dal server è quello di avere nel file php.ini l’opzione “allow_call_time_pass_reference = On”
Includendo lo script in una qualsiasi pagina si avranno a disposizione le seguenti funzioni:

$String = X_Crypt_String($String, $Password, TRUE); // Cifra una stringa

$String = X_DeCrypt_String($String, $Password, TRUE); // Decifra una stringa

X_Crypt_File($Input_Filename,$Output_filename, $Password, TRUE) //Cifra un file ( Restituisce false in caso di errori )

X_DeCrypt_File($Input_Filename,$Output_filename, $Password, TRUE) //DecryptFile ( Return false if any problem )

X_Hash( $Input_String ) //Restituisce l’X_hash di una stringa

Descrizione dei parametri
// Parametri : $String ====> Stringa di Input
// $Password ====> Stringa Password
// $Input_Filename ====> Input File
// $Output_filename ====> OutPut File
// Boolean value ====> ‘TRUE’ per abilitare il Base64 encode

Questo algoritmo è disponibile anche in C++ per windows e linux, non appena possibile partirà un nuovo progetto open source dedicato.

Articolo realizzato da:
Ugo Cirmignani
Analista Programmatore (Roma)

http://www.italia-amici.com/

March 1st, 2008


Bayeroo’ è lieta di presentarvi la nuova community online: htt://www.italia-amici.com!

Tra i servizi offerti dal sito web:

- Scambio contatti messenger
- Scambio contatti yahoo
- Scambio contatti icq
- Scambio E-Mail
- Creazione di profili dettagliati fino a 12 foto
- Possibilità di cercare profili anche in base a preferenze sessuali, luogo, regione, sesso e molto altro!
- Servizio di messaggeria per tenersi sempre in contatto con i propri amici
- Chat Italia per discutere di qualsiasi argomento e conoscersi meglio
- Forum per parlare degli argomenti più interessanti
- E presto sempre nuovi servizi! In conclusione è un sito completamente gratuito ed offre servizi interessanti al pari di molte altre community a pagamento!

Lo scopo di italia-amici è quello di offrire servizi di qualità, a costo zero sul tema di incontri, amicizia e scambio di contatti messenger!

Registratevi subito il servizio è completamente gratuito!