sábado, 20 de diciembre de 2014

Visual Studio: Cambiar el DSN de un informe Crystal Reports

Algunas veces tenemos informes de Crystal  Reports en nuestros proyectos de Visual Studio y todo funciona correctamente, pero llega un momento en el que cambiamos el DSN del que deben leer los informes de la Base de Datos y dejan de funcionar los informes, o sencillamente un informe no funciona porque no está asociado al DSN adecuado.


La solución que aplicaba antes era eliminar el DSN y por tanto el objeto asociado y conectar de nuevo el objeto de la base de datos al informe de Crystal Reports 

Esto nos obliga a asociar de nuevo campo por campo con la consiguiente pérdida de tiempo. Pero he encontrado una forma más rápida de asociar el objeto de Base de datos en la que no es necesario recolocar de nuevo los campos uno por uno.

En este ejemplo concreto la aplicación tengo varios informes asociados a una DSN que cambia con cada versión por tanto al compilar la siguiente versión es necesario cambiar la versión de la DSN (para ello se han creado dos DSN uno de la versión 18.0.0 y otro de la versión 18.0.1)


Sobre el proyecto de Visual Studio en el explorador de soluciones nos posicionamos sobre el informe de Crystal Reports. Al hacer doble click sobre él, se abre en modo edición. 

Informe Crystal Report en Visual Studio

sábado, 6 de diciembre de 2014

Visual Studio: Despliegue de aplicaciones, dos errores frecuentes.

NO SE ENCUENTRA EL ARCHIVO O EL NOMBRE DEL ENSAMBLADO.


Estoy desarrollando una aplicación en .NET con Visual Studio 2005, cuando la ejecutamos en modo desarrollo  funciona perfectamente, así que generamos el correspondiente  paquete de instalación creando un archivo .msi y lo llevamos a otra máquina. Instalamos nuestra aplicación y cuando la ejecutamos nos encontramos con este desagradable error.

El error dice: No se encuentra el archivo o el nombre del ensamblado “nombre” o una de sus  dependencias.

No se encuentra el archivo o el nombre del ensamblado.

sábado, 22 de noviembre de 2014

Programación de robots III

El modelo del entorno es la representación que tiene el robot de los objetos con los que interacciona. Normalmente este modelo se limita a características geométricas: posición y orientación de los objetos, y en ocasiones a su forma, dimensiones, peso, etc.

Programación de robots.
Opportunity NASA.

sábado, 8 de noviembre de 2014

Programación de robots II

Programación por Guiado


La programación por guiado o aprendizaje consiste en hacer realizar al robot, o a una maqueta del mismo, una tarea (llevándolo manualmente por ejemplo) al tiempo que se registran las configuraciones adoptadas, para su posterior repetición de manera automática.

Programación de robots
AT-AT

sábado, 25 de octubre de 2014

Programación de robots

Generalidades.
Programación Gestual.
Modos de Programación.
Programación textual.
Nivel robot.
Nivel tarea.
Nivel objetivo.
Programación de robots.

Generalidades



Con la programación es como los humanos nos comunicamos con los robots. Existen dos niveles de programación: gestual y textual. En la primera el robot se programa guiando el brazo según la secuencia de operaciones para la aplicación que se repetirá cíclicamente. En la textual existen varios niveles según las operaciones especificadas al robot. Puede ser a nivel de robot o a nivel de tarea.

robot Curiosity en Marte
Imagen de Wikipedia-NASA

sábado, 11 de octubre de 2014

IBAN y BIC, validación con SQL Server y .NET

Recientemente en la zona SEPA (Single Euro Payments Area)  se han establecido nuevos formatos para las cuentas bancarias. El antiguo código  de cuenta corriente CCC ha sido sustituido por el nuevo International Bank Account Number, IBAN. Además se ha creado un nuevo código Bank Identification Code BIC.

Voy  a describir cómo implementar dos funciones de SQL Server para que validen ambos códigos y luego estas funciones se puedan utilizar desde .Net, para los ejemplos de .Net voy  a utilizar Visual Basic.

Validador de IBAN y BIC
Imagen de gophoto.

sábado, 4 de octubre de 2014

C++, punteros, templates (plantillas)

Operaciones con punteros.
Tipos genéricos. Plantillas. ( Templates ).
Typedef.
El operador sizeof.
Constructores. Objetos de la clase.

Operaciones con punteros


