Ponad 14 000 kondensatorów wygląda tak:


Poniżej na dwóch zdjęciach po 500 szt. kondensatorów elektrolitycznych SMD na 16V i 50V.
Kondensatory te, najczęściej wykorzystuję do zasilania układów. Uzupełniam je kondensatorami elektrolitycznymi o niskim ESR, oraz tantalowymi.

Ta sama pojemność, lecz mniejszy krążek to kondensatory na 16V a większy to kondensatory na 50V. Te o mniejszym napięciu stosuje za stabilizatorem, a za mostkiem prostowniczym te o większym napięciu.

1 000 kondensatorów elektrolitycznych SMD na 50V.


2 000 kondensatorów ceramicznych 100nF SMD 0805. Te kondensatory wykorzystuję najczęściej.

10 000 kondensatorów ceramicznych 100nF 50V THT.

 Pięć pudełek po dwa tysiące kondensatorów THT:



XBee (MaxStream; Digi International) - EEE 802.15.4

XBee to modem bezprzewodowy z interfejsem szeregowym. Pozwala przesyłać dane z prędkościami od 1200 do 230400 bitów na sekundę w paśmie 2.4 Ghz. Prostota implementacji gotowego modułu okupiona jest jego ceną, ale za to komunikacja i podłączenie fizyczne jest uproszczone do maksimum. Moduły pracują w standardzie IEEE 802.15.4, który to opisuje bezprzewodowe sieci osobiste o niskiej przepustowości.

Moduły Xbee XB24, które widać na poniższych zdjęciach, występują w odmianach zwykłej i PRO. W sprzedaży znajduje się wiele układów różniących się: rodzajem anteny, wersją modelu, zasięgiem, prędkością, itp.

 Płytki developerskie zapewniające interface RS232 i USB, oraz moduły XBee XB24.

 Płytka z interface USB: dane i zasilanie jednym przewodem. Widać diody sygnalizacyjne i przyciski, które można wykorzystać przy testach konfiguracji.

Płytka z interface RS232 i gniazdem zasilania.


Moduły występują z różnymi antenami, a co za tym idzie różnią się też zasięgiem:
 Płytka z anteną "chip antenna" - nie wiem czy istnieje jakieś dobre polskie tłumaczenie.

Antena z kawałka drutu, zapewne o długości zbliżonej do 31,2mm bo tyle wynosi 1/4 fali 2.4GHz.

Moduł ze złączem U.FL.

 ... i odpowiednia antena do modułu ze zdjęcia powyżej.

By uniknąć zwarcia warto zamocować płytki z modułami. Jeden moduł zasilam z USB, a drugi z akumulatorka. 


Moduły trzeba podłączyć pod firmowy program XCTU (X-CTU) by sprawdzić, czy wszystkie moduły posiadają jednakową, najlepiej najnowszą, wersję firmware. Wygląd starszej wersji programu był dla mnie czytelniejszy.

Wybór urządzenia XBee podłączonego do komputera.

Gdybym odzyskiwał komunikację z modułem to wybrał bym dla posiadanych modułów następująca konfigurację.

W modułach mam skonfigurowaną większą prędkość transmisji i taką też ustawiam. 

Część konfiguracji modułu XBee. 

Sprawdzam, czy każdy moduł ma identyczną wersję firmware. 

 Jeśli jakiś moduł - jak na zdjęciu powyżej - ma inną wersję to go uaktualniam.

 Proces uaktualnienia firmware. Z zasady przeprowadzam taką operację na laptopie lub na komputerze z UPS (jeden z modułów zasilam w tym wypadku z USB, a drugi z akumulatorka)


 Przykładowe ustawienia minicom ( xminicom -oD /dev/ttyUSB1)
.
Przykładowe ustawienia minicom, cdn.

Moduły mogą pracować w dwóch topologiach sieci IEEE 802.15.4: 
1) Gwiaździstej (mesh). Komunikacja odbywa się przez koordynatora, a sieci pracujące na danym obszarze są niezależne od siebie, dzięki stosowaniu unikalnych identyfikatorów sieci.
2) Partnerskiej (multipoint). Komunikacja może odbywać się bezpośrednio pomiędzy urządzeniami, z pominięciem koordynatora. Można budować skomplikowane sieci, a komunikaty przekazywać do urządzeń znajdujących się poza zasięgiem nadawcy, z wykorzystaniem innych urządzeń (realizuje się to w warstwie sieci, czyli poza 802.15.4)

Komunikację z modułami można zrealizować również na dwa sposoby:
1) Z użyciem trybu transparentnego (tryb domyślny).
2) Z użyciem trybu API.
Można zdalnie przekazywać zmianę stanu wejść i ADC. 


***


Poniżej zamieszczam konfigurację trybu transparentnego, multipoint, z uproszczonym adresowaniem i przekazywaniem danych pomiędzy portami UART. Urządzenia można skonfigurować np. takimi komendami (w dokumentacji XBee te opcje są dokładnie opisane):

Urządzenie 1:
ce=0
a1=0
id=100
ch=b
my=1
dh=0
dl=2

Urządzenie 2:
ce=0
a1=0
id=100
ch=b
my=2
dh=0
dl=1
I to wszystko :-)


***


Poniżej publikuję ważniejsze fragmenty aplikacji realizującej wyszukiwanie innych stacji i odczyt stanu portów wejściowych i ustawianie stanu portów wyjściowych (programy pod FreeBSD i Windows). Nie umieszczę całego kodu, ponieważ te moduły wykorzystywane są na niektórych uczelniach w celach dydaktycznych. By uszanować wykładowców podaję wędkę, nie rybę :-) Przestrzegam też przed bezmyślnym kopiowaniem - wykładowcy, przynajmniej znani mi, zorientują się natychmiast :-)
Zachęcam do dokładnego zapoznania się z dokumentacją układów , która jest wykonana na wysokim poziomie.

Wersja FreeBSD:
#include <fcntl.h>
#include <termios.h>
#include <iostream>


