<?xml version="1.0" encoding="iso-8859-1"?>
<!-- generator="blogia 2" -->
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>ÉL - GURÚ</title><link>http://elguru.blogia.com/</link><description><![CDATA[ En este blog pretendo plasmar esas ideas que de vez en cuando se me ocurren y que, la mayoría de veces, pienso que pueden cambiar el mundo. Pero que por falta de medios, la mayoría de veces, no puedo realizar.<br />Así que espero que alguna de estas ideas la lea alguien que la pueda hacer realidad, y que cuando lo haga se acuerde de mi...¡acepto un dinerito!<br /><address>escobal@goowy.com</address> 
]]></description><ttl>60</ttl><pubDate>Wed, 24 Oct 2007 14:33:40 -0500</pubDate><generator>http://www.blogia.com</generator><item>
<title>Actualizar un DataSet con PrimaryKeys autoincrementales o identidad</title>
	<link>http://elguru.blogia.com/2007/102401-actualizar-un-dataset-con-primarykeys-autoincrementales-o-identidad.php</link>
		<description>Por alguna razón puede que necesitemos recuperar un modelo de datos complejo, con relaciones entre tablas, a un DataSet. Durante todo el tiempo que trabajemos con este DataSet en memoria se pueden producir las tipicas operaciones CRUD (Create,...</description><comments>http://elguru.blogia.com/2007/102401-actualizar-un-dataset-con-primarykeys-autoincrementales-o-identidad.php#comments</comments>
	<pubDate>Wed, 24 Oct 2007 14:33:00 -0500</pubDate>
<category>Programación</category>
<guid>http://elguru.blogia.com/2007/102401-actualizar-un-dataset-con-primarykeys-autoincrementales-o-identidad.php</guid>
<content:encoded><![CDATA[	 <p>Por alguna razón puede que necesitemos recuperar un modelo de datos complejo, con relaciones entre tablas, a un <em>DataSet</em>. Durante todo el tiempo que trabajemos con este <em>DataSet</em> en memoria se pueden producir las tipicas operaciones CRUD (Create, Read, Update, Delete) de forma que los datos contenidos en el <em>DataSet</em> sean completamente diferentes a los que hay en la base de datos. Para la mayoría de casos el DataSet se maneja bastante bien a la hora de volcar los resultados de nuevo en base de datos ya que cada fila contenida en cada una de las tablas guardará su estado, mediante la enumeración <a href="http://msdn2.microsoft.com/en-us/library/system.data.datarowstate.aspx" target="_blank" title="DataRowState"><em>DataRowState</em></a> (Added, Deleted, Detached, Modified y Unchanged). </p><p>El "problema" surge cuando tenemos varios <em>DataTable</em> relacionados por columnas identidad o autoincrementales. En este caso mientras no vayamos a base de datos el <em>DataSet</em> asignará un valor propio a estas columnas que no tiene nada que ver con el que posteriormente en base de datos... ¿y donde surge el "problema"? cuando actualizamos el DataSet contra base de datos nos encontramos con que no solo tiene que hacer las operaciones necesarias CRUD contra la base de datos sino que además deberá actualizar los indices de los registros creados y a su vez de las tablas asociadas. Me he referido a problema entre comillas por que tiene una "fácil solución", también entre comillas. </p><p>Para que el <em>DataSet</em> se encargue de actualizar los valores de las columnas identidad y las referencias a estas en las tablas asociadas lo único que debemos hacer es asignar a la propiedad <em>UpdateRowSource</em>, del comando que este referenciado en la propiedad <em><a href="http://msdn2.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.insertcommand.aspx" target="_blank" title="InsertCommand">InsertCommand</a></em> del <em>DataAdapter</em>, el valor <font size="2"><a href="http://msdn2.microsoft.com/en-us/library/system.data.updaterowsource(vs.80).aspx" title="UpdateRowSource"><em>UpdateRowSource</em></a>.Both. Y ya está: <strong>las columnas se actualizarán automáticamente tanto en la tabla afectada como en las tablas relacionadas dentro del DataSet</strong>.</font></p><p><font size="2">Pero aún nos queda el problema, sin comillas. Se trata de un problema con la forma que tienen de trabajar los <span class="searchword0"><em>DataSet</em></span> en .NET cuando al insertar utilizamos el valor <em>UpdateRowSource.Both</em> en la propiedad <em>UpdatedRowSource</em> del comando que se le pasa al <em>DataAdapter</em>. Esta propiedad hace que al insertar un registro en una tabla con una clave autonumérica: la recoja y actualice esta clave por la que contenía el registro, dentro del <em>DataTable</em> en el <em><span class="searchword0">DataSet,</span></em> y, a su vez, la de todos las columnas de <em>DataTable</em> que tengan relaciones con esa. <br />El problema surge cuando el identificador devuelto de base de datos es un identificador ya existente dentro del <em>DataTable</em> en el <em><span class="searchword0">DataSet</span></em>. Por ejemplo: <br /><em> </em></font></p><font size="2"><font style="background-color: #ffff99"><em>Nosotros recuperamos un conjunto de filas de las tablas A, B y C que estan relacionadas entre sí y además con la tabla D y decidimos insertar esos registros de nuevo cambiando el registro de la tabla D con el que estan relacionados. Es decir copiariamos los datos relacionados de un registro en la tabla D para otro.<br />Si los registros que recuperamos de la tabla A tienen los Id&amp;#39;s 100 y 101 de la base de datos, en el <span class="searchword0">DataSet</span> se asignaran tambien estos y el Id para el siguiente registro insertado será 102. <br />Si insertamos otro registro en el DataSet, le asignará el Id 102, y al volcar los cambios a base de datos -no hay que olvidar que hará una inserción ya que lo único que hicimos al recuperar fue leerlos dejando los DataRow con DataRowState.Added-, se asignará para el Id 100 en el DataSet el Id 102 en base de datos. Al actualizarse automáticamente el Id del DataSet intentará ponerle 102 cosa que nos dará una excepción de clave duplicada: por el registro que habiamos insertado</em> <br /></font></font><font size="2"><div class="comment searchable"><p>Este problema es un caso muy concreto pero se nos puede reproducir en otras ocasiones como al dar de alta tantos registros más uno como los que contenga la tabla leída de base de datos, de esta forma el identificador del último elemento de la <em>DataTable</em>, en el <em>DataSet</em>, podría tratarse del identificador que la base de datos otorgué al primer elemento insertado en la tabla al volcar los datos del <em>DataSet</em> mediante el método <em>Update</em> del <em>DataAdapter</em>, con lo cual obtendriamos la citada excepción.</p><p>Una solución elegida es modificar la semilla de la columna del <em>DataTable, <font size="2"><a href="http://msdn2.microsoft.com/en-us/library/system.data.datacolumn.autoincrementseed.aspx" title="AutoIncrementSeed">AutoIncrementSeed</a>,</font></em> de forma que buscamos en base de datos el identificador mayor y le sumamos el número de registros recuperados de base de datos más 1. Para otros casos la solución también sería jugar con la semilla del <em>DataTable.</em><br /></p></div></font><p><font size="2"></font></p>	
]]></content:encoded>
</item><item>
<title>Obtener un conjunto de tablas en un DataSet (.NET)</title>
	<link>http://elguru.blogia.com/2007/091201-obtener-un-conjunto-de-tablas-en-un-dataset-.net-.php</link>
		<description>Si bien un DataAdapter crea varias tablas en el DataSet cuando encuentra múltiples conjuntos de resultados -tablas devueltas a una o varias consultas sql-, pueden existir casos en los que nos sea necesario obtener la misma ...</description><comments>http://elguru.blogia.com/2007/091201-obtener-un-conjunto-de-tablas-en-un-dataset-.net-.php#comments</comments>
	<pubDate>Wed, 12 Sep 2007 16:33:00 -0500</pubDate>
<category>Programación</category>
<guid>http://elguru.blogia.com/2007/091201-obtener-un-conjunto-de-tablas-en-un-dataset-.net-.php</guid>
<content:encoded><![CDATA[	 <p>Si bien un <a href="http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpguide/html/cpconpopulatingdatasetfromdataadapter.asp" target="_blank">DataAdapter</a> crea varias tablas en el DataSet cuando encuentra múltiples conjuntos de resultados -tablas devueltas a una o varias consultas sql-, pueden existir casos en los que nos sea necesario obtener la misma funcionalidad en una consulta que devuelve el conjunto de resultado en el formato XML que devuelven las consultas ejecutadas con FOR XML. Por ejemplo la siguiente consulta SQL:</p><p style="background-color: #c0c0c0"><font size="2" color="#0000ff">SELECT *<br />FROM [PLPC_Agrupacio]<br />FOR XML RAW, XMLDATA</font></p><p>Cuyo resultado será:</p><p style="background-color: #c0c0c0"><font size="2" color="#0000ff"><<font size="2" color="#800000">Schema</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">name</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">Schema3</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">xmlns</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">urn:schemas-microsoft-com:xml-data</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">xmlns:dt</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">urn:schemas-microsoft-com:datatypes</font><font size="2">"</font><font size="2" color="#0000ff">><br /><</font><font size="2" color="#800000">ElementType</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">name</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">row</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">content</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">empty</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">model</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">closed</font><font size="2">"</font><font size="2" color="#0000ff">><br /><</font><font size="2" color="#800000">AttributeType</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">name</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">PLPC_AgrupacioId</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">dt:type</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">i4</font><font size="2">"</font><font size="2" color="#0000ff"> /><br /><</font><font size="2" color="#800000">AttributeType</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">name</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">PLPC_ConvocatoriaId</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">dt:type</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">uuid</font><font size="2">"</font><font size="2" color="#0000ff"> /><br /><</font><font size="2" color="#800000">AttributeType</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">name</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">PLPC_CodiAgrupacio</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">dt:type</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">i4</font><font size="2">"</font><font size="2" color="#0000ff"> /><br /><</font><font size="2" color="#800000">AttributeType</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">name</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">PLPC_AgrupacioNom</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">dt:type</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">string</font><font size="2">"</font><font size="2" color="#0000ff"> /><br /><</font><font size="2" color="#800000">attribute</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">type</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">PLPC_AgrupacioId</font><font size="2">"</font><font size="2" color="#0000ff"> /><br /><</font><font size="2" color="#800000">attribute</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">type</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">PLPC_ConvocatoriaId</font><font size="2">"</font><font size="2" color="#0000ff"> /><br /><</font><font size="2" color="#800000">attribute</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">type</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">PLPC_CodiAgrupacio</font><font size="2">"</font><font size="2" color="#0000ff"> /><br /><</font><font size="2" color="#800000">attribute</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">type</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">PLPC_AgrupacioNom</font><font size="2">"</font><font size="2" color="#0000ff"> /><br /></</font><font size="2" color="#800000">ElementType</font><font size="2" color="#0000ff">><br /></</font><font size="2" color="#800000">Schema</font><font size="2" color="#0000ff">><br /><</font><font size="2" color="#800000">row</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">xmlns</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">x-schema:#Schema3</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">PLPC_AgrupacioId</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">40</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">PLPC_ConvocatoriaId</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">081F2367-1121-4804-B66A-DAA92A89F3C8</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000"><br />PLPC_CodiAgrupacio</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">1</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">PLPC_AgrupacioNom</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">grup 1</font><font size="2">"</font><font size="2" color="#0000ff"> /><br /><</font><font size="2" color="#800000">row</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">xmlns</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">x-schema:#Schema3</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">PLPC_AgrupacioId</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">41</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">PLPC_ConvocatoriaId</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">081F2367-1121-4804-B66A-DAA92A89F3C8</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">PLPC_CodiAgrupacio</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">2</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">PLPC_AgrupacioNom</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">grup 2</font><font size="2">"</font><font size="2" color="#0000ff"> /><br /><</font><font size="2" color="#800000">row</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">xmlns</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">x-schema:#Schema3</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">PLPC_AgrupacioId</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">42</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">PLPC_ConvocatoriaId</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">081F2367-1121-4804-B66A-DAA92A89F3C8</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">PLPC_CodiAgrupacio</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">3</font><font size="2">"</font><font size="2" color="#0000ff"> </font><font size="2" color="#ff0000">PLPC_AgrupacioNom</font><font size="2" color="#0000ff">=</font><font size="2">"</font><font size="2" color="#0000ff">grup 3</font><font size="2">"</font><font size="2" color="#0000ff"> /></font></font> </p><p>Para ello utilizaremos un DataSet y el método <a href="http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpref/html/frlrfSystemDataDataSetClassReadXmlTopic6.asp" target="_blank">ReadXml</a> de este. Mediante el parametro mode, que es del tipo <a href="http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpref/html/frlrfsystemdataxmlreadmodeclasstopic.asp" target="_blank">XmlReadMode</a> -una enumeración-, le indicaremos que utilize el modo <em>ReadSchema</em> que lee cualquier esquema en línea y carga los datos de modo que si el DataSet ya contiene un esquema se agregan las nuevas tablas -se lanza una excepción si cualquier tabla del esquema en línea ya existe en el DataSet.</p><p style="background-color: #c0c0c0">SqlConnection dataBaseConnection = <font size="2" color="#0000ff">null</font><font size="2">;<br />SqlCommand dataBaseCommand;<br />SqlDataReader dataBaseReader = <font size="2" color="#0000ff">null</font><font size="2">;<br />StringBuilder xmlResult = <font size="2" color="#0000ff">new</font><font size="2"> StringBuilder();<br />DataSet result = <font size="2" color="#0000ff">new</font><font size="2"> DataSet ();<br /></font></font></font></font><font size="2">System.IO.StringReader reader;<br /><br />dataBaseConnection = <font size="2" color="#0000ff">new</font><font size="2"> SqlConnection(connectionString);<br />dataBaseCommand = <font size="2" color="#0000ff">new</font><font size="2"> SqlCommand("PLPC_SP_ObtenirAgrupacions", dataBaseConnection);<br />dataBaseCommand.CommandType = CommandType.StoredProcedure;<br />dataBaseCommand.Parameters.Add("@PLPC_ConvocatoriaId", SqlDbType.UniqueIdentifier).Value = convocatoriaId; <br /><br /></font></font><font size="2"><font size="2">dataBaseConnection.Open();<br />dataBaseReader = dataBaseCommand.ExecuteReader();xmlResult.Append ("<root>");<br /></font></font></font><font size="2"><font size="2"><font size="2"><font size="2" color="#0000ff">while</font><font size="2"> (dataBaseReader.Read())<br />{<br /></font></font></font></font><font size="2"><font size="2"><font size="2"><font size="2">    xmlResult.Append (dataBaseReader.GetString(0));<br />}<br /><br />xmlResult.Append ("</root>");<br />reader = <font size="2" color="#0000ff">new</font><font size="2"> System.IO.StringReader (xmlResult.ToString());<br />result.ReadXml (reader, XmlReadMode.ReadSchema);<br />dataBaseReader.Close();<br />result.Tables[0].TableName = "PLPC_Agrupacio";<br />dataBaseCommand.CommandText = "PLPC_SP_ObtenirPlans";<br />dataBaseCommand.CommandType = CommandType.StoredProcedure;<br />xmlResult.Remove (0, xmlResult.Length);<br />xmlResult.Append ("<root>");<br /><br />dataBaseReader = dataBaseCommand.ExecuteReader(CommandBehavior.CloseConnection);<br /><font size="2" color="#0000ff">while</font><font size="2"> (dataBaseReader.Read())<br />{<br />    xmlResult.Append (dataBaseReader.GetString(0));<br />}<br />xmlResult.Append ("</root>");<br />reader = <font size="2" color="#0000ff">new</font><font size="2"> System.IO.StringReader (xmlResult.ToString());<br />result.ReadXml (reader, XmlReadMode.ReadSchema); <br />dataBaseReader.Close();<br />result.Tables[1].TableName = "PLPC_Pla";<br />result.DataSetName = "Convocatoria";</font></font></font></font></font></font></font></p><p><font style="background-color: #ffff33">Con este metodo es necesario ejecutar varias consultas asi que estoy abierto a metodos mejores.</font></p><p>No hay que olvidar que las relaciones entre las tablas y las restricciones dentro del DataSet y las deberemos crear mediante código una vez devuelto el conjunto de resultados.</p>	
]]></content:encoded>
</item><item>
<title>Consultas SQL para modificar el resultado de una columna en base a una condición (Transact-SQL)</title>
	<link>http://elguru.blogia.com/2007/090601-consultas-sql-para-modificar-el-resultado-de-una-columna-en-base-a-una-condicion.php</link>
		<description>Hay veces que tenemos la necesidad de obtener un resultado diferente al de una columna en base a este. Por ejemplo, podriamos necesitar que una columna nos indicase si tiene o no informado valor de una forma más legible indicando &amp;#39;CIE...</description><comments>http://elguru.blogia.com/2007/090601-consultas-sql-para-modificar-el-resultado-de-una-columna-en-base-a-una-condicion.php#comments</comments>
	<pubDate>Thu,  6 Sep 2007 11:44:00 -0500</pubDate>
<category>Programación</category>
<guid>http://elguru.blogia.com/2007/090601-consultas-sql-para-modificar-el-resultado-de-una-columna-en-base-a-una-condicion.php</guid>
<content:encoded><![CDATA[	 <p>Hay veces que tenemos la necesidad de obtener un resultado diferente al de una columna en base a este. Por ejemplo, podriamos necesitar que una columna nos indicase si tiene o no informado valor de una forma más legible indicando &amp;#39;CIERTO&amp;#39; o &amp;#39;FALSO&amp;#39;.</p><p>Para lograr esto utilizamos la función <a href="http://msdn2.microsoft.com/en-us/library/ms181765.aspx" target="_blank" title="CASE de Transact-SQL">CASE de Transact-SQL</a>:</p><div style="background-color: silver"><p>CASE<br />     WHEN Boolean_expression THEN result_expression <br />    [ ...n ] <br />     [ <br />    ELSE else_result_expression <br />     ] <br />END</p></div><p>Como ejemplo de uso podriamos utilizar una consulta que indicaque si un contacto dispone de telefono para contactar con él:</p><div style="background-color: silver"><p>SELECT FirstName, Lastname, &amp;#39;Has Telephone to Contact&amp;#39; = <br />     CASE<br />          WHEN TelephoneNumber IS NULL THEN CAST (0 AS BIT)<br />          ELSE CAST (1 AS BIT)<br />     END<br /></p></div>	
]]></content:encoded>
</item><item>
<title>Hagamos más interactivas nuestras ciudades</title>
	<link>http://elguru.blogia.com/2007/012501-hagamos-mas-interactivas-nuestras-ciudades.php</link>
		<description>Hoy en día encontramos a nuestro alcance cantidad de dispositivos que disponen de una conexión WIFI. Cada vez existen más puntos de conexión en diferentes locales que por el mero hecho de consumir te proporcionan una conex...</description><comments>http://elguru.blogia.com/2007/012501-hagamos-mas-interactivas-nuestras-ciudades.php#comments</comments>
	<pubDate>Thu, 25 Jan 2007 21:46:00 -0600</pubDate>
<category>Mejoras sobre productos existentes</category>
<guid>http://elguru.blogia.com/2007/012501-hagamos-mas-interactivas-nuestras-ciudades.php</guid>
<content:encoded><![CDATA[	 <p>Hoy en día encontramos a nuestro alcance cantidad de dispositivos que disponen de una conexión <a href="http://es.wikipedia.org/wiki/Wifi" target="_blank">WIFI</a>. Cada vez existen más puntos de conexión en diferentes locales que por el mero hecho de consumir te proporcionan una conexión gratuita a Internet.</p><p>Todo esto es muy interesante pero: ¿por qué no llevarlo más allá? ¿Nunca os habéis encontrado en vuestra ciudad y habéis tenido la necesidad de saber donde había una oficina de correo en los alrededores o un bar de un cierto tipo de música?</p><p>Seguramente a través del móvil ya se están ofreciendo servicios similares, e incluso con conexión a Internet a través de cualquiera de las tecnologías que ofrecen conexión inalámbrica móvil podamos conseguirlo.</p><p>Mi idea es más simple, más económica para el consumidor final y beneficiosa para el proveedor. Dado mi desconocimiento en profundidad de la tecnología no se si es factible pero con los constantes avances tecnológicos me extrañaría que no fuera posible. ¡Bueno dejo de dar vueltas y al grano!</p><p>Se trata de proporcionar una conexión WIFI a Internet en la calle, por ejemplo el centro de una ciudad. Esto suena algo alocado, pero si yo de colocando un simple router WIFI ADSL en mi casa me puedo conectar desde casa de mi vecino, con uno más potente seguramente pueda cubrir distancias mayores. <br />La idea es simple, el ayuntamiento provee una infraestructura montada de tal forma que solo pueda accederse a una página Web, del mismo ayuntamiento. Dicha página Web provee un servicio de callejero y demás servicios relacionados donde podamos encontrar peluquerías, restaurantes, bares, monumentos...lo que sea. Pero, claro está, para figurar en dicho callejero se debe pagar una cuota mensual haciendo que de esta forma se rentabilice en parte el servicio. Así de esta forma, y siempre que se pague lo suficiente, el callejero nos puede indicar la mejor calle para llegar un destino antes que otra siempre y cuando los comercios de esa calle estén abonados.<br />De esta forma el servicio se autofinancia, los locales obtienen una publicidad y afluencia mayor, la ciudad gana prestigio por innovación tecnológica y el ciudadano sale ganando con un servicio, que aunque fuertemente cargado de publicidad, le proporciona un valor añadido muy alto.</p><p>¿Veremos esto algún día en alguna ciudad de España? ¿O tal vez exista ya en algún lugar del mundo?</p>	
]]></content:encoded>
</item><item>
<title>¡Muerte al mercado discográfico actual!</title>
	<link>http://elguru.blogia.com/2006/121201--muerte-al-mercado-discografico-actual-.php</link>
		<description> No pretendo ser incendiario pero creo que hasta el más despistado habrá notado que cada vez se compran menos discos, menos gente lleva un discman por la calle, se descargan más mp3...vamos que algo ha cambiado respecto al m...</description><comments>http://elguru.blogia.com/2006/121201--muerte-al-mercado-discografico-actual-.php#comments</comments>
	<pubDate>Tue, 12 Dec 2006 21:21:00 -0600</pubDate>
<category>Mejoras sobre productos existentes</category>
<guid>http://elguru.blogia.com/2006/121201--muerte-al-mercado-discografico-actual-.php</guid>
<content:encoded><![CDATA[	 <p> </p><p>No pretendo ser incendiario pero creo que hasta el más despistado habrá notado que cada vez se compran menos discos, menos gente lleva un discman por la calle, se descargan más mp3...vamos que algo ha cambiado respecto al mercado discográfico de toda la vida.</p><p>Y es que todos sabemos que el negocio esta en la red de redes. Sí, ya existen portales desde el cual te descargas las canciones que te gustan y que, incluso, puedes escuchar un pedazo para ver si te gusta y descargártela. Pero en este caso mi propuesta no va por aquí, tal vez sea una propuesta más desacertada de lo habitual, ya que le daré la espalda a internet.</p><p>Siempre expongo el tema desde lo que a mi me gustaría. El problema del CD o el DVD es el espacio que ocupan. Si todos tuviésemos todos los CD&amp;#39;s de la música que almacenamos en formato MP3 en diferentes medios, seguramente, no cabría nada más en nuestros armarios. Este problema a mi me ha hecho no comprar algún disco viejo y buenísimo que he visto de saldo...¿donde lo meto? </p><p>Por otro lado yo no tengo un discman, como mucho un reproductor de los incomprendidos cedes de 8 cm. Entonces cuando compro un disco tengo que irme corriendo a mi casa a poder escucharlo en mi ordenador o cadena HI-FI o radio CD o cualquier otro artilugio que te regalen en Telepizza. De nuevo estamos ante un caso en el cual la tecnología avanza a pasos agigantados y los monstruos empresariales siguen anclados en el siglo XX.</p><p><strong>Demos el paso al siglo XXI</strong></p><p>En este caso mi idea, a mi entender, es minoritaria seguramente, pero creo que con su parte de mercado. Hoy en día triunfa el mp3, a la espera que el formato mp4 se lo meriende -un tanto difícil si tenemos en cuenta lo arraigado que esta mp3 como marca entre la gente. ¿Por qué seguimos sacando discos normales sin ser mp3? Ya se que hay muchos reproductores que no lo soportan, lo mismo pasaba cuando el DVD sustituyo al VHS.</p><p>Ya tenemos el mp3, pero ¿para que necesito un CD de 800 Megabytes de capacidad cuando un disco no ocuparía mas de 300 Megabytes en muy buena calidad?¡Cambiemos el formato! Y ya que lo cambiamos seamos inteligentes y vendamos algo más pequeño y que este generalizado: memorias flash. SD/MMC sería un buen ejemplo, ahora mi disco no ocupa apenas espacio y lo puedo conectar directamente en cientos de dispositivos diferentes. Personalmente no creo que hubiera un aumento de costes brutal al utilizar este método, menos cuando obtengo un producto con valor añadido donde puedo almacenar mis cosas -siempre y cuando se sea tan generoso de permitir utilizar el resto de la memoria para usos propios.</p><p>Pero a mi esta idea no me acaba de gustar, aunque la podríamos complementar de cientos de formas y seguir haciendo castillos en el aire. Dado el avance tecnológico que tenemos, la globalización y la bajada de costes de producción, unida a la ampliación del margen de beneficios, creo que sería posible y viable la comercialización de un disco insertado en la memoria de un reproductor mp3. Este reproductor debería ser lo suficiente simple para que fuera económico, pero también podría estar personalizado para el disco. Este mismo reproductor podría permitir cambiar la tarjeta SD/MMC y escuchar otra música. Pero lo más importante es que me permitiría irme a casa escuchando mi disco una vez hubiera pagado.</p><p>Pero todo esto sigue siendo engorroso, aunque esta bien a la hora de realizar regalos, podríamos extendernos con miles de ideas como la posibilidad de descargar directamente el disco en mi reproductor en el propio establecimiento de venta a un precio menor que la edición de "lujo".</p><p>La idea esta clara: el CD a muerto, la venta de discos debe modificarse y darse cuenta que como soporte físico debe proporcionar ediciones de lujo que aporten valor y que debe dar la posibilidad de obtener la música, a un precio más económico, mediante descargas por Internet o en el propio establecimiento.</p><p>Este es mi deseo y previsión y espero que algún día se haga realidad.</p>	
]]></content:encoded>
</item><item>
<title>El nuevo Trivial Pursuit</title>
	<link>http://elguru.blogia.com/2006/120501-el-nuevo-trivial-pursuit.php</link>
		<description>Para empezar este blog lo haré con mi última ocurrencia o idea sobre el juego de mesa Trivial Pursuit. Llevo mucho tiempo detrás de este juego para comprarlo pero su precio un tanto elevado me hace considerarlo un gasto secundari...</description><comments>http://elguru.blogia.com/2006/120501-el-nuevo-trivial-pursuit.php#comments</comments>
	<pubDate>Tue,  5 Dec 2006 20:52:00 -0600</pubDate>
<category>Mejoras sobre productos existentes</category>
<guid>http://elguru.blogia.com/2006/120501-el-nuevo-trivial-pursuit.php</guid>
<content:encoded><![CDATA[	 <p align="justify">Para empezar este blog lo haré con mi última ocurrencia o idea sobre el juego de mesa <a href="http://es.wikipedia.org/wiki/Trivial_Pursuit">Trivial Pursuit</a>. Llevo mucho tiempo detrás de este juego para comprarlo pero su precio un tanto elevado me hace considerarlo un gasto secundario. </p><p align="justify">Lo interesante es que te encuentras con varias ediciones de este conocido juego de mesa: Star Wars, El señor de los anillos, Disney, Genius Edition... Y varias de ellas adjuntan un DVD, lo cual le proporciona un toque de interactividad. Pero, en pleno siglo XXI, en la sociedad del conocimiento, resulta que toda la interactividad que se les ocurre es un simple DVD ¿?. Curioso, cuanto menos.</p><p align="justify">Y aquí entra mi opinión: ¿Como me gustaría que fuera el juego ideal?. Lo primero interactivo, el escuchar música, voces y ver imágenes le proporciona una ayuda pero no creo que el DVD sea la solución. Para utilizar el DVD necesito una televisión con un reproductor de DVD&amp;#39;s o un ordenador...¡por favor! estamos compitiendo con videoconsolas de última generación. Otro aspecto de un DVD es que nos limita a un espacio físico y no nos permite disfrutar de nuestro juego en cualquier lugar. Por otro lado tenemos la clásica versión de las tarjetitas de cartón que es muy funcional pero un tanto insípida en una sociedad donde PDA, iPod y PSP esta a la orden del día. </p><p align="justify">Yo planteo la creación de una centralita electrónica encargada de realizar las preguntas: no más tarjetas perdidas. Además de contener las preguntas debería poder hacer funciones multimedia con una pantalla de tamaño reducido y unos altavoces. Y no estaría mal que pudiera contener un perfil de los usuarios que juegan, de esta forma no les repetirá preguntas. ¿Para qué quiero 3.000 preguntas si casi siempre me salen las mismas? ¿No habéis tenido nunca la sensación que ese tío se sabía ya la respuesta de carrerilla de cuantos kilómetros cuadrados tiene Madagascar? -Son 587.041 kilómetros cuadrados- Con este sistema lo evitaríamos en gran medida. <br />Hasta ahora tenemos un sistema funcional por si mismo, existen las baterías de litio que son muy baratas así que no nos preocupan temas de consumo energético. Pero estoy aquí para soñar y fantasear: ¿que tal si pudiese descargar durante 1 año nuevas preguntas desde Internet? Yo creo que esto me acabaría de convencer para pagar más dinero por esta edición que por una en DVD o clásica. Por qué claro esta que hay que dedicar un tiempo de I+D y una inversión en estas centralitas, que no creo que su producción en masa hiciese que el producto final valiese más de 100&amp;euro;-120&amp;euro;. Yo estaría dispuesto a pagar la diferencia por obtener este producto más moderno, más útil y más duradero, ¿por que no poder descargar preguntas previo pago de 20&amp;euro; cuando yo desee? No creo que sea tan mal negocio para el señor Pursuit.</p><p align="justify">Esta es mi aportación. ¿Cuando la veremos en las tiendas?. Recordad la fecha de publicación de este artículo. Hasta pronto.</p>	
]]></content:encoded>
</item></channel></rss>