El lenguaje C++ ofrece cinco operaciones básicas con punteros.
1- Asignación: Consiste en asignar una dirección a un puntero. Normalmente se empleará el nombre de un array o con el operador dirección (&). En el siguiente ejemplo, se asigna a punt1 la dirección del inicio de un array llamado arr. En la variable punt2 colocamos la dirección del tercer y último elemento, arr[2].
static int arr[] = { 10,20,30};
int *punt1, *punt2;
punt1 = arr// asigna una dirección al puntero

punt2 = & arr[2];


sábado, 27 de septiembre de 2014

SQL Server, tablas temporales

Algunas veces puede ser interesante, sobre todo para un programa informático, crear una tabla temporal en SQL Server  utilizarla para un propósito determinado y eliminarla.
Las tablas  temporales son como las tablas normales y corrientes de SQL Server pero al apagar el equipo desaparecen pues sólo existen en la memoria RAM.
Estas tablas se nombran con el símbolo # delante del nombre.


Para crear una tabla temporal basta con hacer una select o una vista de la tabla o tablas de la que queramos manejar los datos y tomar sólo los campos que nos interesan. Los ejemplos que voy a mostrar son muy sencillos pero se pueden complicar todo lo que queramos.

SQL Server, tablas temporales

sábado, 20 de septiembre de 2014

SQL Query analycer. Depurar un procedimiento almacenado (SP)

Introducción

En esta ocasión voy a explicar como ver lo que hace exactamente un sp utilizando el Query analycer de SQL SERVER. En vez de seguir la ejecución del sp paso a paso como si fuera un programa, lo que hacemos es convertirla en una consulta de SQL SERVER y ejecutarla para que devuelva el mismo resultado que si fuera una consulta más simple.

En muchas ocasiones los procedimientos almacenados (sp) contienen variables que comienzan por @ y no permiten su ejecución directa desde el analizador de consultas. Pero el método de depuración paso a paso con VS2005 puede ser demasiado tedioso o incluso no darnos la información que necesitamos.
Una forma más sencilla de ejecutar un sp rápidamente consiste el convertir en código ejecutable por SQL SERVER el sp a analizar y ejecutarlo directamente para ver el resultado.

Este ejemplo es tan sencillo que parecerá una perogrullada por que la salida será igual que la entrada. Pero en procedimientos muy complejos puede ser imposible su ejecución directa y tendremos que retraducir el procedimiento de este modo que se explicará a continuación. Por motivos didácticos no he considerado poner un sp más complejo.

Análisis del Procedimiento Almacenado



Para empezar abrimos en una nueva ventana el código del sp que deseamos depurar. Para ello, situados sobre el explorador de objetos de SQL SERVER desplegamos la lista de procedimientos almacenados y con el botón derecho del ratón elegimos la opción  Incluir procedimiento almacenado como-> CREATE To -> Nueva Ventana del editor de consultas.

Analizar un procedimiento almacenado complejo

sábado, 13 de septiembre de 2014

C++, Puntero implícitoTHIS, friend

El puntero implícito this
Saltar el sistema de protección. ( Friend )
Miembros static de una clase
Funciones virtuales

El puntero implícito this


Cada objeto de una determinada clase mantiene su propia copia de los datos miembro de la clase, pero no de las funciones miembro, de estas sólo existe una copia para todos los objetos de la clase; es decir, cada objeto tiene su propia estructura de datos, pero todos comparten el mismo código para cada función miembro. De este modo si necesitamos que una función miembro conozca la identidad de cada objeto para el que ha sido llamada, en C++ debemos invocar un puntero al objeto denominado this. Así por ejemplo, si declaramos un objeto.


Empleado.set_empleado( );

Puntero This, C++

sábado, 6 de septiembre de 2014

C++, funciones sobrecargadas, referencias

Funciones sobrecargadasPaso de parámetros por referenciaReferencia como valor retornadoClases con miembros que son punterosArrays de objetos y de punteros a objetosPunteros a miembros de una clasePunteros como argumentos de funciones


Funciones sobrecargadas

Se dice que una función está sobrecargada cuando se declara una función previamente declarada con distinto número y/o tipo de parámetros pero con el mismo nombre. Es un concepto de programación orientada a objetos llamado polimorfismo. (Muchas declaraciones de una misma función).

Cada función suele tener un nombre que la distingue de las demás. Pero se pueden presentar casos en los que varias funciones ejecuten la misma tarea sobre objetos de diferentes tipos, y puede ser interesante que dichas funciones tengan el mismo nombre. Por ejemplo podemos definir una función Mover para cada tipo de movimiento de una pieza distinta de ajedrez y llamar a todas las funciones con el nombre mover pero distinguirlas por el número y/o el tipo de los parámetros sean diferentes.

C++, funciones sobrecargadas, referencias

sábado, 30 de agosto de 2014