void czekaj(const int sekundy, const int setne);
void openPort(int &portCom, struct termios &optCom, const char *portx);
void ustawPort(const int &portCom, struct termios &optCom, const int ustawCzas);
void wewy_ppp(const int &portCom);
void wewy(const int &portCom, const char *komenda, const int kdl, char *wynik, const int wdl);
void wewy_nd(const int &portCom, char *wyborDL);
bool wewy_przycisk(const int &portCom);
bool wewy_wyswietl(const int &portCom, const bool test);



int main(int argc, char *argv[])
{
int portCom,
licznik;
bool przycisk = false,
dioda = false,
dioda_znacznik = false;
char wyborDL[22] = {0};
struct termios optCom;
const int   kCzas  = 2,
   kCzas2 = 5,
   dCzas  = 20;

char  k_OK[] = {"OK"};
char  k_CH[] = {"ATCH=F\r"}; //kanal radiowy
char  k_DH[] = {"ATDH=0\r"}; //ustawia: Destination Address High
char  k_CN[] = {"ATCN\r"}; //koniec trybu command
char  k_CT[] = {"ATCT=0x64\r"}; //timeout dla trybu command
char  k_ID[] = {"ATID=3332\r"}; //ustawia: ID (Pan ID)
char  k_ATDL[] = {"ATDL "};
char  k_r[] = {"\r"};

char  port0[] = {"/dev/cuaU0"};
char  port1[] = {"/dev/cuaU1"};

char  k_NI[17] = {0};
char  k_MY[17] = {0};
char  k_DL[17] = {0};
char  portX[15] = {0};

char  k_NI_1[] = {"ATNI Stacja1\r"};
char  k_MY_1[] = {"ATMY=111\r"};

char  k_NI_2[] = {"ATNI Stacja2\r"};
char  k_MY_2[] = {"ATMY=222\r"};

    if(argc==1)
    {
printf("Nie podano parametrow w wywolaniu programu.\n");
return(129);
    };

    if(argc>2)
    {
printf("Za duzo parametrow, maksymalnie podaj jeden parametr (np.: -h)\n");
return(130);
    };

    switch (*argv[1])
    {
case 'v':
   printf("Versja 1.9\n");
   return(131);
case 'h':
   printf("Poprawne wywolanie programu: zad01 <numer portu 0 lub 1>\n");
   return(132);
case '0':
   strcpy(k_NI, k_NI_1);
   strcpy(k_MY, k_MY_1);
   strcpy(portX, port0);
   break;
case '1':
   strcpy(k_NI, k_NI_2);
   strcpy(k_MY, k_MY_2);
   strcpy(portX, port1);
   break;
    };

    srand(time(0));
    openPort(portCom, optCom, portX);
    // konfiguracja XBee   
    ustawPort(portCom, optCom, kCzas);
    wewy_ppp(portCom);
    wewy(portCom, k_CH, sizeof(k_CH), k_OK, sizeof(k_OK)); //ATCH
    wewy(portCom, k_NI, sizeof(k_NI), k_OK, sizeof(k_OK)); //ATNI
    wewy(portCom, k_MY, sizeof(k_MY), k_OK, sizeof(k_OK)); //ATMY
    wewy(portCom, k_ID, sizeof(k_ID), k_OK, sizeof(k_OK)); //ATID
    wewy(portCom, k_DH, sizeof(k_DH), k_OK, sizeof(k_OK)); //ATDH
   
    wewy(portCom, k_CT, sizeof(k_CT), k_OK, sizeof(k_OK)); //ATCT
    wewy(portCom, k_CN, sizeof(k_CN), k_OK, sizeof(k_OK)); //ATCN
   
    wewy_ppp(portCom);

    ustawPort(portCom, optCom, dCzas);
    
    strcpy(k_DL, k_ATDL); 
    strcat(k_DL,wyborDL);
    strcat(k_DL, k_r);

    // ustawiam adres DL
    ustawPort(portCom, optCom, kCzas);
    wewy_ppp(portCom);
    wewy(portCom, k_DL, sizeof(k_DL), k_OK, sizeof(k_OK)); //DL

    ustawPort(portCom, optCom, kCzas2);

    for (licznik=0; licznik<21; licznik++)
//    while (true)
    {
wewy(portCom, k_CN, sizeof(k_CN), k_OK, sizeof(k_OK)); //CN
// sprawdza czy przyszla komenda wyswietl
dioda = wewy_wyswietl(portCom, przycisk); 
wewy_ppp(portCom);
if (dioda)
{
    
   dioda_znacznik = true;
}
else
{
   if (dioda_znacznik)
   {
dioda_znacznik = false;
   };
};

// sprawdza nacisniecie przycisku
przycisk = wewy_przycisk(portCom); 
    };
    
    close(portCom);
    printf("Koniec programu.\n");
};




void czekaj(const int sekundy, const int setne)
// jednostka = 10ms
{
timespec    czas,
   czasPozostaly;

    czas.tv_sec = sekundy;
    czas.tv_nsec = (long)10000000 * setne;

    nanosleep(&czas,&czasPozostaly);
};




void openPort(int &portCom, struct termios &optCom, const char *portx)
{
    portCom = open(portx, O_RDWR | O_NOCTTY | O_NDELAY);
    if (portCom < 0) {perror(portx); return; }
    fcntl(portCom, F_SETFL, 0);

    tcgetattr(portCom, &optCom);

    cfsetispeed(&optCom, B9600);
    cfsetospeed(&optCom, B9600);

    optCom.c_cflag |= (CLOCAL | CREAD);
    optCom.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
    optCom.c_oflag &= ~OPOST;

    tcsetattr(portCom, TCSANOW, &optCom);
};




void ustawPort(const int &portCom, struct termios &optCom, const int ustawCzas)
{
    optCom.c_cc[VMIN]  = 0;
    optCom.c_cc[VTIME] = ustawCzas;
    tcsetattr(portCom, TCSANOW, &optCom);
};




