El País Semanal vs. XLSemanal

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…

Conclusiones: me quedo con el XLSemanal. Mucho más interesante, aunque algunas entrevistas y reportajes de El País Semanal también están bastante bien, lo que ocurre es que como revista, como cuerpo, visto como un todo, pierde bastante. A pesar de esto, XLSemanal tiene puntos fuertes muy fuertes pero también puntos débiles que creo que deberían cambiar profundamente.

Inserciones masivas de Base de Datos en C#

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.

Llamar a las cosas por su nombre

Hace pocas semanas conseguimos escuchar a Zapatero hablar, por fin, de crisis económica. Aparte de ser esto todo un evento social, por fin nos indica un cambio en la mentalidad de nuestro Gobierno. Bueno, eso o quizás sea que no le han quedado más huevos que reconocer la triste y cruda realidad de nuestro país.

Lo que más gracia me hace de todo el asunto es que el señor Ministro de Economía se escuda en que esta es una crisis sin precedentes, en que ha tenido lugar un cúmulo de circunstancias que han coincidido en el complejo espacio-tiempo y nos ha reventado en nuestro esplendoroso culo. Señor Ministro: si esta es una crisis peor que la de 1995 y en aquella ocasión acabamos muy mal, con la Seguridad Social, la Hacienda y el Paro en cifras históricas (históricamente malas, quiero decir), no me quiero imaginar la cagada que cometerá vuestra Inutil Señoría en esta “crisis sin precedentes”. Para agarrarse las polainas y sujetarse los machos.

Volviendo al asunto de la retórica y la palabrería barata en política, es increíble la cantidad de nuevos términos que nos aportan nuestros queridos políticos. No creo que suceda nada similar en ningún país del mundo. Maldita lengua cervantina, tan rica en sinónimos, tan fértil en expresividad, tan bella en sus términos… Para que luego digamos que no se lo curran, que no conocen nuestro idioma, que nuestra Ministra de Igualdad dice miembros y “miembras” (todavía me duelen los oídos, se lo prometo). Es increíble cómo, cuando la necesidad aprieta, el político transforma toda su incompetencia en una increíble habilidad para dominar la lengua y las expresiones bien construídas. Qué lástima que no utilicen ese enorme talento para tomar medidas tan efectivas y elegantes como su pomposa verborrea.

Esta gente no tiene ni puta idea de lo que ocurre en la calle. Por eso tenemos la horrible sensación de que se están cachondeando de nuestra jeta. Porque no es normal que jueguen con nosotros con términos ambiguos y planes de contingencia de patio de colegio. Esta gente no conoce al pobre inmigrante ecuatoriano al que el problema en el sector de la construcción le ha mandado a la calle, sin apenas paro y con una hipoteca del carajo. Y su esposa con un churumbel en camino, a 4 meses para el impacto. Y como esto existen cientos de miles de casos más, e incluso peores.

La gente sabe que estamos en crisis, la gente no es tonta, la gente ve día a día los precios de las cosas, el entorno en cuanto a la situación de vecinos, familiares, conocidos, etc. Sabe perfectamente cómo están las cosas y no hace falta que nadie les cuente milongas, porque ya sabemos bien cómo está el percal. Por esta razón cuando ves a un mequetrefe encorbatado rodeado de alcachofas portadas por periodistas en ristre, nos sentimos imbéciles, estafados, ninguneados, y nos imaginamos a todos estos partiéndose de risa a nuestra espalda y comiendo… no precisamente conejo.

Pues sí, señor Zapatero, lo que nosotros tenemos se denomina crisis; del mismo modo que su forma de gobernar se denomina incompetente.

Configuración de RAID0 o RAID1

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/