Alojar un sitio web en nuestro equipo con IIS (Internet Information Services)

Para alojar un sitio web en nuestro equipo sólo necesitamos instalar el IIS, una vez instalado, creamos un directorio virtual donde se alojará nuestro sitio web (hay que tener en cuenta que los conceptos de directorio virtual y sito web son diferentes. Un sitio web puede ocupar uno o varios directorios virtuales). Seguidamente siguiendo un wizard muy sencillo alojamos nuestro sitio web en un directorio físico. Para comenzar el wizard podemos hacer dos cosas.

Posicionados en el directorio Default Web Site del IIS  pulsamos botón derecho del ratón, y elegimos new y luego web site como se muestra abajo.

Crear un sitio web en mi ordenador

sábado, 23 de agosto de 2014

Cómo crear un directorio virtual con IIS (Internet Information Services)

Voy a explicar cómo crear un directorio virtual en nuestro equipo para que este haga de servidor de una aplicación web. Nuestro equipo deberá tener instalado el IIS.

Sobre el IIS nos posicionamos en Web Sites sobre Default website. Con el botón derecho del ratón  new y virtual directory.

Nuevo directorio virtual IIS

sábado, 16 de agosto de 2014

C++, conversión explícita o cast

Cuando necesitamos convertir una variable perteneciente a un tipo de dato (cadena, numérico, fecha, etc.) a otro tipo diferente del suyo original, debemos decirle al programa explícitamente que tipo de conversión deseamos.

La conversión explícita en vez de realizarla el compilador automáticamente se indica de forma explícita, en C++ utilizamos la forma (nombre_de_tipo)expresión.  No es exclusiva de C++ pues también se puede emplear en otros programas aunque cambie ligeramente la implementación.

Conversión explícita Cast

sábado, 9 de agosto de 2014

C++, Operadores, const, volatile, funciones inline

Declaración de Constantes, const y volatile.Funciones inline.Operadores New y Delete.

Declaración de constantes

Una constante es como una variable pero como su nombre indica, no varía si no que es constante. Se usa fundamentalmente para definir valores que serán constantes a lo largo de todo el programa pero en vez de poner el mismo valor una y otra vez a lo largo del código, lo definimos sólo una vez al principio, de este modo si hubiera que cambiar dicho valor no es necesario rastrear todo el código buscando donde cambiarlo, basta con cambiar el valor de la constante definida al principio. Esto es válido para cualquier lenguaje aunque los ejemplos se pongan para C++. 

C++, Operadores, const, volatile, funciones inline

sábado, 2 de agosto de 2014

Conectar un objeto de una base de datos a Crystal Reports

Crystal Reports permite conectar tres tipos de objetos de base de datos, tablas, vistas y procedimientos almacenados, para realizar la conexión se elige Database y se pulsa en Database expert.

Abrir Database Expert de Crystal Reports

sábado, 26 de julio de 2014

Power Point 2010. Paso automático de diapositivas

Voy a explicar las tres acciones que más utilizo en Power Point 2010 y que suelo perder bastante tiempo hasta que doy con ellas. Una es hacer que las diapositivas pasen automáticamente, otra es poner música y hacer que suene y la última convertir mi presentación en un vídeo.

Hacer que las diapositivas  cambien automáticamente en Power Point


Siempre que hago un Power Point me tiro un buen rato intentando hacer que las diapositivas cambien automáticamente, es muy sencillo. En la carpeta transiciones a la derecha se marca la casilla después de y se desmarca la casilla de "Al hacer click con el mouse".

poner transicion automática en power point

sábado, 19 de julio de 2014

SQL Server. Buscar un valor en toda la base de datos

Algunas veces necesitamos buscar un valor determinado en toda una base de datos con la dificultad que esto conlleva, sobre todo si tiene muchas tablas y muchos campos. 

Para realizar esa búsqueda podemos crear este procedimiento almacenado que hará una búsqueda bastante tediosa por nosotros.

El procedimiento simplemente genera una tabla auxiliar que almacena el resultado de la búsqueda que va realizando tabla por tabla y campo por campo. Es bastante sencillo. Se copia este código y se pega en el analizador de consultas del SQL Server, se ejecuta este código para que genere un procedimiento almacenado llamado dbo.BuscaValorEnBBDD



sábado, 12 de julio de 2014

ASP.NET, errores típicos con Visual Studio