void wewy_ppp(const int &portCom)
{
char bufor[255]; 
char *bufptr;    
int   rbytes;       
int   proba;       

    czekaj(1,20);
    for (proba = 0; proba < 12; proba++)
    {
if (proba > 0)
{
   if (proba>2)
   {
czekaj(1,0);
   };
}
else
{
   printf("Wysylam do modemu: +++\n");
};

write(portCom, "+++", 3);
czekaj(1,20);
write(portCom, "AT\r", 3);

bufptr = bufor;

while ( (rbytes = read(portCom, bufptr, bufor + sizeof(bufor) - bufptr - 1)) > 0 )
{
   bufptr += rbytes;
   if (bufptr[-1] == '\r')
break;
};

if ( strncmp(bufor, "OK", 2) == 0 )
{
   bufor[3]='\0';
    
   return;
};
    }

    printf("Koncze program, nie moge wyslac: '+++'.\n");   
    abort();
};




void wewy(const int &portCom, const char *komenda, const int kdl, char *wynik, const int wdl)
{
char bufor[255],  
    *bufptr;     
int  rbytes,
    proba;       

    for (proba = 0; proba < 4; proba ++)
    {
if (proba > 0)
{

}
else
{
    
};

if (write(portCom, komenda, kdl) < kdl)
   continue;

bufptr = bufor;

while ( (rbytes = read(portCom, bufptr, bufor + sizeof(bufor) - bufptr - 1)) > 0 )
{
   bufptr += rbytes;
   if (bufptr[-1] == '\r')
break;
};

*bufptr = '\0';
wynik[wdl] = '\0';       

if ( strncmp(bufor, wynik, wdl-1) == 0 )
{
   
   return;
};

wewy_ppp(portCom);
    };
};




void wewy_nd(const int &portCom, char *wyborDL)
{
char bufor[255]={0},
  *bufptr,      
  *spis[20][5];
int   rbytes,    
  nrWpisu=0,
  nrPola=0,
wybor,
znacznik0D=0,
  licz;

    for (int i=0; i<20; i++)
    {
for (int j=0; j<5; j++)
{
   spis[i][j] = new char[22];        
};
    };

    for (licz=0; licz<7; licz++)
    {
bufptr = bufor;
while ( (rbytes = read(portCom, bufptr, 1)) > 0 )
{
   if ( (*bufptr==10) and (znacznik0D>0) )
   {
printf("======\n");
znacznik0D++;
   }
   else
   {
    if (*bufptr==10)
{
   znacznik0D++;
   if (bufptr != bufor+1)
   {
*bufptr = '\0';
printf("-- %s\n", bufor);

strcpy(spis[nrWpisu][nrPola], bufor);
bufptr = bufor;
if (nrPola==4)
{
   nrPola=0;
   if (nrWpisu==19)
   {
printf("Przekroczono zakres tablicy.\n");
abort();
   }
   else
   {
nrWpisu++;
   };
}
else
{    
   nrPola++;
};
   };
}
else
{
   znacznik0D=0;
   bufptr++;
};
   };
};
if (nrWpisu>0)
{
   break;
}
else
{
   
   czekaj(1,0);
};
    };

    if(nrWpisu==0)
    {
printf("Koncze dzialanie programu.\n\n");
abort();
    };

  
    for (int i=0; i<nrWpisu; i++)
    {
printf(" nr. %i: %s NI=%s\n",i+1, spis[i][4],spis[i][0]);
    };

    do
    {
if ( !scanf("%d",&wybor) )
{
   std::cin.clear();
   std::cin.ignore(10, '\n');
};
    }
    while ( wybor<1 or wybor>nrWpisu);
//    while ( !(wybor>0 and wybor<nrWpisu+1));
    
    strcpy(wyborDL, spis[wybor-1][0]);
    
   

    for (int i=0; i<20; i++)
    {
for (int j=0; j<5; j++)
{
   delete spis[i][j];
};
    };
};




bool wewy_przycisk(const int &portCom)
{
char bufor[255],
     *bufptr;     
int  rbytes,
     proba;       

    for (proba = 0; proba < 4; proba ++)
    {
if (proba > 0)
{
    
}
else
{
   
};

if (write(portCom, "ATIS\r", 5) < 5)
   continue;

bufptr = bufor;
while ( (rbytes = read(portCom, bufptr, bufor + sizeof(bufor) - bufptr - 1)) > 0 )
{
   bufptr += rbytes;
};

*bufptr = '\0';
if ( (bufor[6]=='0') and (bufor[7]=='0') and (bufor[8]=='0') )
{
   return(true);
}
wewy_ppp(portCom);
    };
    return(false);
};




bool wewy_wyswietl(const int &portCom, const bool test)
{
char bufor[255],
        *bufptr,
komunikat[] = {'*','G','R','1','*'};     
int rbytes,
komunikatDl = 5,
licznik;    

    if (test) 
    {
for (licznik=0; licznik<8; licznik++)
{    
   write(portCom, komunikat, komunikatDl);
   czekaj(0,25);
};
    };

    bufptr = bufor;

    while ( (rbytes = read(portCom, bufptr, bufor + sizeof(bufor) - bufptr - 1)) > 0 )
    {
bufptr += rbytes;
    };

    if (test) 
    {
   write(portCom, komunikat, komunikatDl);
    };

    *bufptr = '\0';

    if ( strncmp(bufor, komunikat, komunikatDl) == 0 )
    {



if (test) 
{
   write(portCom, komunikat, komunikatDl);
};

for (licznik=0; licznik<3; licznik++)
{    
   if (test) 
   {
czekaj(0,50);
write(portCom, komunikat, komunikatDl);
   };
};

return (true);
    };
    
    czekaj(0,(rand()%25));

    if (test) 
    {
   write(portCom, komunikat, komunikatDl);
    };

    return (false);
};


//end



Wersja Windows:

