El País Semanal vs. XLSemanal Agosto 28, 2008
Posted by ravelus in Cultura.2 comments
Hace tiempo tuve la oportunidad de leer El País Semanal por segunda vez en mi vida, y digo oportunidad porque jamás compro El País, como ya sabrán de buena mano quienes me conocen, y si no que lean la página de este blog “Sobre mí”.
Yo soy un ferviente admirador y seguidor del XLSemanal, pero reconozco que existen cosas que no me gustan en tal revista, por lo que he decidido establecer una comparativa entre ambas revistas y buscar sus puntos fuertes y débiles, siempre a mi honesto y humilde modo de ver.
El País Semanal
- Cartas al director: Pobres, partidistas (recuerdo una alabando a Alfonso Guerra; hay que tener unos huevos muy, muy grandes), no premian las mejores cartas.
- Artículos: Bastante pobres de contenido, suelen tratar temas personales, y no de interés más publico. Aburrido. Solamente se libra Javier Marías, aunque me gustaba más cuando escribía para XLSemanal (por entonces El Semanal), etapa de la que guardo algunos artículos suyos muy buenos.
- Organización: el caos. No distingo dónde comienzan las entrevistas, de los reportajes, de los reportajes fotográficos, de los monográficos temáticos… un desorden total.
- Titulares: ambiguos; no dicen nada. Recuerdo uno: “El lado femenino del sónar”. Así, a bote pronto, pensé en los sónares de los barcos, pero no; se refería al festival de música SÓNAR.
- Fotografía: buenas fotografías, aunque no se destaca demasiado la labor del fotógrafo. Análisis muy personales y muy subjetivos, por mucho que los haga el mismísimo Juan José Millás.
- Gente: muy rara, no la entiendo. Una pequeña entrevista a una tal Carmen París, cantante que destaca una obra en la cual se postula que, y cito textualmente, “nuestro satélite lunar no debería estar ahí, según las leyes físicas. Su existencia es bastante inexplicable”. Que se lo pregunten a Saturno… aunque inexplicable diría yo que son los gustos literarios de esta mujer.
- Publicidad: mucha, demasiada. Pero es una constante en cualquier revista.
- Lo mejor: mmm… cuando encuentre algo lo señalaré, lo prometo.
- Lo peor: Además de la desorganización, destacaría la gran cantidad de apartados muy poco interesantes, que más sirven de publicidad que de otra cosa: tecnología, turismo, viajes, moda…
XLSemanal
- Cartas al director: Fuera aparte de la opinión del cartero (Lorenzo Silva), con el cual puedes estar más o menos de acuerdo, es loable el que siempre intenta poner el contrapunto publicando cartas de opiniones muy distintas, incluso opuestas, que nos permiten reflexionar y comprender todas las ópticas posibles de un determinado tema. Incluso abre debates internos. Una profesora escribió en una ocasión dando las gracias porque utilizaba esta sección para ilustrar sus clases de filosofía. Chapó.
- Artículos: Escribe Pérez Reverte, Carmen Posadas, Juan Manuel Parada y en ocasiones Paulo Coelho. Con este cartelón qué podemos esperar… lo mejor: Pérez Reverte y Carmen Posadas. Unos genios. Se echa de menos mucho a Carlos Herrera. Las ilustraciones de Mingote aportan un punto de ironía inteligente muy de agradecer.
- Organización: bastante bien estructurada: magazines, noticias, entrevistas, apartados de ciencia, de cultura, de moda… bien identificados mediante notas en la cabecera de la página. Cada sección se introduce con una página claramente diferenciada del resto.
- Titulares: buenos, inteligentes, sugerentes. Invitan a seguir leyendo.
- Fotografía: buenas fotografías, no hay opiniones, solamente descripciones. Algo que se debe valorar: se deja el observador que extraiga el mensaje, que extraiga sus propias conclusiones. Gran importancia a la fotografía, ocupa un lugar preeminente. El fichaje de Álvaro Ybarra Zabala es todo un acierto. Un gran reportero y fotógrafo de guerra.
- Gente: muy interesante. Pero como siempre, hay de todo.
- Publicidad: mucha, demasiada. Pero es una constante en cualquier revista.
- Lo mejor: Cartas al director, articulistas, apartado de ciencia…
- Lo peor: Algo tremendamente malo de XLSemanal: la moda, el turismo y la tecnología para bolsillos elitistas; nos venden una publicidad carísima como para darnos en los morros porque mucha gente no se lo puede permitir. Me parece un auténtico insulto al lector. Las contradicciones: como ejemplo, uno que señaló un lector; ocurría en un número que después de apostar por el cambio climático y la salvaguarda de las especies, a continuación aparecía un reportaje de moda con una modelo muy mona y de fondo una cabeza de ciervo colgada en una pared…
Inserciones masivas de Base de Datos en C# Agosto 25, 2008
Posted by ravelus in Informática.add a comment
Hace un tiempo tuve que modificar un programa que recibía muchos datos y los iba insertando en la base de datos, lo cual constituía un cuello de botella por la gran cantidad de inserciones realizadas, con lo cual se nos ocurrió agrupar en bloques esas inserciones y realizarlas por lotes, cada cierto tiempo, de forma transaccional. Este fue el resultado, por si a alguien le interesa:
SqlConnection connection = null;
int ret = 1;
try
{
//Nos conectamos a la BD
connection = new SqlConnection(ConsultasBd.ConnString);
//Insertamos en nuestro dataTable los valores que posteriormente vamos a volcar de golpe
dtHistoricos.Rows.Add(new object[] { dtHistoricos.Rows.Count, eq.IdVehiculo, pos.EstadoNavegacion, pos.PrecisionPos, pos.Latitud, pos.Longitud, pos.Heading, pos.VelocidadGiro, pos.SOG, pos.COG, pos.Fecha, pos.IDMensaje, pos.IDEstacionBase, eq.IdDestino });
//hacemos lotes cada ‘numregistros’ filas
if (dtHistoricos.Rows.Count > numregistros)
{
//vamos a volcar a la base de datos un lote:
//conectamos y activamos los triggers que se vean afectados por la inserción masiva
SqlBulkCopy bcp = new SqlBulkCopy(ConsultasBd.ConnString, SqlBulkCopyOptions.FireTriggers);
//el tamaño del lote será de ‘batch’
bcp.BatchSize = batch;
//bcp.NotifyAfter = numRegistros;
bcp.DestinationTableName = “PNC_HIS_AISPosiciones”;
//bcp.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
// Realizo la copia masiva
if (connection.State == ConnectionState.Closed)
connection.Open();
//volcamos a la base de datos el lote completito
bcp.WriteToServer(dtHistoricos);
dtHistoricos.Rows.Clear();
}
}
catch (Exception e)
{
//Escribir información en fichero de log
Log.Write(e.Message + ” en: ” + e.StackTrace, true);
ret = -1;
dtHistoricos.Rows.Clear();
}
finally
{
connection.Close();
}
————————————————————
Donde la función que crea la estructura del DataTable es:
————————————————————
private static DataTable crearTablaHistoricos()
{
//Crea la estructura de un DataTable con la de la tabla PNC_HIS_AISPosiciones
DataTable dt = new DataTable();
DataColumn dc;
try
{
dc = new DataColumn();
dc.DataType = System.Type.GetType(“System.Int32″);
dc.ColumnName = “iIdPosicion”;
dc.Unique = true;
dt.Columns.Add(dc);
dc = new DataColumn();
dc.DataType = System.Type.GetType(“System.Int32″);
dc.ColumnName = “iIdVehiculo”;
dc.Unique = false;
dt.Columns.Add(dc);
dc = new DataColumn();
dc.DataType = System.Type.GetType(“System.Int32″);
dc.ColumnName = “iEstadoNavegacion”;
dc.Unique = false;
dt.Columns.Add(dc);
dc = new DataColumn();
dc.DataType = System.Type.GetType(“System.Boolean”);
dc.ColumnName = “bPrecisionPosicion”;
dc.Unique = false;
dt.Columns.Add(dc);
dc = new DataColumn();
dc.DataType = System.Type.GetType(“System.Double”);
dc.ColumnName = “dLatitud”;
dc.Unique = false;
dt.Columns.Add(dc);
dc = new DataColumn();
dc.DataType = System.Type.GetType(“System.Double”);
dc.ColumnName = “dLongitud”;
dc.Unique = false;
dt.Columns.Add(dc);
dc = new DataColumn();
dc.DataType = System.Type.GetType(“System.Int32″);
dc.ColumnName = “iTrueHeading”;
dc.Unique = false;
dt.Columns.Add(dc);
dc = new DataColumn();
dc.DataType = System.Type.GetType(“System.Int32″);
dc.ColumnName = “iVelocidadGiro”;
dc.Unique = false;
dt.Columns.Add(dc);
dc = new DataColumn();
dc.DataType = System.Type.GetType(“System.Int32″);
dc.ColumnName = “iSOG”;
dc.Unique = false;
dt.Columns.Add(dc);
dc = new DataColumn();
dc.DataType = System.Type.GetType(“System.Int32″);
dc.ColumnName = “iCOG”;
dc.Unique = false;
dt.Columns.Add(dc);
dc = new DataColumn();
dc.DataType = System.Type.GetType(“System.DateTime”);
dc.ColumnName = “dtFecha”;
dc.Unique = false;
dt.Columns.Add(dc);
dc = new DataColumn();
dc.DataType = System.Type.GetType(“System.Int32″);
dc.ColumnName = “iIdMensaje”;
dc.Unique = false;
dt.Columns.Add(dc);
dc = new DataColumn();
dc.DataType = System.Type.GetType(“System.Int32″);
dc.ColumnName = “iIdBase”;
dc.Unique = false;
dt.Columns.Add(dc);
dc = new DataColumn();
dc.DataType = System.Type.GetType(“System.Int32″);
dc.ColumnName = “iIdDestino”;
dc.Unique = false;
dt.Columns.Add(dc);
//retornamos el datatable creado
return dt;
}
catch (Exception eo)
{
Log.Write(“Ocurrió un error al crear la ESTRUCTURA del DataTable para la inserción masiva. Error “+eo.Message+” Traza: “+eo.StackTrace,true);
return null;
}
}
Las líneas comentadas no son necesarias. Tal cual está escrito el código se va construyendo un DataTable con los datos que se van recibiendo, y cuando esta estructura de datos alcanza cierto tamaño, se vuelca su contenido en la base de datos.
Configuración de RAID0 o RAID1 Agosto 1, 2008
Posted by ravelus in Informática.8 comments
Hace escasos días tuve que configurar un RAID 1 en un servidor HP Proliant DL140, con 1,60GHz Quad-Core (es decir, cuatro núcleos), 2GB de Memoria RAM, ampliables a 16GB de RAM, y dos discos duros de 80Gb que reemplazamos por dos discos de 500Gb. Al principio tuvimos problemas porque pensamos que faltaba el dispositivo hardware que conectaba la placa base a los discos para controlar los accesos a los mismos. Descargamos de la página de HP unos drivers para configurar un “array” en Windows pero al ejecutar dicha aplicación no encontraba los controladores adecuados, con lo cual la situación se puso peliaguda.
Después de dar unas vueltas más a la página de HP y consultar en internet, dimos con la opción adecuada a manipular en la BIOS. Esta opción, en una BIOS Phoenix se encuentra en la solapa Avanzadas>>Parallel SATA, que aparece como “Combined“; hay que cambiarla a “Enhanced“. Hecho esto aparece una opción para configurar como RAID, que pondremos a “Enabled“. Para otras versiones de la BIOS, consultad esta página: http://www.trucoswindows.com/tutoriales/tutorial.php/tutorial/3, donde se explica cómo configurar un RAID 0.
NOTA: Fuera de este tema, es importante marcar la opción del servidor que permite que éste se reinicie automáticamente tras una caída del sistema.
Una vez guardados estos cambios, reiniciamos el ordenador y aparece una nueva ventana para configurar el RAID; pulsando F8 en el caso del servidor que nos ocupa. Aparece una pantalla similar a la BIOS donde, en primer lugar, seleccionaremos las unidades que van a formar parte del RAID, guardaremos tal configuración, después seleccionaremos “Add Array”, indicando ambos discos, guardamos y al final le daremos un nombre al RAID y seleccionaremos si va a ser un RAID 0 o un RAID 1 (Mirror). Hecho esto, reiniciamos y cuando se cargan los drivers y testean los dispositivos aparece la configuración de ambos discos como RAID. Ahora, para instalar nuestro sistema operativo (vamos a suponer que es un Windows 2003 Server) necesitamos incluir, en el CD del S.O., los drivers correspondientes a la configuración RAID del equipo, que se encontrarán en el CD adjunto con la máquina (siempre y cuando ésta permita RAID, claro). Para ello copiamos todo el contenido del CD del S.O. a una carpeta local de un ordenador auxiliar que tengamos a mano, y copiamos los susodichos drivers en tal carpeta local.
Creamos una imagen ISO con estos ficheros y la grabamos en un CD que etiquetaremos como “S.O XXXX Configuración RAID X”. Para hacer un CD de Windows personalizado existe un programa muy útil llamado NLite (http://www.nliteos.com/). Para crear imágenes ISO podemos utilizar Nero, Alcohol120% o cualquier otro programa que permita esto. Yo lo hice con CDBurner, que a diferencia de otros, es gratuíto y bastante potente
(http://cdburnerxp.se/). A continuación procederemos a encender de nuevo nuestra máquina objetivo con el CD insertado. Esto se hace para que cuando el S.O. acceda a la controladora de disco y le diga quién es, Windows encuentre los drivers específicos en el propio CD inmediatamente, y no falle. Así, hecho esto, cuando arranque nuestro Windows 2003 Server y vaya a formatear, solamente verá un disco de 500Gb (configuración RAID 1 o Mirror: redundancia en ambos discos, que tienen los mismos datos, de manera que si uno se rompe el sistema puede funcionar perfectamente con el otro sin que el usuario se entere); si hubiéramos configurado un RAID 0 (virtualiza ambos discos duros como si fuera uno solo en una sola partición) nos aparecería un espacio de 1Tb.
Constatada esta información, podemos proseguir con la instalación del S.O. sin ningún problema. Éste nunca sabrá si había dos discos y su espacio de direcciones real, solamente sabe esto la controladora de disco, que realizará las operaciones oportunas según la configuración RAID almacenada en ella, a la hora de realizar lecturas o escrituras.
Espero que, aunque aquí he tratado un servidor muy concreto y dos tipos de RAID muy concretas, en algo haya ayudado a algún despistadillo que haya tenido problemas como yo; salvando, como digo, las diferencias de configuración RAID y máquina objetivo.
———————————————————————————————————————————
Fuentes y sitios útiles:
Tutorial para configurar RAID 0: http://www.trucoswindows.com/tutoriales/tutorial.php/tutorial/3
Sitio oficial de NLite: http://www.nliteos.com/
Sitio oficial de CDBurnerXP: http://cdburnerxp.se/