Cuando un principiante comienza a porgramar con ASP.NET con Visual Studio suele quedarse atascado en errores que son típicos y fácilmente solucionables. Mi objetivo es hacer una pequeña lista de estos errores (al menos los más famosos) para tenerlos mas o menos reunidos y así permitir una curva de aprendizaje más rápida para quien comience a desarrollar con asp.net con Visual Studio.
Normalmente después de hacer varias modificaciones en el código, ejecutamos y obtenemos un error bastante desconcertante.

1º Compilation error:


Error típico de ASP

sábado, 5 de julio de 2014

Test de Turing: Un programa de ordenador lo pasa

Recientemente un programa informático ha  logrado superar por primera vez la prueba diseñada por Alan Turing  conocida como test de Turing. Dicha prueba diseñada en 1950 consiste en que las máquinas demuestren su inteligencia engañando en una conversación a varios jueces haciendo que estos crean que se trata de un ser humano. Este anuncio pone de nuevo en máxima actualidad el debate entreinvestigadores y expertos en inteligencia artificial


Test de Turing
Imagen tomada  de Naukas.

sábado, 28 de junio de 2014

Acceso genérico a una base de datos a través de una clase de .NET


Hace poco puse una entrada sobre como conectar una aplicación a una base de datos.
En esta ocasión voy a desarrollar como podría ser una clase completa de conexión a base de datos, aunque esta se puede modificar para ampliar mucho más. Esta es la clase mínima. Después se puede ampliar lo que se quiera.


Clase genérica de conexión a Base de Datos


sábado, 21 de junio de 2014

Debate sobre inteligencia artificial fuerte vs débil. 2ª parte

Existe otro argumento bastante potente contra las tesis de la IA fuerte, este argumento es obra del filósofo John Searle.

Según piensan los defensores de la AI fuerte, un ordenador capaz de responder preguntas sobre un tema, tendría una comprensión real sobre dicho tema.

Existe un programa desarrollado por Roger Schank que dadas unas frases del tipo: 

“José entró en un restaurante y salió indignado porque el filete estaba en mal estado”
“José entró en un restaurante y salió maravillado de la comida”

A pesar de que en las frases no se indica explícitamente, si a dicho programa se le pregunta en que caso José comió el filete y en cual no, el programa dará una respuesta correcta, por lo que los defensores de la IA fuerte afirman que el programa tiene cierto nivel de comprensión o incluso de consciencia sobre la historia.

Debate Inteligencia Artificial

sábado, 14 de junio de 2014

Inteligencia artificial fuerte frente a inteligencia artificail débil, 1ª parte

¿Puede un ordenador emular el cerebro humano?


En inteligencia artificial existen dos corrientes contrapuestas. Una de ellas es de la opinión de que  cualquier algoritmo lo suficientemente complejo como para emular el cerebro humano debe poseer las mismas cualidades de autoconsciencia que un ser humano real, independientemente de que el algoritmo sea ejecutado por cualquier medio ya sea esta electrónico mecánico o de cualquier otro tipo. Esta corriente se denomina inteligencia artificial fuerte o IA Fuerte. En esta corriente se encuentran Marvin Minskyy Douglas Hofstadter  
entre otros.
Alan Turing Con su artículo Computing Machinery and Intelligence”  publicado en la revista mind en 1950, fue el pionero en pensar que los ordenadores podrían igualar la inteligencia humana, pero fue muy optimista al dar un plazo de 50 años para que tal cosa sucediese.

Por otro lado existe otra corriente opuesta que piensa que en el cerebro humano existen procesos que no son algorítmicos que no se pueden reproducir en máquinas. Esta hipótesis es defendida por Roger PenroseJohn LucasJonh Searle   entre otros.


Inteligencia artificial fuerte vs inteligencia artificial débil

sábado, 7 de junio de 2014

Las columnas de la tabla ‘’ no coinciden con las restricciones PRIMARY KEY o UNIQUE existentes.

Algunas veces intentamos crear una tabla en SQL SERVER ya sea a través de un script o a través de los menús, y en el momento de crear una clave foránea a otra tabla nos da es siguiente error:

Las columnas de la tabla no coinciden con las restricciones PRIMARY KEY o UNIQUE existentes

sábado, 31 de mayo de 2014

El concepto de no computabilidad de Alan Turing (El teorema de Gödel de la informática)

¿Puede un ordenador calcular cualquier cosa?



Al igual que Gödel en mátemáticas. Alan Turing estableció  los límites de la computación, y hasta qué punto un ordenador es capaz de calcular cualquier cosa.

El concepto de máquina de Turing

Una máquina de Turing es un concepto de ordenador idealizado, es decir un ordenador de papel y lápiz, o según lo concibió el propio Turing un ordenador  con un lector y una cinta infinita que puede moverse hacia adelante o atrás siguiendo unas reglas sencillas escritas en la propia cinta.  A pesar de esta gran simplicidad, una máquina de Turing se puede adaptar para ejecutar cualquier algoritmo o programa.
Una máquina de Turing que es capaz de simular cualquier otra máquina de Turing es llamada una máquina universal de Turing (UTM, o simplemente una máquina universal). Las máquinas de Turing sirven para estudiar hasta qué punto se puede automatizar cualquier noción de lógica o de matemáticas.


El concepto de no computabilidad de Alan Turing


sábado, 24 de mayo de 2014

Cambiar la versión del framework en visual Studio 2010

Si no tenemos la versión adecuada de framework en Visual Studio podemos tener problemas. Para cambiar la versión del framework tenemos que hacer las siguientes comprobaciones.


En el archivo webconfig. 

targetFramework= versión de framework

<compilation defaultLanguage="vb" debug="true" targetFramework="2.0">



Sobre el proyecto botón derecho del ratón -> Páginas de propiedades

Cambiar la versión del framework en visual Studio 2010

sábado, 17 de mayo de 2014

El teorema de Gödel y sus isomorfismos

Matemáticas, sistemas informáticos, inteligencia artificial y mente humana


Introducción


El siglo XX supuso una auténtica convulsión para los más profundos temas filosóficos, hubo una auténtica revolución en la física, pero también sacudió un profundo terremoto en las matemáticas y este no es tan conocido como el que sacudió la física.

El objetivo de este artículo es mostrar el teorema de Gödel y los isomorfismos de este con otras áreas del conocimiento como la física,  psicología, informática, etc.

Se trata de un tema profundo de la filosofía pues muestra hasta qué punto la imperfección arraiga en las leyes de la física y las matemáticas. Así que aquí, surgen cuestiones fundamentales: ¿son las matemáticas una creación humana con sus correspondientes imperfecciones  o trascienden el mundo humano y existen independientemente de este?.

La respuesta es o debería ser la segunda parte de la pregunta, es decir las matemáticas como ente abstracto independiente de  la creación humana. Aunque siempre queda la duda de hasta dónde puede profundizar la mente humana en las matemáticas y si sus imperfecciones (las de las matemáticas) no son más que un reflejo de nuestra mente imperfecta o subyacen profundamente en los fundamentos últimos de las matemáticas.


Kurt Gödel
Kurt Gödel

sábado, 10 de mayo de 2014

Visión general de la programación orientada a objetos. (Con Visual Basic .NET)

Pongo a continuación un resumen de los atributos principales del lenguaje Visual Basic .NET así como de  su utilización en programación orientada a Objetos. Este artículo contiene los siguientes puntos:

Definiciones Generales:


Constantes.

Variables static.

Namespaces.

Punto de entrada al programa.

Clases.

Reglas de ámbito de las clases.

Código de clase y código de cliente.

Propiedades de la clase. (Encapsulación).

Propiedades virtuales.

Propiedades de sólo lectura o sólo escritura.

Me y MyClass.

Sobrecarga de Métodos. (Polimorfismo)

Enlaces (Binding) de variables a referencias de objetos.

Herencia.

Reglas de ámbito.

Herencia y sobrecarga de métodos.

MyBase.

Herencia y sobreescritura de métodos.

Herencia y métodos constructores.

Clases selladas no heredables.

Clases abstractas o no instanciables.

Comprobación del tipo de un objeto y Moldeado (Casting).

Miembros compartidos (Shared) de una clase.

Destrucción de Objetos y recolección de basura.

Interfaces.

Estructuras.


Enumeraciones.


Programación orientada a objetos con Visual Basic.NET


sábado, 3 de mayo de 2014

Pasar datos de una tabla a otra de distinta base de datos

En algunas ocasiones es necesario migrar datos desde una tabla de una base de datos a otra tabla de otra base de datos diferente. En este caso he considerado que las tablas son iguales pero hay que tener en cuenta que si son diferentes habrá que tener cuidado con que campos se migran a que campos, que longitud y tipo tienen estos.

Hay un método algo complicado pero muy potente que ya se explicó anteriormente  que es creando un cursor.

Creamos un cursor que recorra la tabla de origen y si el registro NO existe en la tabla de destino lo insertamos con un INSERT-SELECT si ya existe no hacemos nada.
SI la tabla tiene dependencias tendremos que dar de alta los registros de las tablas dependientes que no existan en el destino. Buscamos las dependencias de las tablas con sp_help.

sp_help 'dbo.tbclientes'


En la 7ª salida podemos ver las referencias externas a otras tablas.

sp_help traspaso base de datos