Datos personales

Mostrando entradas con la etiqueta Microsoft. Mostrar todas las entradas
Mostrando entradas con la etiqueta Microsoft. Mostrar todas las entradas

martes, marzo 25, 2014

Megaevento Gusenet 2014

Tengo el placer de anunciaros que ya tenemos abierto el registro para el megaevento informático del año en España.

más información en http://www.gusenet.org y registro en la misma web.

http://www.gusenet.org

domingo, abril 10, 2011

Windows Phone 7, Android e IOS (I)

Hace poco más de un mes y ante la posibilidad de disponer de algún recurso más en la oficina, me he tirado al ruedo y he puesto en marcha un proyecto para "Mobile", que ofrezca un valor añadido a nuestros clientes de "algo" que ya disponemos. Este proyecto tan sólo se hace por curiosidad y para unirme al tren de las aplicaciones para los llamados "smartphones".

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
IOS
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.
Windows Phone 7
Personalmente y siendo un SO de Microsoft, me supone la herramienta más fácil para desarrollar ya que conozco como funciona porque la uso en el día a día en mi trabajo. Para desarrollar una aplicación para WP7 necesitaremos Visual Studio 2010 y el SDK de Windows Phone que podemos descargar desde la plataforma de desarrollo MSDN, tenemos un sin fin de recursos para empezar con él. También recomiento el tutorial de Oskar Alvarez, que es muy completo y lo va publicando en su blog de geeks.
Mencionar que WP7 nos permite 2 formas de desarrollo para su plataforma: Silverlight para WP7 y XNA para desarrollo de videojuegos. El lenguaje con el que trabajo es C# por lo que Silverlight me viene de perlas porque además conozco algo del framework, pero ojo aquí hay que conocer también algo de XAML que no supondrá muchos problemas porque en el sdk también nos incorpora la aplicación Expression Blend 4 para el diseño grafico.
Por estas facilidades, el diseño de la aplicación y los algoritmos de cálculo (capa lógica) se han realizado con UML den MagicDraw y se han pasado a C# en VS2010 con su correspodiente proyecto de test.
Android
Con Android he empezado a tener problemas, trabajo normalmente con tecnologías Microsoft y claro, plataforma nueva, lenguaje nuevo, problemas nuevos... Tengo la suerte (y el dinero que me sangran) de estudiar en la UOC y en la UOC casi el 100% de la práctica se desarrolla con Java y Eclipse, por lo que conozco esta plataforma de antemano.
Para Android hay que bajarse Eclipse y las SDK de desarrollo para Android. Un consejo, la versión 2.2 es la más estable (la 3.0 es una locura y de la 2.3 no he visto mucho smartphone). Empezamos el desarrollo con la 3.0 y nos encontramos con muchos problemas, cuelgues, lentitud, errores raros, etc... Cuando queríamos intentamos buscar un smartphone razonable y estándar para hacer pruebas nos encontramos con que la versión más extendida era la 2.2, por lo que bajamos hasta la 2.2 con muy pocas adaptaciones para seguir con el proyecto.
Android ha sido el seleccionado para la primera implementación.
IOS
Poco, muy poco puedo contar de IOS y su desarrollo, la implementación la he dejado para el final, sobre todo cuando he visto que el SDK para Windows está por detrás del de Apple, así que he empezado por lo primordial, conseguir un portátil MAC e informarme un poco sobre la plataforma de desarrollo, que según tengo entendido se llama XCode y pose un framework para IOS llamado Cocoa Touch y que el lenguaje de desarrollo es con Objective-C aunque permite otros lenguajes pero ahora mismo ni idea
Esta semana es la elegida para empezar con la implementación, así que en los próximas días tendré más información.

sábado, julio 10, 2010

Algoritmo C# para dendrograma VI (Datos)

Los datos para hacer pruebas los he sacado de un repositorio público de datos de la UCI: http://archive.ics.uci.edu/ml/ por mediación de la UOC: http://www.uoc.edu para hacer la práctica.

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

El algoritmo por fin:
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
/// Una matriz en el intervalo [0,1] de las
/// distancias euclideas entre los objetos

