elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Temas
Páginas: [1]
1  Informática / Hardware / Configuracion para un pequeño centro de datos en: 8 Marzo 2017, 20:50 pm
Hola amigos de elhacker, soy nuevo en el mundo de servidores,mi pregunta va hacer un poco amplia, pero bueno les cuento mi situación es la siguiente si poseo 5 servidores, digamos 3  de un modelo con las siguientes características:

1. Procesador: E5-2650v3 x 2
    Núcleos: 10
    Frecuencia:2.30Ghz-3 Ghz
    Cache: 20 Mb Velocidad del Bus: 9.6 GT/s QPI, Tamaño máximo de memoria: 768 GB
2. Memoria ram: 64 GB (8 GBx 8)
3. Disco duro: 600 GB x 8

arrojando un total de:
CPU:
60 Núcleos
RAM:
192 GB
HDD:
14.4 TB

y los otros 2 servidores cuentan con las siguientes características:

1. Procesador: Intel Xeon E3-1220V3
    Núcleos: 4,  3.10 Ghz-3.50 Ghz, Cache: 8 MB, Velocidad del Bus: 5 GT/s DMI, Tamaño máximo           de memoria: 32 GB

2. Memoria Ram: 16 GB (8 GBx 2)
3. Disco duro: 500 GBx 2

arrojando un total de:
CPU:
8 Núcleos
RAM:
32 GB
HDD:
2 TB

Ustedes me corregirán si me equivoque en los cálculos.
 
y una conexión dedicada para cada uno de 1 Gb.

Que tipo de servicios inicialmente puedo ofrecer a clientes como empresa que ofrece servicios de centro de datos. Lo primero que tengo en cuenta es que al poseer una capacidad pequeña en cuanto al número de servidores,  lo  mas que puedo brindar son servicios hosting y VPS. Para este último (VPS) supongo que puedo ofrecer el servicio para pocos usuarios.

Digamos que destino los primeros tres servidores para emplear VPS, partiendo de esa idea, cuantas maquinas virtuales puedo configurar por servidor?, eso por un lado, por el otro indico que por ahí leí, que lo recomendable para prestar servicio VPS, el nivel mínimo es de 2 GB de ram por núcleo del procesador y el nivel óptimo es de 4 Gb de ram por cada núcleo del procesador, ya que la demanda de recursos de ram es elevada cuando se utilizan maquinas virutales, es esto cierto? si es asi poseo un total de:

Primeros tres servidores:
CPU:
60 Núcleos
RAM:
192 GB
HDD:
14.4 TB

Lo cual me indica que entra dentro de los parametros minimos GB de ram que son 120 GB en mi caso, ya que 60 núcleos por 2 GB de ram es igual a los 120 GB indicados anteriormente. Ahora si realizo el calculo por los 4 GB tengo un déficit, ya que requiero de 240 GB de ram y poseo son 192 GB.

 A que voy con todo esto? si quiero prestar un servicio de calidad a mis clientes debo apuntar a cumplir con esta condición es decir 4 GB por núcleo.

En resumen como una primera respuesta me gustaría que me guiaran con lo siguiente:

1. Según mis capacidades cuantas maquinas virtuales puedo crear según características de los primeros tres servidores.
2. Para prestar un servicio de calidad debo implementar la sugerencia que indican algunos expertos de tener 4GB para cada núcleo de procesador.
3. Para las dos últimos servidores tengo pensado dedicarlos para ofrecer servicios hosting, cuantos clientes puedo albergar de acuerdo a las caracteristicas de estos últimos?
4. Que distribución de linux (ya que requiero implementar esto en software libre) me recomiendan para implementar en el pequeño centro de datos? por ahí ley que las mejores son debian server o redhat cluster.
5. Que aplicativo de balanceo de cargar me recomiendan, para optimizar el rendimiento del centro de datos.

Gracias de antemano por sus respuestas, compañeros
2  Programación / Programación C/C++ / leer datos de comunicacion serial (BYTE) de indicador de peso y convertir a int en: 29 Junio 2016, 05:54 am
Buenas soy nuevo en el foro.