#include <windows.h>
//#include "stdio.h"
#include "string.h"
//#include <stdio.h>
//#include <iostream>
//#include <iomanip>
//#include <list>
//#include <time.h>
//#include <windows.h>
//#include <conio.h>
//#include <stdlib.h> 
//#include <cstdio>
//#include <ctime>
//#include <iostream> 
//#include <stdio.h>



char * k_OK = {"OK"};

char * k_ppp = {"+++"};
char * k_ppp_spr = {"OK"};

char * k_ATCT = {"ATCT=64"};
char * k_ATCT_spr = {"ATCT=64"};


//NAZWA
char * k_ATNI_1 = {"ATNI Unit1"};
char * k_ATNI_spr_1 = {"ATNI"};
char * k_ATNI_2 = {"ATNI Unit2"};
char * k_ATNI_spr_2 = {"ATNI"};


//KANAL
char * k_ATCH = {'A','T','C','H','=','B',13,0};
char * k_ATCH_spr = {"ATCH,",13};

char * k_ATDH = {"ATDH=0"};
char * k_ATDH_spr = {"ATDH"};


char * k_ATMY_1 = {"ATMY=1357"};
char * k_ATMY_spr_1 = {"ATMY"};

char * k_ATDL_1 = {"ATDL=2468"};
char * k_ATDL_spr_1 = {"ATDL"};


char * k_ATMY_2 = {"ATMY=2468"};
char * k_ATMY_spr_2 = {"ATMY"};

char * k_ATDL_2 = {"ATDL=1357"};
char * k_ATDL_spr_2 = {"ATDL"};



//KONIEC
char * k_ATCN = {"ATCN"};
char * k_ATCN_spr = {""};



HANDLE portCOM;    
DCB dcb;        
BOOL fSuccess;  
BYTE RS_buf;    
DWORD RS_ile;   
COMMTIMEOUTS ustawCOM={0, 0, 0, 0, 0};

int licznik_komunikatow = 0;
const byte czekaj_1   = 1;
const byte czekaj_10  = 10;
const byte czekaj_100 = 100;


void czekaj(byte czekaj)
// jednostka = 10ms
{
int i;
for (i = 0; i < czekaj; i++)
{
Sleep(10);
}
}