static public double[,] distanciaEuclidea(List datos)
{
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
/// Matriz de semejanzas 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
/// Una 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
/// Una cadena con el dendrograma
static public string dendrograma(double[,] matriz)
{
try
{
string result="";
List alfa = new List();
List emparejamientos = new 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
/// Devuelve la lista de emparejamientos
static private List anyadirEmparejamientos(List emparejamientos,string nuevo, string J,
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
/// La posición de la primera llave para el
/// emparejamiento

static private int buscarLLaveAbrir(List emparejamientos,string result, string I)
{
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
/// La posición de la última llave para el
/// emparejamiento

static private int buscarLLaveCerrar(List emparejamientos, string result, string I)
{
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
/// La posición intermedia del emparejamiento
static private int buscarLLaveAbriryCierreParaComa(List emparejamientos, string result, string I)
{
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

La parte Datos.cs
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.
///

///
/// Una lista normalizada de arrays de strings
static public List Normalizar(List datos)
{
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

Aquí la parte de código de IO.cs:

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
/// Devuelve una lista de arrays de tipo string
static public List leerDatos(string fichero)
{
string texto;
string[] filas;
List datos=null;
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

Quería hacer un pequeño resumen de lo que ha gustado del TTT y Codecamp 2009 y para ello quería centrarme en las personas, que ante todo, son los que hacen posible un evento de estas características. Las personas que organizan sin ánimo lucrativo para que todo salga perfecto, los speakers, los patrocinadores, los asistentes, todos, en general todos, con ganas de pasarlo bien, han hecho que estos 3 días haya desconectado completamente de los problemas diarios y me haya sentido muy dichoso de estar allí.

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

Como veo que todos los post hablan de la sala BI, abro este que habla de la sala relacional. En la sala relacional nos sentimos bastante afortunados teniendo como director de orquesta a Eladio Rincón, ¿porqué?, porque Eladio conoce perfectamente las interioridades de SQL Server y sabe distinguir perfectamente entre un fallo de disco o un procedimiento almacenado mal planteado, etc. Mediante varias sesiones, Eladio y su equipo (Rubén 2, Enrique, etc...) nos enseñaron como descubrir errores o detectar problemas en nuestro SQL Server.

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 sí, cuando he ido a hacer una encuesta de satisfacción como partnet de Microsoft, me pregunta que español quiero:

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:


Así, que pues nada me quedo con lo de "Ibérico", pero por si acaso busqué a ver si también tenía gallego o vasco, pero no.
Quizás estos de las encuestas deberían de tomárselo más en serio cuanto tengan que traducir...
Posdata: A mí esto de los idiomas me da igual, sólo es curiosidad y además me ha hecho gracia cuando lo he leído esta mañana recién despierto.



miércoles, febrero 18, 2009

Instalación Windows 7 x64 Beta 1

Me he propuesto instalar un Windows 7 x64 Beta 1 en un barebone que tengo por aquí y que uso como banco de pruebas. El barebone tenía instalado Vista x64 e iba un poco a saltos cuando accedía al disco así que voy a observar.

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

Coincidiendo con la elaboración del CRM de la empresa en Silverlight 2.0, Javier Yagüe responsable del grupo de usuarios NET de la Universidad de Alicante me ha ofrecido dar una pequeña charla de 30 minutos en la entrega de premios del concurso de programación de videojuegos con XNA que se está desarrollando en estos momentos.

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

Aquí está el planning y el link para registrarse lo tenéis al final:

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

Ante la llamada de David Salgado para un concurso de código, he usado YIELD para aportar una solución que expongo aquí. Las razones de usar este sistema parten del siguiente razonamiento.
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 Fibonacci(int n)
{
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

Que pena!!, se ha terminado el devcamp y yo con estos pelos!!!. Qué va, que va, el que me conoce sabe que es un chiste. Se ha terminado el devcamp y ya estoy en casa, es una pena porque este fin de semana ha sido intenso y muy constructivo. He estado con una gente genial que se ha portado estupendamente conmigo y con la que he compartido experiencias profesionales, como dirían los chavales de ahora ¡¡¡ha sido una pasada!!!. Felicidades a la gente de Microsoft y especialmente a los que trabajan en DPE por conseguir unir a tanta gente buena como profesionales, estudiantes y profesores y conseguir que pasen un fin de semana inolvidable.

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

Día 8 y 9 de Noviembre en Guadalajara tendrá lugar un evento de Microsoft dónde nos reunirán a desarrolladores, estudiantes y profesores para mostrarnos e indicarnos el camimo que ha tomado Microsoft para los próximos años y que se presentaron en el PDC de 2008.

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

Hola a todos, el próximo Viernes en las oficinas de Clave Informática tenemos una reunión los del grupo de usuarios GUSENET para hablar de roles y dinámica de trabajo dentro de la misma Microsoft y del DataGridView. Como veréis más abajo en el planning, Miguel Llopis se encargará de la explicación del funcionamiento interno de Microsoft y yo del DataGridView.

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

Hola a todos, estoy peleándome estos días con Linq para XML y os publico este mini-artículo para que no tengáis problemas a la hora de crear un fichero XML con Linq. Os preguntareis ahora que para que queremos usar linq si podemos hacerlo con DOM o a mano. En mi caso he preferido usa linq porque vengo del mundo SQL y veo mucho más clara la búsqueda de datos al estilo SQL que montando complejas cadenas con XPath para buscar un dato o 4 datos de un fichero XML. Como lo he visto más fácil así, me he tirado al ruedo y me sale esto:

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.

Hace unos días me encontré con que un compañero desintaló SQL Server 2000 de un servidor sin comprobar antes si las bases de datos estaban correctas, consistentes, sin errores. La base de datos era imposible de levantar, no había manera, errores en el restore y errores al adjuntar, así que desesperado le pedí ayuda a Eladio Rincón, el cual me dió la siguiente solución:

-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.

Etiquetas

.net (1) ALGORITMO (4) algoritmos (1) Android (1) angular (2) aplicaciones WEB (1) ARGENTINA (1) ASP (4) asp .NET (1) ASP .NET Identity (1) attach (1) Azure (1) base de datos (1) BINDING (1) BioInformática (2) bootstrap (1) C (2) C# (27) castellano (1) catalán (1) Charla (1) CheckedListBox (1) Clase (1) clausura transitiva (2) CLIENTES (1) Closing (1) Combobox (1) Comisiones (1) CONCURSO (1) condones (1) consultas (1) corrupta (1) CORS OWIN (1) CORS WEB API 2 (1) Criptografía (1) CUENTA NARANJA (1) Custom Control (1) Daniel Seara (1) DATAGRIDVIEW (1) David Salgado (2) dendrograma (6) depurar (1) desarrollo (1) Deserializar (1) DEVCAMP (2) durex (1) e-DNI (1) el Guille (2) Eladio Rincón (1) elGamal (1) encriptación (1) encuesta (1) Entidad (1) ERROR (2) error 3624 (1) España (1) España es nido de víboras. (1) Euclides (1) Euclides extendido (1) evento (1) eventos. (1) factorización (1) factorizar (1) física (1) Framework 2.0 (1) Framework 3.5 (5) Framework 4 (2) Francisco González (1) Francisco Ruiz (1) GO (1) google (1) gossip (1) Grupos de usuarios (1) Guadalajara (1) Guille Comunity Tour (2) Gusenet (9) GUSENET. (1) Huelga informáticos (1) IBEX 35 (1) Idioma (1) IFT (1) IISExpress (1) Indice de Fuerza Tecnica (1) informática (1) Informix (1) ING DIRECT (1) INGDIRECT (1) Ingeniería Informática (2) Inteligencia artificial (5) Intro (1) IOS (1) IPad (1) IPhone (1) IV Aniversario (1) JavaScript (2) JPA (2) keybd_event (1) LA CAIXA (1) La Pineda (1) ladroentidad (1) Lector RSS (2) LINQ (5) LINQ2XML (1) ListBox (1) Live Distributed Objects (1) llenar (1) LOG (1) Madrid .NET (1) MainMenu (1) MAP (1) MAP 2011 (1) MAR DEL PLATA (1) matemáticas (1) Matriculación (1) MDIList (1) MdiWindowsListItem (1) MenuItem (1) MenuStrip (1) Microsoft (18) Microsoft Active Professional (1) Miguel Egea (2) MSDE 2 (1) MSDE 2000 (1) MVVM Light (2) mysql (1) NAMESPACE (1) Needleman (2) NET (1) NS (1) Oferta empleo (1) Office 14 (1) Office 2007 (1) Office 2009 (1) ON ERROR (1) OOB (1) Oscar Montesinos (1) OWIN (1) OWIN Security middleware (1) Paginación (1) PDC (1) Pedro Hurtado (1) PINTARTECA (1) PrinterSettings (1) Process (1) ProcessStartInfo (1) Programador (1) Relacional (1) robo (1) RSS (1) Rubén Garrigós (1) Salvador Ramos (1) Santa Pola (1) scrape (1) scraping (1) ScrollBar (1) Secretaría (1) SendInput (1) SENDKEYS (1) Sergio Vázquez (1) Serializar (1) Silverlight 2.0 (2) Silverlight 4 (1) Silverlight 5 (3) Silverlight. (1) Sindicado (1) Sistema Personal de Trading (3) Sistemas Distribuidos (1) SOLID SUMMIT 2009 (1) SPT (2) SQL Server (3) SQL Server 2000 (2) SQL Server 2005 (2) SQL Server 2008 (3) SQL Server Denali (1) SQL Server Information Services. (1) SQLU (1) SSIS (1) SUMMIT SQL (1) Suspect (1) Syndication (1) TAB (1) Tablas (1) Tarragona (1) Token bearer (1) ToolStripMenuItem (1) ToString() (1) Traductor (1) transacciones (1) treeview (1) truco (1) TRY CATCH (1) UCI (1) Unience (2) Universad (1) Universidad Oberta Catalunya (2) UOC (8) Usuarios. (1) VB (1) VB6 (1) VB9 (1) VIAJAR (1) Vila-seca (1) VISUAL BASIC (3) Visual Basic. (1) visual studio (1) Visual Studio 2005 (1) Visual Studio 2008 (16) Visual Studio 2010 (2) Visual Studio 2013 (1) VS2010 (1) VSTA (1) VSTO (1) WCF (1) WEB API (1) web.config (1) WebClient (1) WF (1) windows (1) Windows 7 (3) Windows 8 (2) Windows Azure (1) Windows pone (1) Windows Server 2008 (1) Windows Vista (1) woff (1) WP7 (1) WPF (1) Wunsch (2) XAML (4) XDocument (1) XElement (1) XML (3) XNA (1) Yield (2)