Blog con trucos y utilidades para desarrollo de aplicaciones. Desde SQL Server, C#, LINQ, Visual Basic, WPF, VSTO, Office, Silverlight y todo lo que pasa por mis manos en el día a día.
martes, marzo 25, 2014
Megaevento Gusenet 2014
más información en http://www.gusenet.org y registro en la misma web.
domingo, abril 10, 2011
Windows Phone 7, Android e IOS (I)
Análisis
Antes de nada y ante la variedad de los distintos dispositivos con sus distintos SO tuve que tomar una decisión de por donde empujar y como afrontar un proyecto tan variopinto y con tantas diferencias de implementación.
Lo primero es informarme del "cómo" y para eso busqué en la red para encontrar estos links que me han parecido los más interesantes para empezar:
Windows Phone 7
http://channel9.msdn.com/Blogs/channel9spain/Windows-Phone-7-herramientas-de-desarrollo-y-vender-en-MarketPlace
http://create.msdn.com/es-ES/
http://msdn.microsoft.com/en-us/WP7TrainingCourse
http://jonsegador.com/2010/02/tutorial-android-paso-a-paso-desarrollo-aplicacion-notepad/
ttp://geeks.ms/blogs/jorge/archive/2011/03/01/instalando-monodroid-aplicaciones-android-con-net.aspx
http://developer.apple.com/devcenter/ios/index.action
http://www.maclatino.com/tutoriales-iphone-sdk-y-%C2%A1en-espanol/
http://www.migueldiazrubio.com/2010/11/08/desarrollo-ios-10-sencillos-pasos-para-desarrollar-un-proyecto-para-iphone/
http://www.codeproject.com/KB/iPhone/iOSGetStarted00.aspx
Una vez que conozco las distintas tecnologías y terminado el análisis empezamos con el diseño de la aplicación, pero antes de nada hay que investigar con las distintas herramientas y la facilidad de desarrollo que me ofrecen.
sábado, julio 10, 2010
Algoritmo C# para dendrograma VI (Datos)
Descripción de los datos:
Title: Acute Inflammations
Abstract: The data was created by a medical expert as a data set to test
the expert system, which will perform the presumptive diagnosis of two
diseases of the urinary system.
----------------------------------------------------------------------------
Data Set Characteristics: Multivariate
Attribute Characteristics: Categorical, Integer
Associated Tasks: Classification
Number of Instances: 120
Number of Attributes: 6
Missing Values? No
Area: Life
Date Donated: 2009-02-11
----------------------------------------------------------------------------
Source:
Jacek Czerniak, Ph.D., Assistant Professor
Systems Research Institute
Polish Academy of Sciences
Laboratory of Intelligent Systems
ul. Newelska 6, Room 218
01-447 Warszawa, Poland
e-mail: jacek.czerniak 'at' ibspan.waw.pl or jczerniak 'at' ukw.edu.pl
----------------------------------------------------------------------------
Data Set Information:
The main idea of this data set is to prepare the algorithm of the expert
system, which will perform the presumptive diagnosis of two diseases of
urinary system. It will be the example of diagnosing of the acute
inflammations of urinary bladder and acute nephritises. For better
understanding of the problem let us consider definitions of both
diseases given by medics. Acute inflammation of urinary bladder is
characterised by sudden occurrence of pains in the abdomen region and
the urination in form of constant urine pushing, micturition pains and
sometimes lack of urine keeping. Temperature of the body is rising,
however most often not above 38C. The excreted urine is turbid and
sometimes bloody. At proper treatment, symptoms decay usually within
several days. However, there is inclination to returns. At persons with
acute inflammation of urinary bladder, we should expect that the illness
will turn into protracted form.
Acute nephritis of renal pelvis origin occurs considerably more often at
women than at men. It begins with sudden fever, which reaches, and
sometimes exceeds 40C. The fever is accompanied by shivers and one- or
both-side lumbar pains, which are sometimes very strong. Symptoms of
acute inflammation of urinary bladder appear very often. Quite not
infrequently there are nausea and vomiting and spread pains of whole
abdomen.
The data was created by a medical expert as a data set to test the
expert system, which will perform the presumptive diagnosis of two
diseases of urinary system. The basis for rules detection was Rough Sets
Theory. Each instance represents an potential patient.
The data is in an ASCII file. Attributes are separated by TAB. Each line
of the data file starts with a digit which tells the temperature of patient.
-- Attribute lines:
For example, '35,9 no no yes yes yes yes no'
Where:
'35,9' Temperature of patient
'no' Occurrence of nausea
'no' Lumbar pain
'yes' Urine pushing (continuous need for urination)
'yes' Micturition pains
'yes' Burning of urethra, itch, swelling of urethra outlet
'yes' decision: Inflammation of urinary bladder
'no' decision: Nephritis of renal pelvis origin
----------------------------------------------------------------------------
Attribute Information:
a1 Temperature of patient { 35C-42C }
a2 Occurrence of nausea { yes, no }
a3 Lumbar pain { yes, no }
a4 Urine pushing (continuous need for urination) { yes, no }
a5 Micturition pains { yes, no }
a6 Burning of urethra, itch, swelling of urethra outlet { yes, no }
d1 decision: Inflammation of urinary bladder { yes, no }
d2 decision: Nephritis of renal pelvis origin { yes, no }
----------------------------------------------------------------------------
Relevant Papers:
J.Czerniak, H.Zarzycki, Application of rough sets in the presumptive
diagnosis of urinary system diseases, Artifical Inteligence and Security
in Computing Systems, ACS'2002 9th International Conference Proceedings,
Kluwer Academic Publishers,2003, pp. 41-51
----------------------------------------------------------------------------
Citation Request:
Please cite:
J.Czerniak, H.Zarzycki, Application of rough sets in the presumptive
diagnosis of urinary system diseases, Artifical Inteligence and Security
in Computing Systems, ACS'2002 9th International Conference Proceedings,
Kluwer Academic Publishers,2003, pp. 41-51
Algoritmo C# para dendrograma V
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PR_IA2_2010_Clases
{
static public class Algoritmos
{
///
/// Algoritmo para el cálculo de la distancia Euclidea entre los
/// objetos a partir de los distintos atributos.
///
/// Lista de arrays de strings que representan
/// los atributos de los objetos
///
/// distancias euclideas entre los objetos
static public double[,] distanciaEuclidea(List
{
try
{
double[,] matriz = null;
//creamos la matriz de distancias en el intervalo [0,1]
//con la distancia media según el nº de atributos (6):
if (datos.Count>0)
{
matriz = new double[datos.Count, datos.Count];
for (int i = 0; i < datos.Count; i++)
{
for (int j= 0; j < datos.Count ; j++)
{
double suma = 0;
for (int k = 0; k < datos[i].Count() - 2; k++)
{
suma+=Math.Pow(double.Parse(datos[i][k])-double.Parse(datos[j][k]),2);
}
double result = Math.Sqrt(suma);
matriz[i, j] = 1-(result/6);
}
}
}
return matriz;
}
catch (Exception ex)
{
new Exception(ex.Message);
}
return null;
}
///
/// Algoritmo que calcula la matriz de semejanzas transitiva a partir
/// de una no transitiva.
///
/// Matriz de semejanzas no transitiva
///
static public double[,] clausuraTransitiva(double[,] S)
{
try
{
double[,] R;
do
{
R = (double[,])S.Clone();
S = composicion(R, (double[,])R.Clone());
}while (!iguales(S,R));
return S;
}
catch (Exception ex)
{
new Exception(ex.Message);
}
return null;
}
///
/// composición de las semejanzas de una clausura transitiva
///
/// matriz de semejanzas
/// matriz de semejanzas
///
static private double[,] composicion(double[,] R1, double[,] R2)
{
try
{
double[,] S=new double[R1.GetLength(0),R1.GetLength(0)];
for (int x = 0; x < R1.GetLength(0); x++)
{
for (int y = 0; y < R1.GetLength(0); y++)
{
S[x,y] = 0;
for (int z = 0; z < R1.GetLength(0); z++)
{
S[x, y] = Math.Max(S[x,y], Math.Min(R1[x,z],R2[z,y]));
}
}
}
return S;
}
catch (Exception ex)
{
new Exception(ex.Message);
}
return null;
}
///
/// Determina si 2 matrices son iguales
///
///
///
///
static private bool iguales(Double[,] S, Double[,] R)
{
try
{
for (int i = 0; i < S.GetLength(0); i++)
{
for (int j = 0; j < S.GetLength(1); j++)
{
if (S[i, j] != R[i, j])
return false;
}
}
}
catch (Exception ex)
{
return false;
}
return true;
}
///
/// Crea un dendrograma a partir de una matriz de semejanzas
/// transitiva.
///
/// matriz de datos
///
static public string dendrograma(double[,] matriz)
{
try
{
string result="";
List
List
//añade los datos alfa de la matriz (resultados).
for (int i = 0; i < matriz.GetLength(0); i++)
{
for (int j = i; j < matriz.GetLength(1); j++)
{
if (!alfa.Contains(matriz[i,j]))
{
alfa.Add(matriz[i, j]);
}
}
}
//ordenamos los datos alfa para ver
//los objetos relacionados.
alfa.Sort();
//recorremos toda la matriz.
for (int x=alfa.Count-1;x>=0;x--)
{
for (int i = 0; i < matriz.GetLength(0); i++)
{
for (int j = i+1; j < matriz.GetLength(1); j++)
{
//Si coincide el valor de la semejanza con
//el valor alfa que estamos tratando,
//añadimos la relación a la cadena final.
if (alfa[x] == matriz[i, j])
{
string strI = "x"+ (i+1).ToString()+" ";
string strJ = "x"+ (j+1).ToString()+" ";
bool existeI = result.Contains(strI);
bool existeJ = result.Contains(strJ);
//sólo añadimos el emparejamiento si
//no existe una relación de emparejamiento
//anterior directa o derivada de otra relación
//de emparejamiento
if (!emparejamientos.Contains(strI + "," + strJ) &&
!emparejamientos.Contains(strJ+","+strI))
{
//se trabaja con 4 supuestos a continuación
//al tratar la relación entre 2 objetos:
if (!existeI && existeJ)
{
emparejamientos = anyadirEmparejamientos(emparejamientos, strI, strJ,
result.Substring(buscarLLaveAbrir(emparejamientos, result, strJ)));
if (result.IndexOf("{" + strJ) > -1)
{
result = result.Replace("{" + strJ, "{{" + strJ);
result += "," + strI + "}";
}
if (result.IndexOf(strJ + "}") > -1)
{
result = result.Insert(buscarLLaveAbrir(emparejamientos,result, strI), "{");
result += "," + strI + "}";
}
}
if (existeI && !existeJ)
{
emparejamientos = anyadirEmparejamientos(emparejamientos, strJ, strI,
result.Substring(buscarLLaveAbrir(emparejamientos,result, strI)));
result = result.Insert(buscarLLaveAbrir(emparejamientos,result, strI), "{");
result += "," + strJ + "}";
}
if (existeI && existeJ)
{
if (result.IndexOf(strI) > result.IndexOf(strJ))
{
emparejamientos = anyadirEmparejamientos(emparejamientos, strI, strJ,
result.Substring(buscarLLaveAbrir(emparejamientos, result, strJ)));
result = result.Insert(buscarLLaveAbrir(emparejamientos, result, strJ), "{");
result = result.Insert(buscarLLaveCerrar(emparejamientos, result, strJ), "}");
result = result.Insert(buscarLLaveAbriryCierreParaComa(emparejamientos, result, strJ) + 1, ",");
}
else
{
emparejamientos = anyadirEmparejamientos(emparejamientos, strI, strJ,
result.Substring(buscarLLaveAbrir(emparejamientos,result, strI)));
result = result.Insert(buscarLLaveAbrir(emparejamientos, result, strI), "{");
result = result.Insert(buscarLLaveCerrar(emparejamientos, result, strI), "}");
result = result.Insert(buscarLLaveAbriryCierreParaComa(emparejamientos, result, strI) + 1, ",");
}
}
if (!existeI && !existeJ)
{
emparejamientos.Add(strI + "," + strJ);
result += ("{" + strI + "," + strJ + "}");
}
}
}
}
}
}
return result.Replace(" ","");
}
catch (Exception ex)
{
new Exception(ex.Message);
}
return "";
}
///
/// Crea una lista de emparejamientos para no duplicar
/// los emparejamientos en el dendrograma final.
///
/// Lista de emparejamientos
/// nuevo objeto
/// objeto existente
/// cadena que engloba los objetos que se emparejan
/// con todos los objetos que se relacionan con ellos
///
static private List
string trozo)
{
try
{
char[] caracteresDelimitadores = { '{','}',',' };
string[] filas;
filas = trozo.Split(caracteresDelimitadores, StringSplitOptions.RemoveEmptyEntries);
//mediante una array añado todos los objetos relacionados
//a lista de emparejamientos.
for (int i = 0; i < filas.Count(); i++)
{
if (!emparejamientos.Contains(nuevo+','+filas[i])
&& nuevo!=filas[i])
{
emparejamientos.Add(nuevo + ',' + filas[i]);
}
for (int j = 0; j < filas.Count(); j++)
{
if (!emparejamientos.Contains(filas[i] + ',' + filas[j])
&& !emparejamientos.Contains(filas[j] + ',' + filas[i]) &&
filas[i]!=filas[j])
{
emparejamientos.Add(filas[i] + ',' + filas[j]);
}
}
}
return emparejamientos;
}
catch (Exception ex)
{
new Exception(ex.Message);
}
return null;
}
///
/// Busca la llave de abrir para hacer un emparejamiento
///
/// Lista de emparejamientos
/// dendrograma final
/// Objeto a buscar
///
/// emparejamiento
static private int buscarLLaveAbrir(List
{
try
{
int min = result.Length;
var lista= from e in emparejamientos
where e.IndexOf(I)>-1
select e;
//dentro de todos los emparejamientos de un objeto, obten-
//dremos el que esté en el lado más izquierdo del dendrograma
foreach (string str in lista)
{
if (result.IndexOf(str.Substring(0, str.IndexOf(","))) < min &&
result.IndexOf(str.Substring(0, str.IndexOf(","))) > -1)
min = result.IndexOf(str.Substring(0, str.IndexOf(",")));
if (result.IndexOf(str.Substring(str.IndexOf(","))) < min &&
result.IndexOf(str.Substring(str.IndexOf(","))) > -1)
min = result.IndexOf(str.Substring(str.IndexOf(","))) - str.Substring(0, str.IndexOf(",")).Length;
}
return min;
}
catch (Exception ex)
{
new Exception(ex.Message);
}
return 0;
}
///
/// Busca la llave de cerrar para hacer un emparejamiento
///
/// Lista de emparejamientos
/// dendrograma final
/// Objeto a buscar
///
/// emparejamiento
static private int buscarLLaveCerrar(List
{
try
{
int max =0;
var lista = from e in emparejamientos
where e.IndexOf(I) > -1
select e;
//dentro de todos los emparejamientos de un objeto, obten-
//dremos el que esté en el lado más derecho del dendrograma
foreach (string str in lista)
{
if (result.IndexOf(str.Substring(0,str.IndexOf(","))) > max)
max = result.IndexOf(str.Substring(0, str.IndexOf(","))) + str.Substring(0, str.IndexOf(",")).Length;
if (result.IndexOf(str.Substring(str.IndexOf(",")+1)) > max)
max = result.IndexOf(str.Substring(str.IndexOf(",") + 1)) + str.Substring(0, str.IndexOf(",")).Length;
}
return max;
}
catch (Exception ex)
{
new Exception(ex.Message);
}
return 0;
}
///
/// Dentro de cada emparejamiento, busca la posición intermedia de la
/// relación para insertar la coma de separación que deja el dendrograma
/// más claro de entender.
///
/// Lista de emparejamientos
/// dendrograma final
/// Objeto a buscar
///
static private int buscarLLaveAbriryCierreParaComa(List
{
try
{
int min = buscarLLaveAbrir(emparejamientos,result,I);
int numLlaveAbrir=1;
for (int i = min; i >= 0; i--)
{
if (result.Substring(i, 1) == "{")
numLlaveAbrir++;
else
break;
}
for (int i = min; i < result.Length; i++)
{
if (result.Substring(i, 1) == "}")
numLlaveAbrir--;
if (numLlaveAbrir == 0)
return i;
}
return min;
}
catch (Exception ex)
{
new Exception(ex.Message);
}
return 0;
}
}
}
Algoritmo C# para dendrograma IV
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PR_IA2_2010_Clases
{
static public class Datos
{
///
/// Normalizamos los datos aplicando ranging a la primera
/// columna y un valor binario a las posteriores.
///
///
///
static public List
{
try
{
//normalizamos los datos:
if (datos != null && datos.Count > 0)
{
//sumamos la primera fila para aplicar ranging.
float maximo = float.MinValue;
float minimo = float.MaxValue;
for (int i = 0; i < datos.Count; i++)
{
float result;
if (float.TryParse(datos[i][0].Replace('.', ','), out result))
{
if (result < minimo)
minimo = result;
if (result > maximo)
maximo = result;
}
}
foreach (string[] fila in datos)
{
//ranging a la primera columna:
float result;
if (float.TryParse(fila[0].Replace('.', ','), out result))
{
fila[0] = ((result - minimo) / (maximo - minimo)).ToString();
}
for (int i = 1; i < fila.Count(); i++)
{
//comprobamos si hay valores binarios
if (fila[i].ToUpper() == "YES" || fila[i].ToUpper() == "SÍ")
{
fila[i] = "1";
}
if (fila[i].ToUpper() == "NO")
{
fila[i] = "0";
}
}
}
}
return datos;
}
catch (Exception ex)
{
new Exception(ex.Message);
}
return null;
}
}
}
Algoritmo C# para dendrograma III
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PR_IA2_2010_Clases
{
static public class IO
{
///
/// Lectura de los datos de un fichero dado de tipo CVS que
/// transforma en una lista de arrays de tipo string.
///
/// fichero
///
static public List
{
string texto;
string[] filas;
List
try
{
System.IO.StreamReader sr =
new System.IO.StreamReader(fichero, System.Text.Encoding.Default, true);
texto = sr.ReadToEnd();
string[] caracteresDelimitadores = {"\r\n"};
//Creamos un lista de arrys de una forma rápida para
//tener cada dato por separado para su posterior tratamiento.
filas=texto.Split(caracteresDelimitadores,StringSplitOptions.RemoveEmptyEntries);
if (filas.Count()>0)
{
datos=new List
for (int i = 0;i< filas.Count(); i++)
{
datos.Add(filas[i].Split(','));
}
}
sr.Close();
return datos;
}
catch (System.IO.IOException ex)
{
throw new Exception(ex.Message);
}
catch (System.Exception ex)
{
throw new Exception(ex.Message);
}
return null;
}
}
}
lunes, octubre 19, 2009
TTT - Codecamp Tarragona 2009
En resumen de los conceptos planteados puedo resumir los que mayor interés me han suscitado:
-Programación para iPhone.
-Windows Azure, Services y SQL.
-WPF 4
-ASP.NET MVC2
lunes, junio 22, 2009
SOLID SUMMIT 2009
Rubén Garrigós también estuvo orquestando muchas de las sesiones, llénándonos de información sobre infraestructuras y su impacto en el rendimiento de nuestros servidors SQL.
Tuvimos la suerte de que Miguel Egea (que grande es!!!), Francisco González, y Daniel Seara pasaran por nuestra sala para amenizarnos con temas como son Log Shipping, SSIS, Entity Framework y LINQ.
Sólo hubo un fallito, pero el fallito no fué de Solid, fué del restaurante que reservé para la cena de confraternidad que se realiza los Jueves dentro del Summit. El problema fué que pactamos un precio de 22 euros y nos salió la broma por 29/30 euros porque nos cobraron la bebida a partir de 60 consumiciones. cosa que no nos dijeron en ningún momento. Por si no queréis caer en la misma trampa en la que caí yo es el restaurante LA PINTARTECA en la Av. Andes esquina Av. Arroyo del Santo. La cena escasa, el precio abusivo, el cumplimiento de lo pactado nulo (nos hicieron 3 facturas y ninguna igual), y el servicio dudoso.
En definitiva, la cena no empañó el buen hacer de la gente de SolidQ que año tras año nos cuentas sus logros con sus clientes y nos descubren sus secretos del triunfo.
Gracias
viernes, marzo 13, 2009
Español de pata negra

Pues nada, pues "Ibérico", pero "pué que haiga otro?", me pregunté con mi español pueblerino de Cuenca. Porque si hay otro igual me cojo español de Guijuelo o español de Pata Negra que también me gusta. Pero no, sólo hay esto:

miércoles, febrero 18, 2009
Instalación Windows 7 x64 Beta 1
Día 1: 17/02 - Creo el dvd de instalación e intento ejecutarlo desde vista. No me deja.
Día 2: 18/02 - Lo instalo desde el arranque para que me sustituya Vista. Después de un par de horas se instala pero no me detecta las tarjetas de red (una con el equipo y la externa es una linksys TX100 que no consigo instalar ni con los drivers, aunque curiosamente funcionaba en vista). Me voy a la oficina a buscar una eCom a ver que tal.
Pues sí, la eCom EC1000 me la ha detectado e instalado nada más arrancar. Me ha instalado internet, se ha actualizado y me ha sugerido la instalación de antivirus de una lista. He elegido Karpersky 8.0, que es un preview para windows 7 hasta el 31 de Mayo del 2009.
Día 3: 19/02
Ahora voy a instalar todos los programas que suelo usar:
- Visual Studio 2008 (OK)
- Sql Server 2008 (de momento no me deja, me pide que reinicie (2 veces?) (Ahora me pide el SP1 de Visual Studio).(OK)
- Office 2007 (OK)
- Visual Source Safe 2005 (OK)
- SDK de Silverlight
- Expression Blend 2.0
- Live Mesh, Messenger (OK)
- Aol (No funciona, pero he encontrado "Trillian" que hace la función de AOL )
- CRM de la empresa (eNotas)
Día 4: 20/02
He instalado Visual Studio 2008 en español, pero al instalar el SP1, necesario para Silverlight y SQL Server 2008, me da un error. Posteriormente he instalado el SDK de Windows 7, pero seguimos igual, así que desinstalo todo VS2008 y me bajo la versión en inglés para ver si así no tengo problemas.
Día 5: 21/02
Imposible, no consigo instalar VS2008, así que desisto, las próximas horas las dedicaré a preparar el trabajo y el 23 y 24 intentaré instalar la versión express con el SP1 a ver si funciona o no...
Día 6: 22/02
Ya está, he conseguido instalar VS Studio Express con SP1, C#, Visual Basic y Web developer. Acto seguido he instalado SQL Server 2008 edición developer. Ahora estoy intentado instalar el paquete de Silverlight.
domingo, febrero 08, 2009
Charla de Silverlight 2.0
La charla la enfocaré en 3 puntos.
1.-¿Qué es RIA?, ¿Cómo empezar?
2.-Diferencias con aplicaciones de escritorio.
3.-Técnicas y recursos.
La charla es el día 11 de Marzo sobre las 10:00 de la mañana.
martes, noviembre 25, 2008
IV Aniversario Gusenet MULA
Viernes 28 de Noviembre:
Llegada y registro en el hotel (para los que quieran venirse con tiempo).
Sobre las 21:00 salida de cañas y cena por Mula.
Sábado 29 de Noviembre:
Lugar: Mula
C/Francisco Palazón.
Centro de Educación de Adultos.
10:30 Novedades para desarrolladores en SQL Server 2008 (Salvador Ramos de Solid)
11:15 Descanso
11:30 Report Builder 2.0 ¡que los informes se los haga el usuario! (Miguel Egea de Solid)
12:15 Descanso
12:30 Silverlight 2.0 (Pedro Hurtado – Independiente)
13:15 Descanso
13:30 Arquitectura: Implementación en n-capas. (Entre todos aclararemos las dudas planteadas)
14:30 Comida
Paralelamente a las actividades técnicas, habrá una visita cultural organizada por Mula para los acompañantes (es un pueblo muy bonito, no dejéis de venir acompañados)
20:30 Salida de cañas y cena. Y copas (el que le apetezca).
Domingo 30 de Noviembre:
10:00 Visita al castillo, comida. Y cada uno a su casa.
REGISTRO
lunes, noviembre 24, 2008
YIELD y FIBONACCI
1º.-Había que mostrar los cálculos del orden 1 al 44 de Fibonacci.
2º.-Pensé en un bucle pero me acordé de YIELD, que a la postre es muy parecido si pensamos en ensamblador: un bucle es un salto x veces, YIELD se comporta de la misma manera, es un salto x veces, y así me quedaba el código más bonito y en una función. Los saltos son las intrucciones que menos ciclos de procesador ocupan en un procesador Intel.
3º.-Para las operaciones pensé en las sumas ya que son las operaciones aritméticas que menos ciclos de procesador necesitan.
4º.-Utilicé un array para almacenar los valores temporales porque su almacenamiento en memoria es contiguo y su acceso a memoria esta guardado en un registro del procesador y el acceso a la posición es un nº igual de bytes ya que los elementos son del mismo tipo.
Una de las cosas que se me escaparon y que no conocía, fué que mostrar los datos es más rápido en un formulario windows que en la consola.
Sin más, aquí os dejo el código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Fibonacci
{
class Program
{
static void Main(string[] args)
{
DateTime inicio=DateTime.Now;
foreach (long num in Fibonacci(44))
{
Console.WriteLine(num);
}
Console.WriteLine(DateTime.Now - inicio);
Console.ReadKey();
}
static IEnumerable
{
yield return 0;
yield return 1;
long[] nums = {0,0,1};
for (int i = 0; i <= n;i++ ) { nums[0] = nums[1] + nums[2]; nums[1] = nums[2]; nums[2] = nums[0]; yield return nums[0]; } } } }
domingo, noviembre 09, 2008
DEVCAMP Guadalajara 2008
Ahora voy a ir al grano con lo que he visto este fin de semana y que pienso compartir con vosotros el próximo aniversario de Gusenet (28,29 y 30 de nov) en Mula.
Lo que he visto es Windbg en directo y con dos demos para poder debugear problemas varios que se nos dan el día a día como son la caída de un servidor y bloqueos con un servicio de .Net presentado por Pablo Alvarez.
Nos han dado algunos consejos para la capa de presentación de nuestras aplicaciones y para hacer presentaciones en directo para la gente por David Carmona.
Hemos conocido Windows 7, Office 14, Windows Azure, Mesh, las mejoras en el lenguaje de C# 4.0 y VB 10, así como una charla abierta de los nombres de las tecnologías que vendrán en el futuro por Octavio Hernández (alias Octavio LINQ) y por David Salgado recién venido del PDC y que podéis encontrar esta semana en el tech ed de Barcelona.
Pero lo más importante ha sido el conocer en persona a gente como Eugenio Estrada, Elena Santacana, Jose Manuel Alarcón, Eduardo Quintás, Rodrigo Corral, profesores de distintas universidades de España, como son la de Almería, la Europea de Madrid, Alcoy, Valencia, de Barcelona, de Alcalá de Henares, de Granada, etc... y como no a sus estudiantes, chavales por la que siento una sana envidia por las ganas de aprender y de luchar en esta vida por algo con lo que disfrutan; las nuevas tecnologías.
Así que si queréis saber más, a final de mes podéis encontrarme en el aniversario de Gusente en MULA que muy gustosamente os comentaré todo aquello que sepa.
viernes, noviembre 07, 2008
DEV_CAMP Guadalajara
Tengo que dar las gracias a David Salgado por invitarme y al equipo de Microsoft por molestarse en facilitarme el viaje a Guadalajara y darme la oportunidad de compartir con mi grupo de usuarios (Gusenet) estos adelantos tecnológicos.
lunes, julio 07, 2008
DATAGRIDVIEW en Visual Studio 2008
El enfoque de mi charla será práctica, sin ppt ni nada por el estilo. Directamente abordaremos un ejemplo dónde estableceré unos pocos conocimientos que tengo con un caso práctico y debatiremos sobre las ventajas y desventajas de usar este o uno propio. De ver que problemas tenemos y si hay solución. La idea es compartir experiencias, crear un debate abierto a cualquiera que se presente en la charla.
Fecha: Viernes 11 de Julio
Lugar: Clave Informatica (Elche)
Planning:
16:00 - 16:30 Registro
16:30 - 17:45 Microsoft, HOW TO? (Miguel Llopis)
17:45 - 18:15 Descanso
18:15 - 19:30 DatagridView en Visual Studio 2008 (Oscar Montesinos)
sábado, junio 28, 2008
Crear fichero XML con LINQ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
class Program
{
static void Main(string[] args)
{
//Creamos un XDocument.
//Un XDocument contiene el XML completo, y
//le añadimos un nodo raiz, en este caso del de clientes.
XDocument configuracion = new XDocument(
new XDeclaration("1.0", "UTF-8", "yes"),
new XElement("Clientes"));
//Ahora nos situamos en el nodo Clientes
XElement lastAddress =
(configuracion.Descendants("Clientes").Last());
//Añadimos uno nodo nuevo que representa un cliente
XElement nodo = new XElement("Cliente");
//Lo identificamos por su codigo de cliente
XElement elemento = new XElement("Cod001");
//y le añadimos un par de atributos
elemento.SetAttributeValue("Nif", "B12345678");
elemento.SetAttributeValue("Nombre", "Neumáticos SV S.L.");
nodo.Add(elemento);
//Lo añadimos al nodo principal de clientes
lastAddress.Add(nodo);
//Repetimos el proceso para otro cliente.
nodo = new XElement("Cliente");
elemento = new XElement("Cod002");
elemento.SetAttributeValue("Nif", "A1234568");
elemento.SetAttributeValue("Nombre", "Coches Noaveriados S.A.");
nodo.Add(elemento);
lastAddress.Add(nodo);
//Guardamos el fichero xml.
configuracion.Save("C:\\Clientes.XML");
}
}
miércoles, noviembre 14, 2007
SQL 2000>Adjuntar bd corrupta.
-Crear una base de datos en el mismo directorio con el mismo nombre físico y lógico.
-Para los servicios de SQL Server 2000.
-Sustituir los ficheros de la bd creada con los ficheros de la bd corrupta.
-Levantar los servicios.
Y voilà, la base de datos funciona.....
Lo siento por el que tenga SQL Server 2005 ya que lo probé y no pude recuperla en 2005.