void rs_otworz_urzadzenie()
{
//port COM1 z prawami RW
portCOM = CreateFile( TEXT("COM1"), GENERIC_READ | GENERIC_WRITE,
0,    // exclusive access
NULL, // default security attributes
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (portCOM == INVALID_HANDLE_VALUE)
{
printf("Open - blad %d.\n", GetLastError());
}
}


int rs_ustaw_parametry()
{
int blad;
blad = GetCommState(portCOM, &dcb);
if (!blad)
{
printf ("GetCommState - blad %d.\n", GetLastError());
return 2;
}

dcb.BaudRate = CBR_9600;     
dcb.ByteSize = 8;             
dcb.Parity = NOPARITY;        
dcb.StopBits = ONESTOPBIT;    

blad = SetCommState(portCOM, &dcb);
if (!blad)
{
printf ("SetCommState - blad %d.\n", GetLastError());
return 3;
}
}


int rs_znak_pisz(char znak)
{
int blad;
RS_buf=znak;
printf("%c",znak);
ustawCOM.ReadTotalTimeoutConstant=0;
    blad = WriteFile( portCOM, &RS_buf, 1, &RS_ile, 0);
    if (!blad)
    {
    
      return 4;
    }
}


char rs_znak_czytaj()
{

}



void pisz_raw(char *wyslij, char *odczytaj, byte czekaj_przed, byte czekaj_pomiedzy, byte czekaj_po, byte ilosc_powt)
// string do wyslania, 
// string, ktory ma zwrocic urzadzenie
// czekaj przed wyslaniem w ms
// czekaj pomiedzy powtorzeniami wyslania w ms
// czekaj po wyslaniu w ms
// ilosc prob powtorzen operacji
{
int i;

//czekaj(czekaj_przed);

int len = strlen(wyslij);
for (i = 0; i < len; i++) 
{
//printf("%c",wyslij[i]);
rs_znak_pisz(wyslij[i]);

}


czekaj(czekaj_po);
}


void pisz(char *wyslij, char *odczytaj, byte czekaj_przed, byte czekaj_pomiedzy, byte czekaj_po, byte ilosc_powt)
{
}



char czytaj(int czekaj_max)
//jak dlugo ma czekac na znaki
{
int blad;
int testuj=1;

   while(testuj!=0)
   {         
czekaj(10);
  testuj--;

ustawCOM.ReadTotalTimeoutConstant=1100;

SetCommTimeouts(portCOM,&ustawCOM);
 
       
 
     
        //if(RS_ile==1)
       // {

          //  if(RS_buf == )
           // {
               
           //     testuj=0;
           //     break;
          //  };
//            printf("%c", RS_buf);
            printf("%s", &RS_buf);
FlushFileBuffers(portCOM);

      //  }
   }

}


void xbee_ustaw_parametry_stanowisko_1(void)
{
}


void xbee_ustaw_parametry_stanowisko_2(void)
{
}


void xbee_ustaw_parametry(void)
{
    xbee_ustaw_parametry_stanowisko_1();
}


int main()
{
    rs_otworz_urzadzenie();
    rs_ustaw_parametry();

//+++

   czekaj(110);
   czytaj(1);
   czekaj(5);
printf ("\n");

printf ("\n");
 czytaj(1);
   czekaj(5);

/*
//ATCH=B
pisz_raw(k_ATCH, k_ATCH_spr, 110, 120, 10, 100);
czytaj(1);
czekaj(10);
printf ("\n");
*/
/*
pisz_raw(k_ATCH_spr, k_ATCH_spr, 110, 120, 10, 100);
czytaj(1);
czekaj(10);
printf ("\n");
*/


//pisz_raw(k_ENTER, k_ENTER, 110, 120, 10, 100);
//pisz_raw(k_ATCH_spr, k_ATCH_spr, 110, 120, 10, 100);
//   czytaj(1);
//   czekaj(10);
//ATNI Unit1
//pisz_raw(k_ATNI_1, k_ATNI_spr_1, 110, 120, 10, 100);
//   czytaj(1);

//ATCH=B
//pisz_raw(k_ATCH, k_ATCH_spr, 110, 120, 10, 100);
//   czytaj(1);

//ATDH=0
//pisz_raw(k_ATDH, k_ATDH_spr, 110, 120, 10, 100);
//   czytaj(1);

//ATMY=1357
//pisz_raw(k_ATMY_1, k_ATMY_spr_1, 110, 120, 10, 100);
//   czytaj(1);

//ATDL=2468
//pisz_raw(k_ATDL_1, k_ATDL_spr_1, 110, 120, 10, 100);
//   czytaj(1);

printf ("\n");
system("pause");
return (0);   
}

//END


***


Użyłem adapterów:
- Z interface RS232: XBIB-R-DEV
- Z interface USB: XBIB-U-DEV



Heartbeat - nadmuchana bańka.

W sieci przez chwilę zapanowała histeria! Podważano nawet sens istnienia wolnego oprogramowania... tak...
Jednocześnie jakoś bez większego echa przeszła informacja o luce we wszystkich wersjach IE (Internet Explorera) - luce umożliwiającej instalację złośliwego oprogramowania. Wystarczy, że użytkownik IE wejdzie na odpowiednio spreparowaną stronę WWW... Lukę znaleźli ludzie z www.fireeye.com.
Ciekawe czy zostanie wydana poprawka do Windows XP?

Wracając do meritum: błąd nazwany "heartbeat" CVE-2014-0160 znalazł się w implementacji rozszerzenia RFC6520 protokołów TLS/DTLS. Co to oznacza? W ten sposób powinna zostać zabezpieczona transmisja pomiędzy serwerem a klientem. Czyli nie dane przechowywane na serwerach, tylko sama transmisja. 
Błąd jednak pozwalał na kradzież innych danych, niż tylko tych, które ktoś mógłby podsłuchać podłączając się gdzieś pomiędzy nami a np.: bankiem. Lecz kiedy ta kradzież może nastąpić? Tylko wtedy, gdy nie rozdzielamy usług. 
Jeśli wykorzystujemy np. akceleratory SSL, czy to w postaci osobnych maszyn, serwerów proxy na innych maszynach, lub usług obsługujących SSL, ale jako osobne procesy to problem przestaje być ważny, prawda? Szczególnie, jeżeli hasła szyfrujemy i w takiej postaci przesyłamy.

Wystarczy wykorzystać mechanizmy zabezpieczające dostęp do pamięci serwera: usługi uruchomione z prawami różnych użytkowników nie maja dostępu do swoich obszarów panięciu. Czyli prawidłowo wykonana praca administratora zabezpiecza serwer przed heartbeat, ponieważ nie da się odczytać obszarów pamięci np.: z hasłami. Przypominam, że SSL zabezpiecza transmisję, a hasła do aplikacji (lub inne metody potwierdzenia praw) stanowią oddzielny mechanizm.

Pojawiały się enigmatyczne teksty o tym, że błąd dotyczy też poczty elektronicznej. Klienta na pewno nie! Klient (oprogramowanie)  nie jest usługą serwerową, nie nasłuchuje na danym porcie i do tego najczęściej i tak jest ukryty za firewallem. Co z serwerem? Wystarczy stosować odpowiednie oprogramowanie (patrz wiekowy qmail), a bramki email-http potraktować tak samo jak inne serwisy http - obsłużyć ssl na osobnej usłudze/maszynie.
Zresztą jak na razie najlepszym zabezpieczeniem dostępu np.: do poczty jest VPN, ale nie łatwe w konfiguracji wynalazki oparte o SSL, tylko prawdziwe VPN oparte o IPSec. Z tym, że i tu w przypadku nieprawidłowej konfiguracji (i posiadania np.: szybkiej karty grafiki) można znaleźć pewne luki. Dlatego trzeba zatrudniać doświadczonych specjalistów :-)

Jeszcze lepsze rezultaty można uzyskać, wprowadzając w firmie pocztę szyfrowaną technikami asymetrycznymi. Przecież dowolnie zabezpieczona poczta SSL, czy nawet i VPN'em chroniona jest tylko na drodze komputerA-serwer i serwer-komputerB - czyli przed podsłuchem gdzieś na łączach. Mając dostęp na prawach administratora  do serwera poczty mamy dostęp do niezaszyfrowanej poczty. Gdy zastosujemy podpisywanie i szyfrowanie poczty technikami asymetrycznymi zyskujemy:
- Nawet gdy ktoś ukradnie nasze hasło do poczty, lub w inny sposób spróbuje wykorzystać słabość systemu pocztowego, to i tak nie jest w stanie podpisać wiadomości naszym podpisem cyfrowym. Od razu będzie wiadomo, że ktoś próbuje wysłać fałszywą wiadomość.
- Wiadomość odszyfrowana (jawna) będzie dopiero dla odbiorcy i nikt po drodze, w żadnym punkcie, nie będzie mieć dostępu do jej jawnej (nie zaszyfrowanej) treści.

Co do przetrzymywania haseł (i loginów) w pamięci operacyjnej w postaci jawnej. Problem ten już pojawiał się przy okazji użytkowników z prawami administratorów, który to mogli robić zrzuty pamięci serwera i szukać ciągów znaków mogących być hasłami (problem złej administracji serwerem lub nieuczciwych administratorów).
Nic jednak nie stoi na przeszkodzie, by programy trzymały hasła w pamięci operacyjnej zaszyfrowane kluczem aktualnym na czas uruchomienia danej instancji programu. Program uruchamia się, generuje losowy klucz i za jego pomocą szyfruje i deszyfruje hasła pobierane od użytkownika, z bazy danych, itp. Skoro hasło przypominało by inne dane binarne to nie ma można go trywialnie odnaleźć.
Tu oprogramowanie z jawnym kodem ma olbrzymią zaletę - od razu widać, czy ktoś zaimplementował techniki ochrony i czy zrobił to poprawnie.