Mi problema es el siguiente estoy intentando leer los datos que recibo de un indicador digital de peso vía serial a mi pc. Los datos son interpretados por el dato tipo BYTE. El codigo que estoy utilizando es uno que encontre en la web es el siguiente:
 
Código
  1. #ifndef serie_h
  2. #define serie_h
  3.  
  4. #include <windows.h>
  5.  
  6. // Open Serial port
  7. HANDLE OpenSerialPort( char *psPort, // "COM1","COM2"
  8. DWORD bBaudRate, // CBR_9600, CBR_19200. CBR_56000
  9. BYTE bByteSize, // 7,8
  10. BYTE bParity, // NOPARITY, EVENPARITY, ODDPARITY
  11. BYTE bStopBits, // ONESTOPBIT, ONE5STOPBITS, TWOSTOPBITS
  12. DWORD ReadTimeout   // Programmable Read Timeout
  13. );
  14.  
  15. // Send a byte
  16. BOOL SerialSendByte(HANDLE hPort, BYTE byte);
  17. // return TRUE: Send OK
  18.  
  19. // Receive a byte
  20. BOOL SerialReceiveByte(HANDLE hPort, BYTE *pbyte, BOOL *pTimeout);
  21. // return TRUE & *pTimeout TRUE Send OK
  22. // return TRUE & *pTimeout FALSE Timeout
  23. // return FALSE Receive Error
  24.  
  25. // Close Serial Port
  26. BOOL CloseSerialPort(HANDLE hPort);
  27.  
  28. // Write&Read strings from serial port using standard file I/O functions
  29.  
  30. /*BOOL ReadFile(
  31.     HANDLE hFile, // handle of file or serial port to read
  32.     LPVOID lpBuffer, // address of buffer that receives data  
  33.     DWORD nNumberOfBytesToRead, // number of bytes to read
  34.     LPDWORD lpNumberOfBytesRead, // address of number of bytes read
  35.     LPOVERLAPPED lpOverlapped // NULL  
  36.    );
  37. */
  38.  
  39. /*
  40. BOOL WriteFile(
  41.  
  42.     HANDLE hFile, // handle to file or serial port to write to
  43.     LPCVOID lpBuffer, // pointer to data to write to file
  44.     DWORD nNumberOfBytesToWrite, // number of bytes to write
  45.     LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written
  46.     LPOVERLAPPED lpOverlapped // NULL
  47.    );
  48. */
  49.  
  50. #endif
  51.  
  52. ///Archivo cpp
  53. #include "serie.h"
  54.  
  55. HANDLE OpenSerialPort( char *psPort, // "COM1","COM2"
  56. DWORD dwBaudRate, // CBR_9600, CBR_19200. CBR_56000
  57. BYTE bByteSize, // 7,8
  58. BYTE bParity, // NOPARITY, EVENPARITY, ODDPARITY
  59. BYTE bStopBits, // ONESTOPBIT, ONE5STOPBITS, TWOSTOPBITS
  60. DWORD Timeout       // Timeout
  61. ) {
  62.  
  63. HANDLE hPort; // port handler
  64. DCB dcbPort; // Port configuration
  65. COMMTIMEOUTS commTimeouts; // Port Timeouts
  66. DWORD dwError; // Error code
  67.  
  68. // Open Serial Port
  69. hPort=CreateFile(
  70. psPort, // pointer to name of the file
  71. GENERIC_READ | GENERIC_WRITE, // access (read-write) mode
  72. 0, // share mode: 0 the object cannot be share
  73. NULL, // pointer to security attributes: NULL the handle cannot be inherited
  74. OPEN_EXISTING, // how to create: Comx exist
  75. 0, // file/port attributes
  76. NULL); // handle to file/port with attributes to copy  
  77.  
  78. // If the function fails, the return value
  79. //is INVALID_HANDLE_VALUE
  80. if ( hPort == INVALID_HANDLE_VALUE ) {
  81. dwError = GetLastError (); // Flush error code
  82. return hPort;
  83. }
  84.  
  85. // Set Port Configuration
  86.  
  87. // Delete DCB configuration
  88. FillMemory(&dcbPort, sizeof(dcbPort), 0);
  89. dcbPort.DCBlength = sizeof(dcbPort);
  90.  
  91. // Current DCB in use for the communications port
  92. GetCommState (hPort, &dcbPort);
  93.  
  94. // Update DCB with new parameters
  95. dcbPort.BaudRate = dwBaudRate;        
  96. dcbPort.ByteSize = bByteSize;                
  97. dcbPort.Parity = bParity;            
  98. dcbPort.StopBits = bStopBits;        
  99.  
  100. // Fixed parameters (Disable XON-XOFF and modem handshake)
  101. dcbPort.fBinary = TRUE;               // Binary mode; no EOF check
  102. dcbPort.fParity = TRUE;               // Enable parity checking
  103. dcbPort.fOutxCtsFlow = FALSE;         // No CTS output flow control
  104. dcbPort.fOutxDsrFlow = FALSE;         // No DSR output flow control
  105. dcbPort.fDtrControl = DTR_CONTROL_ENABLE;
  106. // DTR flow control type
  107. // Raises the DTR line when the device is opened
  108. dcbPort.fDsrSensitivity = FALSE;       // DSR sensitivity
  109. dcbPort.fTXContinueOnXoff = TRUE;     // XOFF continues Tx
  110. dcbPort.fOutX = FALSE;                 // No XON/XOFF out flow control
  111. dcbPort.fInX = FALSE;                 // No XON/XOFF in flow control
  112. dcbPort.fErrorChar = FALSE;           // Disable error replacement
  113. dcbPort.fNull = FALSE;                 // Disable null stripping
  114. dcbPort.fRtsControl = RTS_CONTROL_ENABLE;
  115. // RTS flow control
  116. // Raises the RTS line when the device is opened
  117. dcbPort.fAbortOnError = FALSE;         // Do not abort reads/writes on
  118. // error
  119. // Set new configuration
  120. if (!SetCommState (hPort, &dcbPort)) {
  121. dwError = GetLastError (); // Flush error code
  122. CloseSerialPort(hPort);
  123. hPort = INVALID_HANDLE_VALUE;
  124. return hPort;
  125. }
  126.  
  127. // Set Port Timeouts
  128. // Timeouts preparation  MORE INFORMATION IN WIN32 API: COMMTIMEOUTS
  129. commTimeouts.ReadIntervalTimeout = 0;   // Specifies the maximum time, in milliseconds, allowed to elapse between the arrival
  130. // of two characters on the communications line
  131. // A value of zero indicates that interval time-outs are not used.
  132. commTimeouts.ReadTotalTimeoutMultiplier = 50;   // Specifies the multiplier, in milliseconds, used to calculate
  133. // the total time-out period for read operations.
  134. // For each read operation, this value is multiplied
  135. // by the requested number of bytes to be read.
  136. commTimeouts.ReadTotalTimeoutConstant = Timeout;// Specifies the constant, in milliseconds, used to calculate the total
  137. // time-out period for read operations
  138. //
  139. commTimeouts.WriteTotalTimeoutMultiplier = 10;  // Specifies the multiplier, in milliseconds, used to calculate the
  140. // total time-out period for write operations.
  141. // For each write operation, this value is multiplied
  142. // by the number of bytes to be written.
  143. commTimeouts.WriteTotalTimeoutConstant = 1000;  // Specifies the constant, in milliseconds, used to calculate the total time-out period
  144. // for write operations
  145. // See de win32 api for more information
  146. // Set Timeouts
  147. if (!SetCommTimeouts (hPort, &commTimeouts)) {
  148. dwError = GetLastError (); // Flush error code
  149. CloseSerialPort(hPort);
  150. hPort = INVALID_HANDLE_VALUE;
  151. return hPort;
  152. }
  153. return hPort;
  154. }
  155.  
  156. BOOL SerialSendByte(HANDLE hPort, BYTE byte){
  157. BOOL bRes;
  158. DWORD dwError, dwNumBytesWritten=0;
  159.  
  160. bRes=WriteFile(
  161. hPort, // handle to file or serial port to write to
  162. &byte, // pointer to data to write to file
  163. 1, // number of bytes to write
  164. &dwNumBytesWritten, // pointer to number of bytes written
  165. NULL // NULL
  166. );
  167.  
  168.  
  169. if ((!bRes)||(dwNumBytesWritten!=1)){
  170. dwError = GetLastError (); // Flush error code
  171. }
  172. return bRes;
  173. }
  174.  
  175. BOOL SerialReceiveByte(HANDLE hPort, BYTE *pbyte, BOOL *pTimeout){
  176. BOOL bRes;
  177. DWORD dwError, lpNumberOfBytesRead=0;
  178.  
  179. *pTimeout=FALSE;
  180. bRes=ReadFile( hPort, // handle of file or serial port to read
  181. pbyte, // address of buffer that receives data  
  182. 1, // number of bytes to read
  183. &lpNumberOfBytesRead, // address of number of bytes read
  184. NULL // NULL  
  185. );
  186.  
  187. if (!bRes) {
  188. dwError = GetLastError (); // Flush error code
  189. }
  190. if ((bRes)&&(lpNumberOfBytesRead==0)){
  191. *pTimeout = TRUE;
  192. }
  193. return bRes;
  194. }
  195.  
  196. BOOL CloseSerialPort(HANDLE hPort){
  197. BOOL bRes;
  198. DWORD dwError;
  199.  
  200. bRes=CloseHandle(hPort);
  201. if (!bRes) {
  202. dwError = GetLastError (); // Flush error code
  203. }
  204. return bRes;
  205. }
  206. ///////////////////////////////////////////////////////////////////////////////////////////////////
  207.  
  208. #include "serie.h"
  209. #include "windows.h"
  210. #include "stdio.h"
  211. #include <stdint.h>
  212.  
  213. int main(){
  214. HANDLE hPort;
  215. BOOL bRes;
  216. BYTE byte;
  217. BOOL timeout;
  218.  
  219. hPort=OpenSerialPort("COM1",CBR_9600,8,NOPARITY,TWOSTOPBITS,5000);
  220.  
  221. if (hPort==INVALID_HANDLE_VALUE){
  222. printf("Error abriendo puerto com1");
  223. return 1;
  224. }
  225.  
  226. while(1){
  227. bRes=SerialReceiveByte(hPort,&byte,&timeout);
  228. if (!bRes) {
  229. break;
  230. }
  231.  
  232. if (timeout){
  233. printf("\n--->timeout\n");
  234. }
  235.  
  236. else
  237. {
  238.        putchar(byte);
  239. }
  240.  
  241. }
  242.  
  243. if (!bRes) {
  244. printf("Error leyendo de puerto com1");
  245. return 1;
  246. }
  247.  
  248. CloseSerialPort(hPort);
  249. return 0;

bien lo que obtengo de salida  en la pantalla de la pc es lo siguiente:C°xxCx° Cx°Cx xxx° xCx x°xC C C C C C C C°xxCx° y este patron se repite constantemente. En este caso esos valores simbolizan el numero 0 que muestra el indicador digital de peso quisiera saber como puedo convertir esos valores del tipo BYTE al valor 0 Kg que muestra el indicador digital de peso pero en la pc.

Gracias de antemano por la ayuda
3  Programación / Programación C/C++ / como almacenar correctamente unsigned *char a MSQL (Almacenar una imagen) en: 15 Octubre 2014, 04:24 am
Buenas, soy nuevo en el foro y necesito ayuda con un problema que he tenido ya desde hace ya un tiempo, el asunto es el siguiente, en el programa que estoy creando decidi almacenar imagenes a la bdd (mysql, si ya se que no lo recomiendan pero igual lo necesito hacer así), estoy trabajando con wxwidgets para que tengan una idea primero mostrare como muestro imagenes en un marco:
______________________________________________________________________

Programa 1.

class MyFrame: public wxFrame
   {
   public:
   MyFrame();
   void OnPaint( wxPaintEvent &event );
   wxBitmap imagen_b;
   unsigned char *arreglo;
   int ancho, largo;
   
   private:
   
   DECLARE_EVENT_TABLE()
   };

MyFrame::MyFrame():wxFrame(NULL,wxID_ANY,"This is the thing")
{
   wxInitAllImageHandlers();
   SetBackgroundColour(* wxWHITE);
   
   wxImage image;
   
   if (!image.LoadFile( _T("Imagen.jpg")))
   wxLogError(wxT("Can't load JPG image"));
   
   /*else
   {
   imagen=wxBitmap(image);
   }*/
   //arreglo=image.GetData();
   
   
   arreglo=(unsigned char *) malloc (image.GetWidth() * image.GetHeight() * 3);
   memcpy (arreglo, image.GetData(), image.GetWidth() * image.GetHeight() * 3);
   ancho=image.GetWidth();
   largo=image.GetHeight();
   
   image.Destroy();
   
   wxImage nueva_imagen(ancho, largo, arreglo);
   imagen_b=wxBitmap(nueva_imagen);
   nueva_imagen.Destroy();
   
   this->Connect(wxEVT_PAINT, wxPaintEventHandler(MyFrame::OnPaint));
   //this->Centre();
   
}

void MyFrame::OnPaint(wxPaintEvent &event)
{
   wxPaintDC dc( this );
   PrepareDC( dc );
   
   //if (imagen.Ok())
   dc.DrawBitmap(imagen_b, 10, 100);
}
____________________________________________________________________


y perfecto aqui todo es una maravilla me muestra la imagen perfectamente en mi marco.

El problema surje cuando necesito almacenar los datos que conforman la imagen en la base de dato en este caso MYSQL, para ser mas especifico el problema se me presenta con el unsigned char *arreglo, les mostrare ahora el codigo pero queriendo almacenar los datos a la bdd:
_____________________________________________________________________

Programa 2.

arreglo=(unsigned char *) malloc (image.GetWidth () * image.GetHeight () * 3);
   memcpy(arreglo, image.GetData(), image.GetWidth() * image.GetHeight() * 3);
   int ancho=image.GetWidth();
   int largo=image.GetHeight();
image.Destroy();

sprintf(consulta, "INSERT INTO imagen VALUES('%hhu', '%d', '%d'),  *(arreglo++), ancho, alto);

if(mysql_query(conn, consulta)==0)
   wxMessageBox("\nDatos incertados con exito\n");
   
   else
   
   wxMessageBox("\nDATOS NO INCERTADOS\n");
___________________________________________________________________

El paso previo inserta correctamente los datos, el problema sucede aca:

Show();
wxInitAllImageHandlers();
MYSQL *conn;
   MYSQL_RES *res;
   MYSQL_ROW row;
   char *server="localhost";
   char *user="root";
   char *password="12345";
   char *base_de_datos="Programa";
   char consulta0[1024];
   conn=mysql_init(NULL);
   int numero_filas;
   
if(!mysql_real_connect(conn, server, user, password, base_de_datos, 3306, NULL, 0))
{
   wxMessageBox("No se pudo establecer Conexion con la base de datos");
   exit(1);
   }
   
   //sprintf(consulta0, "SELECT * FROM imagen");
   
   int ancho, largo;
   char *fa=strdup(factura.c_str());
   char f[100];
   strcpy(f, fa);

sprintf(consulta0, "SELECT * FROM imagen where num_f='%s'", f);
   
if(mysql_query(conn, consulta0)==0)
{
res=mysql_store_result(conn);
numero_filas=mysql_num_rows(res);
   
while((row=mysql_fetch_row(res)))
{
ancho=atoi(row[1]);
largo=atoi(row[2]);
unsigned char* arreglo= reinterpret_cast<unsigned char*>(row[0]);;

wxImage nueva_imagen(ancho, largo,arreglo);
imagen_b=wxBitmap(nueva_imagen);
nueva_imagen.Destroy();
}
}
   mysql_close(conn);
   this->Connect(wxEVT_PAINT, wxPaintEventHandler(VImagenProveedor::OnPaint));
   
}

void VImagenProveedor::OnPaint(wxPaintEvent &WXUNUSED(event)){   
   wxPaintDC dc(this);
   PrepareDC(dc);

   //if (imagen.Ok())
   dc.DrawBitmap(imagen_b, 10, 100);
}
____________________________________________________________________

bien les describire entonces mi problema:

al agregar la variable arreglo al objeto nueva_imagen (wxImage nueva_imagen(ancho, largo,arreglo))

El resultado es que no me muestra la imagen como lo hacia anteriormente en el programa 1, el problema se origina en el inserción de la variable unsigned *char arreglo a la bdd ya que me altera la codificación de la variable y debido a ello me vienen varias preguntas que serian:
1)¿En MYSQL unsigned char* esta representado por un tipo de dato blob, binary, varchar?
2)¿Como se inserta correctamente la variable arreglo a la base de dato, asi:
sprintf("%hhu", *(arreglo++)) como lo tengo en el programa o es %c o %u?
3)he intentado hacer lo siguiente para evitarme problemas:

arreglo=(unsigned char *) malloc (image.GetWidth () * image.GetHeight () * 3);
memcpy(arreglo, image.GetData(), image.GetWidth() * image.GetHeight() * 3);

char* ch=reinterpret_cast<char*>(arreglo);

sprintf(consulta, "INSERT INTO imagen VALUES('%s', '%d', '%d'),  arreglo, ancho, alto);


en este caso es peor ya que ni siquiera se almacenan los datos, en cambio si lo intento con (%c, arreglo) me inserta el valor.

este son las preguntas que me vienen a la mente las cuales me podrian ayudar a resolver este problema que tengo, otro dato para que tengan en cuenta es que intente lo siguiente:

supongase que quiero insertar el valor arreglo pero como un char *.

char* ch=reinterpret_cast<char*>(arreglo);
wxMessagebox(*ch);

y me muestra solamente el caracter especial ÿ (a lo mejor ese el problema que no esta respresentada por valores Assci) yo pensaba que me iba a mostrar un conjunto de caracteres pero solo me muestra ese.

Pero cuando logro insertar la variable arreglo de la siguiente forma:

sprintf(consulta, "INSERT INTO imagen VALUES('%huu'),  *(arreglo++). [(no coloco %s porque no me deja almacenar el dato de esa forma, al  almacenarlo el programa se queda guindado, pero con %huu no sucede eso, el problema que he notado con eso es que solo me toma un caracter)]

y en el siguiente segmento del programa donde quiero tomar la variable almacenada que es:
unsigned char* arreglo= reinterpret_cast<unsigned char*>(row[0]);

en esta parte como dije anteriormente es la que tiene el problema ya que en esta oportunidad no me muestra la imagen.

Entonces como método de prueba quiero mostrar en pantalla el valor de (row[0]) que es la variable almacenada arreglo, pero de la forma por defecto char* ya que MYSQL convierte todo las variables almacenadas a la forma char* así la haya almacenado de la forma %huu, el valor es el siguiente:

wxMessagebox(*row[0]);
me muestra 255.

De esta manera logro corroborar que si hubo una modificación de mi variable inicial ya que
char* ch=reinterpret_cast<char*>(arreglo);
wxMessagebox(*ch); me muestra el caracter especial ÿ

mientras que wxMessagebox(*row[0]); me muestra 255.

Se supone que si quiero mostrar la imagen correspondiente el valor que tomo de la bdd debe ser igual ÿ ni siquiera me esta haciendo eso.

son dudas que espero me ayuden a solucionar les doy gracias de antemano por la ayuda que me puedan ofrecer, ya que este tema me ha costado solucionarlo y así me ayudarían a comprender mas de mysql y c++, ya que como pueden observar tengo muchas dudas con respecto a este tema.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines