Jump to content

nedo

Active Members
  • Posts

    2065
  • Joined

  • Last visited

  • Days Won

    11

Posts posted by nedo

  1. Toate datele respective au la baza niste date statistice, de genul, se nasc 10 copii pe secunda, mor 5 oameni pe secunda, se cumpara 5 pachete de tigari pe secunda, smd. Ei nu au facut decat sa puna niste contoare care incrementeaza cifrele respective pe baza acestor statistici. Acelea nu sunt exact cifrele reale ci doar niste aproximari.

  2. Ce spune titlul, si la ce se refera de fapt. Daca vreunul a citit articolul ar observa ca se refera la un numar de aproximativ 500.000-1milion de utilizatori care au calculatoarele infectate cu un troian care schimba dns-urile calculatorului si il face sa se conecteze la alte site-uri.

    Americanii, in "marea lor bunavointa" au inlocuit dns-urile la care se conecta troianul cu dns-urile lor pentru a remedia(cough#spy$cough) utilizatorii infectati. Ceea ce spune in articol este ca vor oprii acele dns-uri si asta inseamna ca cei care au calculatoarele infectate cu troianul respectiv nu vor mai putea sa se conecteze la net pana nu scot virusul si isi seteaza corect calculatorul pentru a se conecta la internet.

    Cititi inainte sa comentati, va rog.

  3. atunci o sa trebuiasca sa faci cativa pasi in plus, deoarece daca ai ip dinamic serverul care ruleaza la victima nu o sa poata sa se conecteze la tine.

    Va trebuii sa iti faci un cont pe no-ip.org si sa iti creezi acolo un dns. Pe calculatorul tau instalezi soft-ul celor de la no-ip si in serverul de la dark-comet setezi ca ip de conexiune dns-ul inregistrat pe no-ip.org. Traficul care vine pe dns-ul respectiv va fi redirectionat catre tine. Ai tutorial pentru asta pe forum, cauta-l.

    Le. Da trebuie bifat module start-up.

  4. Salut, din pacate la hardware nu sunt prea priceput, si am si eu nevoie de parerea voastra.

    In bugetul de 600 ron, placa urmatoare isi merita bani?

    click

    Aveti vreo alta idee tot de la nvidia?

    Eu am o sursa resurbo de 550 wati, din cate am citit e suficient.

    Aveti alta idee?(placa nu va fi folosita numai pentru jocuri, rezolutie maxima 1248x1024, eventual si ceva editare video(daca ma apuc eu sa frate-miu de asa ceva sau pentru hash cracking.)

  5. degeaba in schimba pe Base/Boc/sau oricare ar fi acolo atat timp cat locuitorii acestei tari "stau mai bine la umbra pe 3 lei decat la soare pe 5"(semi citat al unui protestatar). Atat timp cat romanii nu se trezesc nu se schimba nimic. Vrei sa schimbi ceva? Schimba-te pe tine intai. Toata lumea vrea schimbare dar daca e sa il pui la munca zice ca e nasol, ca nu ii convine. Daca lucreaza face o treaba de cacao si zice ca de ce sa traga tare, doar salariu e si el de cacao nu? Cand o sa fim instare sa ne vedem de treaba, cand daca cineva e atacat pe strada nu o sa se mai intoarca capul, cand atunci cand deschizi un pachet de tigari arunci ambalajul la cosul aflat 3 metri mai in fata in loc sa arunci pe jos, abea atunci o sa se schimbe ceva in Romania. Asa ca nu mai da-ti vina pe Romania ca nu va sustine, ca nu va ofera conditii, voi sunteti cei care nu va oferiti conditii, altfel nu ar mai venii atatia straini sa isi inceapa o noua viata la noi de la zero.

  6. In general jocuri, in special MMO-urile sunt nimic altceva decat un "Skinner Box",aici cateva detalii. In principal asta e de fapt dependenta de calculator. Dependenta de a) jocuri, B) alte servicii pe care le poate oferii calculatorul - in general retelele de socializare.

    Dupa cum am explicat mai sus. Dependenta apare atunci cand in timpul utilizarii zilnice a calculatorului au loc actiuni care produc eliberare de endorfina, si nu dopamina cum am spus mai sus. Aia e cu totul altceva(am incurcat hormonii =)) )

    • Downvote 1
  7. Nu am stat sa citesc tot. Da dependenta respectiva exista, vestea buna este ca aproximativ o saptamana de neutilizare a calculatorului rezolva dependenta. Dependenta de calculator este o dependenta psihica, in principiu creierul se obisnuieste si se asteapta sa elibereze dopamina(parca asta era hormonul fericiri) atunci cand faci o activitate la calculator. Dependenta apare deoarece creierului ii place sa se simta bine si incepe sa se astepte la acea eliberare de dopamina zilnic. Asta e de fapt dependenta. Norocul tuturor este ca sevrajul nu are efecte la fel de dure ca alte dependente. (Acestea sunt in general un grad de irascibilitate ridicat). Alte simptome nu am vazut la nici un dependent de calculatoare, si nici nu am citit sa fie altele.

  8. In urma cu ceva timp am facut un mic tutorial pentru conectarea la un fisier ms acces aflat pe hard.

    Tutorialul respectiv aici. La scurt timp am incercat sa fac si o mica clasa pentru a incapsula cateva operatii standard de care aveam eu nevoie atunci si anume insertie si selectie, clasa poate fi gasita aici.

    Problema cu clasa respectiva este ca are un memory leak destul de mare, ea necuratand dupa fiecare statement si conexiune.

    Asa am ajuns la concluzia ca un set mic de functii fiecare cu propria ei conexiune si clean up aferent ar functiona mai bine.

    Mai jos aveti fisierele necesare utilizarii lor cu explicatia pentru fiecare.

    Pentru utilizarea lor aveti nevoie sa legati libraria odbc32 furnizata de compilatorul vostru.

    Pentru codeblocks aceasta este libodbc32.a

    Am incercat sa le comentez pe cat posibil.

    Daca gasiti erori in ele spuneti-mi pentru a le rezolva.

    Nu ar trebuii sa mai existe nici un fel de memory leak in ele deci ar trebuii sa fie destul de sigure in utilizare pentru proiecte simple.

    Aceste clase pot fi folosite atat pentru proiecte cmd cat si gui(eu le folosesc pentru un proiect in wxWidgets fara probleme)

    functii_odbc.h


    #ifndef FUNCTII_ODBC_H_INCLUDED
    #define FUNCTII_ODBC_H_INCLUDED

    #include <iostream>
    #include <string>
    #include <sstream>
    #include <fstream>
    #include <vector>
    #include <windows.h>
    #include <sql.h>
    #include <sqlext.h>


    int select(std::string dns, int numarCampuri, std::string querry, std::vector<std::vector< std::string> >& array, std::string& erroare);
    void getErrors(SQLSMALLINT type,SQLHANDLE handle, std::string& error);
    void freeDbResources(HSTMT& hStmt, HENV& hEnv, HDBC& hDbc);
    int insert(std::string dns, std::string num_Tabel, std::vector<std::string> Campuri, std::vector<std::string> Valori, std::string& error);

    #endif // FUNCTII_ODBC_H_INCLUDED

    functii_odbc.cpp


    #include "functii_odbc.h"
    /**
    * Lista argumente:
    * string dns = adresa fisierului acces mdb/accdb pe hard-disk
    * numarCampuri = numarul de campuri care urmeaza a fi selectate prin querry-ul respectiv
    * vector<vector<string> >& array = este un vector de vectori de stringuri, trimis prin referinta care va contine datele extrase
    * in felul urmator: array[0][0] va fi prima coloana returnata pe primul rand
    * array[0][1] va fi a 2-a coloana
    * array[0][2] va fi a 3-a coloana smd
    * iar array[x][0], x va desemna randul de date extrase
    * string& eroare = va contine mesajele de eroare, in situatia in care apare o eroare in executia functiei sau a querry-ului atunci aceasta va fi salvata in acest string
    * Functia are doar 2 valori de return 1 = succes in executarea querry-ului, sau -1 eroare
    * Functia face doar cateva verificari de baza in privinta corectitudinii querry-ului
    * De asta trebuie sa se asigure utilizatorul inainte
    * Functia va verifica doar daca exista un posibil insert in querry caz in care iese.
    */
    using namespace std;
    int select(string dns, int numarCampuri, string querry, vector<vector<string> >& array, string& erroare)
    {
    if(querry.find("SELECT") == string::npos || querry.find("INSERT") != string::npos)
    {
    erroare = "Nu ai introdus o comanda de select;";
    }
    else
    {
    SQLCHAR valoareCustomers[numarCampuri][128];
    HSTMT querryStmt;
    string tempNume;
    int retCode[numarCampuri];
    HENV hEnv;
    HDBC hDbc;
    RETCODE rc;
    int len = querry.size();
    char szConnStrOut[255];
    int iConnStrLength2Ptr;
    char szDSN[256] = "Driver={Microsoft Access Driver (*.mdb)};DSN='';DBQ=";
    unsigned char* statementQuerry = (unsigned char*)querry.c_str();
    //vStrArray.clear(); // golim vectorul primit ca container de output (este datoria utilizatorului sa se asigure ca nu are nimic important in vector inainte de a fi trimis acestei functii
    strcat(szDSN, dns.c_str());
    rc = SQLAllocEnv(&hEnv);
    if(!SQL_SUCCEEDED(rc))
    {
    erroare = "Nu am putut aloca Envorimentul.";
    cout << "Nu am putut aloca envorimentul.";
    freeDbResources(querryStmt, hEnv, hDbc);
    return -1;
    }
    rc = SQLAllocConnect(hEnv, &hDbc);
    if(!SQL_SUCCEEDED(rc))
    {
    erroare = "Nu am putut aloca conexiunea.";
    cout << "Nu am putut aloca conexiunea.";
    freeDbResources(querryStmt, hEnv, hDbc);
    return -1;
    }

    rc = SQLDriverConnect(hDbc, NULL, (SQLCHAR*)szDSN,
    SQL_NTS, (SQLCHAR*)szConnStrOut,
    255, (SQLSMALLINT*)&iConnStrLength2Ptr, SQL_DRIVER_NOPROMPT);
    if(!SQL_SUCCEEDED(rc))
    {
    getErrors(SQL_HANDLE_DBC , hDbc, erroare);
    freeDbResources(querryStmt, hEnv, hDbc);
    return -1;
    }
    rc = SQLAllocStmt(hDbc, &querryStmt);
    if(!SQL_SUCCEEDED(rc))
    {
    erroare = "Nu am putut aloca statementul.";
    cout << "Nu am putut aloca statementul.";
    freeDbResources(querryStmt, hEnv, hDbc);
    return -1;
    }
    rc = SQLPrepare(querryStmt, statementQuerry, SQL_NTS);
    if(!SQL_SUCCEEDED(rc))
    {
    erroare = "Nu am putut pregatii statementul.";
    cout << "Nu am putut pregatii statementul.";
    freeDbResources(querryStmt, hEnv, hDbc);
    return -1;
    }
    for(int i = 0; i < numarCampuri; i++)
    {
    rc = SQLBindCol(querryStmt, (i + 1), SQL_C_CHAR, valoareCustomers[i], 128, (SQLINTEGER*)&retCode[i]);
    if(!SQL_SUCCEEDED(rc))
    {
    erroare = "Nu am putut bindui coloana.";
    cout << "Nu am putut bindui coloana.";
    freeDbResources(querryStmt, hEnv, hDbc);
    return -1;
    }
    }
    cout << endl << endl << statementQuerry << endl;
    rc = SQLExecute(querryStmt);
    if(SQL_ERROR == rc || SQL_SUCCESS_WITH_INFO == rc)
    {
    cout << "Eroare in executare statement, sau SQL_SUCCESS_WITH_INFO";
    erroare = "Eroare in executare statement, sau SQL_SUCCESS_WITH_INFO";
    getErrors(SQL_HANDLE_STMT, querryStmt, erroare);
    return -1;
    }
    else if(SQL_NEED_DATA == rc)
    {
    cout << "SQL_NEED_DATA.";
    erroare = "SQL_NEED_DATA.";
    getErrors(SQL_HANDLE_STMT, querryStmt, erroare);
    return -1;
    }
    else if(SQL_STILL_EXECUTING == rc)
    {
    cout << "SQL_STILL_EXECUTING.";
    erroare = "SQL_STILL_EXECUTING.";
    getErrors(SQL_HANDLE_STMT, querryStmt, erroare);
    return -1;
    }
    else if(SQL_NO_DATA == rc)
    {
    cout << "SQL_NO_DATA.";
    erroare = "SQL_NO_DATA.";
    getErrors(SQL_HANDLE_STMT, querryStmt, erroare);
    return -1;
    }
    else if(SQL_INVALID_HANDLE == rc)
    {
    cout << "SQL_INVALID_HANDLE.";
    erroare = "SQL_INVALID_HANDLE";
    getErrors(SQL_HANDLE_STMT, querryStmt, erroare);
    return -1;
    }
    rc = SQLFetch(querryStmt);
    if(SQL_SUCCESS == rc)
    {
    while(SQL_SUCCEEDED(rc))
    {
    vector<string> vString;
    string temp;
    for(int i = 0; i < numarCampuri; i++)
    {
    temp = (char*)valoareCustomers[i];
    vString.push_back(temp);
    }
    array.push_back(vString);
    rc = SQLFetch(querryStmt);
    }
    freeDbResources(querryStmt, hEnv, hDbc);
    return 1;
    }
    else if(SQL_SUCCESS_WITH_INFO == rc || SQL_ERROR == rc)
    {
    cout << "Nu am putut executa SQLFetch.\n";
    cout << "Nu am putut executa SQLFetch.\n";
    getErrors(SQL_HANDLE_STMT, querryStmt, erroare);
    freeDbResources(querryStmt, hEnv, hDbc);
    return -1;
    }
    else if(SQL_STILL_EXECUTING == rc)
    {
    cout << "Inca se executa statementul.\n";
    erroare = "Inca se executa statementul.\n";
    freeDbResources(querryStmt, hEnv, hDbc);
    return -1;
    }
    else if(SQL_NO_DATA == rc)
    {
    cout << "Nu exista date de returnat.\n";
    erroare = "Nu exista date de returnat.\n";
    freeDbResources(querryStmt, hEnv, hDbc);
    return -1;
    }
    }
    return -1;
    }



    /**
    * Functia preia prin referinta handle-urile pentru conexiune, mediu si statement si le elibereaza
    */
    void freeDbResources(HSTMT& hStmt, HENV& hEnv, HDBC& hDbc)
    {
    SQLFreeStmt(hStmt, SQL_UNBIND);
    SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
    SQLDisconnect(hDbc);
    SQLFreeHandle(SQL_HANDLE_DBC, hDbc);
    SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
    }


    /**
    * Functia preia datele necesare pentru a putea prelua o eroare legata de un handle pentru conexiune, statement sau mediu
    * SQLSMALLINT type poate fi: QL_HANDLE_DBC, SQL_HANDLE_DBC_INFO_TOKEN, SQL_HANDLE_DESC, SQL_HANDLE_ENV, SQL_HANDLE_STMT
    * SQLHANDLE handle va fi de fapt handle-ul pentru care aven nevoie sa preluam eroarea
    * string& eroare = va tine textul erori
    * Functia preia doar erorile care pot fi preluate prin SQLGetDiagRec.
    * Mai multe informatii despre SQLGetDiagRec aici: http://msdn.microsoft.com/en-us/library/windows/desktop/ms716256(v=vs.85).aspx
    */
    void getErrors(SQLSMALLINT type,SQLHANDLE handle, string& eroare)
    {
    SQLINTEGER i = 1;
    SQLINTEGER native; // codul nativ al erori ( depinde de sistemul de operare si de driver
    SQLCHAR state[7]; // starea driverului mai multe informatii despre state : http://msdn.microsoft.com/en-us/library/windows/desktop/ms716412(v=vs.85).aspx
    SQLCHAR text[256]; // textul erori
    SQLSMALLINT len; // marimea textului erori
    SQLRETURN ret; // stocheaza raspunsul functiei SQLGetDiagRec
    ret = SQLGetDiagRec(type, handle, i, (SQLCHAR*)state, &native, (SQLCHAR*)text, sizeof(text), &len );
    if(SQL_SUCCESS == ret || SQL_SUCCESS_WITH_INFO == ret)
    {
    stringstream buffer(stringstream::in | stringstream::out);
    string temp;
    eroare = "Eroare:\n";
    eroare.append("State: ");
    cout << "State: " << state << endl;
    buffer << state;
    buffer >> temp;
    eroare.append(temp);
    buffer.flush();
    string temp3((char*)text);
    eroare.append("\nTextul eroarei: ");
    eroare.append(temp3);
    buffer.flush();
    cout << "Textul erori: " << text << endl;
    }
    else if(SQL_ERROR == ret)
    {
    eroare = "eroare Raporting: SQLGetDiagRec returneaza o eroare.\n";
    }
    else if(SQL_INVALID_HANDLE == ret)
    {
    eroare = "eroare Raporting: Handleul furnizat pentru preluarea erori a fost incorect.\n";
    }
    else if(SQL_NO_DATA == ret)
    {
    eroare = "eroare Raporting: Nu au fost date de returnat.\n";
    }
    }

    /**
    * Lista argumente:
    * string dns = adresa pe disk a fisierului access
    * string num_Tabel = numele tabelului in care se face inserarea
    * vector<string> Campuri = Un vector ce contine campurile in care se va face inserarea
    * vector<string> Valori = Un vector cu valorile ce vor fi introduse in fiecare camp
    * string& eroare va tine textul oricarei posibile erori
    * Pentru cei doi vectori marimea lor trebuie sa fie identica.
    * Exemplu Campuri va contine stringurile "Nume", "Prenume" "telefon"
    * vectorul Valori va contine "ION", "VASILE", "02345241590"
    * Functia are doar 2 valori de return 1 = succes in inserarea datelor, sau -1 eroare
    */
    int insert(string dns, string num_Tabel, vector<string> Campuri, vector<string> Valori, string& eroare)
    {
    //Incepem pregatirea statmentului
    string comanda = "INSERT INTO ";
    string comanda2 = ") VALUES ('";
    string comanda3 = ");";
    string campuri_tabel;
    string campuri_valori;
    //verificam daca numarul de campuri si de valori e identic
    if(Campuri.size() != Valori.size())
    {
    eroare = "Numarul de campuri si de valori nu este identic. Pentru ca inserarea sa se poata efectua este necesar ca cele 2 sa fie identice.\n";
    return -1;
    }
    // pregatim lista cu campurile in care se introduc datele
    for(unsigned int i = 0; i < Campuri.size(); i++)
    {
    if(i == (Campuri.size() - 1))
    {
    campuri_tabel.append(Campuri[i]);
    //campuri_tabel.append(")");
    }
    else
    {
    campuri_tabel.append(Campuri[i]);
    campuri_tabel.append(", ");
    }
    }
    // pregatim lista cu valorile de introdus
    for(unsigned int i = 0; i < Valori.size(); i++)
    {
    if(i == (Valori.size() - 1))
    {
    campuri_valori.append(Valori[i]);
    campuri_valori.append("'");
    }
    else
    {
    campuri_valori.append(Valori[i]);
    campuri_valori.append("', '");
    }
    }
    string sql_statement;
    sql_statement.append(comanda);
    sql_statement.append(num_Tabel);
    sql_statement.append("(");
    sql_statement.append(campuri_tabel);
    sql_statement.append(comanda2);
    sql_statement.append(campuri_valori);
    sql_statement.append(");");
    // am terminat pregatirea statementului

    // pregatim conexiunea la bd
    // inceput definitii variabile necesare conexiunii la db
    HENV hEnv;
    HDBC hDbc;
    HSTMT hStmt;
    RETCODE rc;
    char szConnStrOut[255];
    int iConnStrLength2Ptr;
    char szDSN[256] = "Driver={Microsoft Access Driver (*.mdb)};DSN='';DBQ=";
    // incheiere definitii
    // Initiem conexiunea
    strcat(szDSN, dns.c_str());
    rc = SQLAllocEnv(&hEnv);
    if(!SQL_SUCCEEDED(rc))
    {
    eroare = "Nu am putut aloca Envorimentul.";
    cout << "Nu am putut aloca envorimentul.";
    return -1;
    }
    rc = SQLAllocConnect(hEnv, &hDbc);
    if(!SQL_SUCCEEDED(rc))
    {
    eroare = "Nu am putut aloca conexiunea.";
    cout << "Nu am putut aloca conexiunea.";
    return -1;
    }

    rc = SQLDriverConnect(hDbc, NULL, (SQLCHAR*)szDSN,
    SQL_NTS, (SQLCHAR*)szConnStrOut,
    255, (SQLSMALLINT*)&iConnStrLength2Ptr, SQL_DRIVER_NOPROMPT);
    if(!SQL_SUCCEEDED(rc))
    {
    getErrors(SQL_HANDLE_DBC , hDbc, eroare);
    freeDbResources(hStmt, hEnv, hDbc);
    return -1;
    }
    rc = SQLAllocStmt(hDbc, &hStmt);
    rc = SQLPrepare(hStmt, (SQLCHAR*)sql_statement.c_str(), SQL_NTS);
    rc = SQLExecute(hStmt);
    if(!SQL_SUCCEEDED(rc))
    {

    eroare = "Inserarea nu a putut fi efectuata.";
    cout << "Inserarea nu a putut fi efectuata.";
    getErrors(SQL_HANDLE_STMT, hStmt, eroare);
    freeDbResources(hStmt, hEnv, hDbc);
    return -1;
    }
    else if(SQL_SUCCEEDED(rc))
    {
    freeDbResources(hStmt, hEnv, hDbc);
    return 1;
    }
    return -1;
    }

    le: Am sters clasa stringArray deoarece nu mai era necesara, pentru preluarea datelor se foloseste un vector de vectori(definitie

    vector<vector<string> > numeVector;

    De asemenea momentan din nu stiu exact ce motiv statementurile care folosesc clausa Like nu returneaza nici un fel de date.

    Se pare ca clausa Like nu se executa la fel prin odbc cum se executa direct in access.

    Eventual poate cineva explica de ce se comporta altfel?

    • Upvote 2
  9. Nu stiu daca ai observat dar in atasament ai atat sursa cat si executabilul.

    Pentru a vedea exact unde e eroarea trebuie sa treci prin cod cu pixul in mana pentru ca trebuie sa faci calculele.

    Eu nu mai tin prea multe minte despre matrici.

    • Downvote 1
  10. De ce imi miroase a phishing? :)) Link-ul pentru faq da 404

    Daca ma insel, astept sa fiu corectat.

    Se pare ca site-ul este pe bune, cat si testele sunt destul de pe bune. Au si o pagina pe facebook, si se pare ca au concursuri inclusiv pentru facebook, totusi nu am gasit sa pot participa direct la acel concurs plecand de pe site-ul lor deoarece trebuie sa rezolvi intai 5 teste, abea apoi poti aplica pentru ei.

×
×
  • Create New...