Cytaty i złote myśli

Niestety, większość ludzi raczej umrze, niż pomyśli…
Bertrand Russell

Nigdy nie rozmawiaj z debilem, bo najpierw sprowadzi cię do swojego poziomu, a potem pokona doświadczeniem.

Świat usłany jest idiotami. Według zasady Pareto 80% populacji to kretyni.

Spotykamy osoby, które są takt tępe, że równie dobrze można byłoby ustawić je w Sèvres jako wzór oporności.

Po śmierci złóżcie mnie twarzą do ziemi.
Żeby wszystkie fałszywe mordy mogły mnie pocałować w dupę!


***

Podczas uroczystości z okazji wieloletniej działalności Franciszka Smolki na stanowisku przewodniczącego parlamentu austriackiego zabrał głos hr. Wojciech Dzieduszycki.
Starożytni Grecy - mówił, trzymając kielich - wierzyli, że nowo narodzone dziecko całuje Muza. Jeśli go ucałuje w czoło, to wyrośnie z niego mędrzec, jeśli w usta lub w oczy - słynny mówca lub znakomity malarz. Gdzież ciebie, dostojny jubilacie, musiała ucałować Muza, skoro od tylu lat zasiadasz na fotelu prezydenta Rady Państwa?

Tytuły relacji z paryskiego dziennika " Monitor " dotyczących marszu Napoleona na Paryż w dniach 1- 20 marca 1815 roku:
"Ludożerca wyrwał się ze swej jaskini..."
"Monstrum spało w Grenoble..."
"Tyran minął Lyon..."
"Uzurpator jest 60 mil od stolicy..."
"Napoleon będzie jutro pod murami miasta..."
"Jego Cesarska Mość wkroczyła do Tuilerii wśród owacji wiernych poddanych."

Fryderyk II przyjmując Woltera w Poczdamie polecił służbie, aby filozofowi nie dano łyżki do zupy. Gdy nalano zupę zawołał:
- Durniem jest ten, kto nie zje zupy!
Wolter wziął kromkę chleba, wydrążył i za jej pomocą zjadł zupę. Następnie rzekł:
- Durniem jest ten, kto nie zje swej łyżki!
Po czym spokojnie zjadł swoją kromkę chleba

***

Ciesz się z małych rzeczy,
te wielkie mogą nie nadejść wcale.

Dzisiaj zrobię to czego innym się nie chce…
Jutro będę mógł zrobić to, czego inni nie będą w stanie.

Jutro nigdy nie nadchodzi. Przecież, gdy się budzimy jest już dziś.

Trzeba się bawić:
Głupcy są wszak na świecie dla naszej uciechy.

Są mądre telefony, są mądre zegarki, mądre lodówki, mikrofalówki i inne gówna, a mądrych ludzi już praktycznie nie robią. 

Chcesz rozgryźć kobietę?
Najłatwiej będzie, gdy zostaniesz kanibalem...

Książki przegrały z Internetem.
Rozmowy przegrały z Internetem.
Seks broni się ostatkiem sił.

Sumienie jest jak chomik:
Albo śpi, albo gryzie...

Z bronią się nie żartuje.
A bez broni - tym bardziej.

Wieloryb pływa cała dobę, je tylko plankton, pije wodę i jest gruby.

Królik biega, skacze, jest wegetarianinem i żyje tylko 8-10 lat.
Żółw nie biega, nie skacze, nigdzie się nie spieszy i żyje 450 lat.

Gdyby chodzenie było zdrowe to listonosze byli by nieśmiertelni.

Najstraszniejsza bestia na świecie?
Kobieta na diecie. Przed miesiączką. Rzucająca palenie...

Jestem na dwóch dietach. Na jednej czułem się głodny.

- Co to jest Pingwin?
- Jaskółka, która jadła po 18.

Wylądowali obcy na Ziemi, zorientowali się trochę co i jak, w końcu pytają naukowców:
- Wy wysyłacie jakieś sygnały w kosmos?
- Tak.
- A czemu nie SOS?!

Kiedy jesteś martwy, to nie wiesz, że jesteś martwy. Stanowi to problem tylko dla innych.
Kiedy jesteś głupi, jest dokładnie tak samo.

Jeśli jesteś bardzo wybredny w kwestii audio, to postaraj się, aby Twój przedwzmacniacz był zasilany prądem z elektrowni wodnej, wówczas dźwięk jest głęboki i rozlewa się szeroko. Prąd z elektrowni słonecznej daje dźwięk jasny i gorący, a z elektrowni węglowej słychać, że "góra" jest nieco przydymiona ...
(Rzuuf)

W teorii nie ma różnicy między praktyką, a teorią. W praktyce jest.

Uśmiechaj się. To zmusi ludzi do zachodzenia w głowę, co takiego knujesz.

Denerwować się to mścić się na własnym zdrowiu za głupotę innych.

Można zrobić wszystko, ale nie można zostawiać po tym śladów.

Cykl życia systemu Windows:  instalacja -> zamulenie -> powtórzenie cyklu.

Wysocy urzędnicy - to ludzie, którzy za nasze pieniądze kradną nasze pieniądze.

Dziecko może nauczyć dorosłych trzech rzeczy:
- Cieszyć się bez powodu.
- Być ciągle czymś zajętym.
- I domagać się ze wszystkich sił, tego czego sie pragnie.
Paolo Coelho

- Co oglądają w telewizji kobiety, które mają zbyt dużą pupę?
- Ewę Chodakowską.
- A co oglądają faceci, którzy mają zbyt małego penisa?
- Top Gear.

Speaker w Polsacie: przedstawiamy piątą odsłonę, czwartej części, tej trylogii.

Jaja wielozbożowe. (WTF?)

W normalnym kraju:
- Góry są na północy.
- Plaże na południu.
Wobec tego, z definicji, tu nigdy nie będzie normalnie...
(Ja, 2014.04.23)

Dieta cud:
Jem ile chcę...
...i czekam na cud...

Kupiłem inteligentną pralkę. Więcej myśli, niż pierze...

Wzruszyłem się jak stary siennik...
(Marek)

Homo, ledwo sapiens...
(Marek)

Homo, ledwo sapiens... ale sapiens!
(Ja)

Reklama ptasiego mleczka, w białej czekoladzie, podawanego zmrożonego. Komentarz (Ja):
... tłuszczyk na ciepło ma swoje zalety, ale na zimno to nekrofilia...

Jeśli zlitujesz się nad zagłodzonym psem i nakarmisz go, nie ugryzie cię. To jest główna różnica między psem, a człowiekiem.
Mark Twain

Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie.
Albert Einstein

Większość ludzi umiera w wieku 25 lat, ale czekają z pochówkiem aż do siedemdziesiątki. Benjamin Franklin

Źli saperzy nie istnieją.

Niedaleko pada elektryk od kombinerek.

„Najpierw idzie kłamstwo, potem krzywoprzysięstwo, na koniec statystyka”.

Właśnie skończyłem 30 lat.
I wciąż nie wiem kim będę, jak dorosnę.

Facet - dla niego wszystkie sukienki są jednakowe, ale każdy śrubokręt jest inny.

Chłopak mojej córki przyprowadził ją pijaną do domu. Powiedziałem:
- Dzwoń po karetkę!
- Ale ona jest tylko lekko wstawiona.
- To nie dla niej!

"Jeśli masz marzenie, musisz je chronić. Ludzie nie potrafią sami czegoś zrobić, więc mówią, że ty też nie możesz. Jeśli czegoś chcesz, to zdobądź to. Kropka".

Najtańsza rzecz na świecie: życie ludzkie.

Miał rację ten, kto powiedział, że kiedy Bóg chce się zemścić na mężczyźnie, obdarza go córką. Skutek jest taki, że żyje się w ciągłym lęku, iż dziecko napotka na swej drodze kogoś... Kogoś, kto dziwnie przypomina jej ojca, gdy był w tym samym wieku.

Chief nie powinien pić. Jednakże, jeśli jednak pije, to nie powinien się upić.
Jeśli się upije, to nie powinien się zataczać. Jeśli jednak się zatacza, to nie powinien upaść.
A jeśli upadnie, to zasłaniając pagony, by przechodnie myśleli, że to oficer!


***

Zbigniew Herbert, zapytany o stosunek do tradycji, odpowiedział: „Nie straciłem nigdy natury wędrownika, a wędruje się do źródeł. Płynie się zawsze do źródeł, pod prąd, z prądem płyną śmiecie. I czy się dopłynie, czy nie dopłynie, kształci to, wyrabia mięśnie”.

Naród, który traci pamięć, traci sumienie.

Ignorancja ma skrzydła orła i wzrok sowy.

Kiedy się człowiek czymś interesujące, to książki przychodzą do niego. Książka poleca książkę. [...] zawsze ma się większe ambicje niż rezultaty.

Podstawowym obowiązkiem intelektualisty jest myśleć i mówić prawdę. (…) Myśleć to znaczy zastanawiać się nad tym, kim jesteśmy i jaka jest otaczająca rzeczywistość. Oznacza to siłą rzeczy odpowiedzialność za słowo.

Okolicznością łagodzącą jest fakt, że sztuka pochodzi z czasów zamierzchłych.

***

Zawsze znajdą się ludzie, którzy stawać będą na drodze twoim planom. Bez nich nie dostrzegłbyś wielu rzeczy.
Dlatego traktuj przyjaźnie swoich wrogów, ich niechęć wykorzystując dla własnej korzyści i nauki.

Nie oczekuj, że inni zawsze będą się z tobą zgadzać. Z czasem zaczęłoby ci się wydawać, że jesteś nieomylny.
Dlatego szukaj tych i rozmawiaj z tymi, którzy mają własne zdanie i nie obawiają się z tobą nie zgodzić – będziesz mógł się od nich wiele nauczyć.

Nie zaprzyjaźniaj się z nikim tylko dla własnych korzyści. Prędzej czy później obróci się to przeciw tobie.
Dlatego szukaj takich przyjaciół, którzy nie zawsze będą się z tobą zgadzać.

Nie oczekuj życia wolnego od chorób. Jeśli nie doświadczysz cierpienia, nie oprzesz się pokusie arogancji i niemoralności.
Dlatego powinieneś myśleć o swojej chorobie jako dobrym środku, by się zeń uczyć.

Nie oczekuj życia wolnego od trudności. Jeśli nie doświadczysz trudu, staniesz się pyszny i arogancki.
Dlatego czerp mądrość z przeszkód, które podsuwa ci życie.

Nie spodziewaj się łatwego rozwoju. Bez trudności do pokonania twoja nauka zawsze pozostanie niekompletna.
Dlatego traktuj przeszkody jako zwyczajny element codzienności.

Większość planów nie spełnia się łatwo. Gdyby tak było, wszyscy popadlibyśmy w arogancję.
Dlatego ciesz się przeszkodami - to doświadczenia, z których możesz się uczyć.

Nie pomagaj dla nagrody. Jeśli oczekujesz czegoś w zamian, twoja pomoc staje się zwykłą usługą.
Dlatego sam fakt, że komuś pomogłeś, powinien być dla ciebie satysfakcjonujący i wystarczający.

Nie bierz więcej, niż dałeś sam. Duże zyski uzyskane małym kosztem zatrzymają w tobie chęć rozwoju.
Dlatego z pokorą przyjmuj drobne sukcesy, choćbyś nastawiał się na więcej.

Nie stawiaj się w roli ofiary, poszkodowanego. Będziesz wtedy koncentrował się na obwinianiu innych o własne niepowodzenia.
Dlatego ucz się na błędach i porażkach, ale nie szukaj winnych – otworzysz drzwi do samodyscypliny.


***     Z dedykacją, w pamięci:     ***

Każdy człowiek może zbłądzić. Uparcie trwać w błędzie - tylko głupiec.
Cyceron

Lepiej nic nie mówić i wydać się głupim, niż powiedzieć słowo i rozwiać wszelkie wątpliwości.
Mark Twain

Każdy człowiek ma określony horyzont. Gdy ten się zwęża i staje się nieskończenie mały, ogranicza się do punktu. Wówczas człowiek powiada: to jest mój punkt widzenia.
Dawid Hilbert

Mądry zrozumie w lot, głupcowi potrzebny młot.
Talmud

Ot cała bieda. Głupcy są tak pewni siebie, a mądrzy - tak pełni wątpliwości.
Bertrand Russell

Fakt, iż jakiś pogląd jest szeroko rozpowszechniony, nie stanowi żadnego dowodu na to, że nie jest on całkowicie absurdalny.
Jeśli weźmiemy pod uwagę, że większość ludzkości jest zwyczajnie głupia, należy oczekiwać z dużym prawdopodobieństwem, iż powszechnie panujące przekonania będą raczej idiotyczne niż rozsądne.
Bertrand Russell

Jeżeli będę zajmował się tym, co myślą głupcy, nie będę miał czasu na to, o czym myślą ludzie inteligentni.
Éric-Em­manuel Schmitt

Że nikt ci nie powie, żeś głupi, przez to mądrym nie jesteś.
Aleksander Fredro

Chińczycy, Hindusi, a zwłaszcza Japończycy uważają, że przyznanie się do niemożności opanowania matematyki na poziomie szkolnym kompromituje każdego, kto chce uchodzić za światłego człowieka.
Krzysztof Łoziński

Fakt, że meduza przeżyła 650 mln lat bez mózgu daje nadzieję wielu ludziom.

Ignorancja może być skorygowana przy pomocy książki, głupota wymaga strzelby i szpadla.

Snobizm na niewyraźne pisanie da się porównać chyba tylko z szalejącym wśród polskich inteligentów snobizmem na nieznajomość najprostszych zasad matematyki.
"Z matematyki zawsze byłem osłem!" - oświadcza dumnie prawie każdy polski inteligent, co ma w jednej sekundzie przekonać słuchacza, że ów były osioł matematyczny, dziś wyrośnięty i zapewne osioł już do kwadratu, jest w swojej "humanistycznej" dziedzinie jednostką wybitną - która to prawidłowość zdarza się jednak dość rzadko.
Jacek Fedorowicz

Nie wystarczy mieć sprawny umysł, trzeba go jeszcze dobrze używać.
Kartezjusz

Dwa półgłówki to jeszcze nie to samo, co jeden z głową.
Jan Czarny

Urodzić się głupcem to nie wstyd. Wstyd tylko głupcem umierać.
Erich Maria Remarque

Kiedy jestem głupi tolerują mnie, kiedy mam rację, wpadają w gniew.
Johann Wolfgang Goethe

Błąd jest przywilejem filozofów, tylko głupcy nie mylą się nigdy.
Sokrates

Puste beczki i głupcy robią wiele hałasu.
Plutarch 

Człowiek mądry więcej uczy się od swoich wrogów, niż głupiec od przyjaciół.
Benjamin Franklin

Niekiedy ludzie nie rozumieją człowieka nie dlatego, że nie chcą go zrozumieć, lecz dlatego, że są po prostu głupi.
Gogol

Nie licz na układy, gdy nadejdzie moment zdrady.

Swoją drogą jak to jest, że robi się remonty pomieszczeń, ale o remoncie instalacji elektrycznej nikt już nie myśli? To nic, że kogoś może porazić prąd z niesprawnej instalacji. Ważne, że jest nowa tapeta i panele.
O^O

Zainteresowanie sportem... bez uprawiania jakiejkolwiek dyscypliny sportowej, jest jak oglądanie świerszczyków, bez... wiadomo czego :-)
PS: Jedyne odstępstwo od najmniej męskiego zajęcia na świecie jakim jest ćwiczenie palców na pilocie jest wtedy, gdy oglądający założył się o wynik na pieniądze.

Ten, kto nie wie i nie wie, że nie wie, jest głupcem. Unikaj go.
Ten, kto nie wie i wie, że nie wie, jest uczniem. Naucz go.
Ten, kto wie i nie wie, że wie, jest uśpiony. Obudź go.
Ten, kto wie i wie, że wie, jest mędrcem. Naśladuj go.
Julian Tuwim

Religia jest dla mądrych. A jak ktoś jest głupi i jak chce być głupi, nie powinien do tego używać religii, nie powinien religią swojej głupoty zasłaniać.
Józef Stanisław Tischner





Oderit insipiens sapientis verba magistri.



Update: 2016.04.09
Create: 2014.04.24

Kabel antenowy i końcówki kablowe do TV

Zasady są proste:

1) Nie stosujemy nakręcanych końcówek "F". Zamiast nich używajmy zaciskanych końcówek kompensacyjnych (Allegro np.: Tratec, TRS).
Złącze takie nie starci swoich w właściwości przez lata, kabel z niego nie wysunie się, nie zostanie wyrwany. Takie złącze jest również szczelne, co jest krytyczne przy instalacjach zewnętrznych. Wady: cena, oraz do montażu potrzebna jest zaciskarka.

2) Przy większych długościach kabla należy przy zakupie zwrócić uwagę na jego tłumienie. Lepsze kable posiadają izolację spienianą fizycznie, a nie chemicznie (ważne!).

TRISET PROFI 120dB 

Televis T-100 Plus


3) Na zewnątrz układamy kabel przeznaczony do stosowania na zewnątrz... Trywialne, ale izolacja takiego kabla nie popęka od słońca lub mrozu; kabel nie "nasiąknie" wodą.

Kilka słów o antenie TV:



Update: 2014.11.22
Create: 2014.04.24