15
may 12

Unable to build project output group ‘Content Files from x (Active)’

No Gravatar
Unable to Build Project Output Group

Unable to Build Project Output Group

Estoy trabajando en un proyecto con ASP MCVC bastante complejo con muchos archivos, muchas reglas y sobre todo comunicación con otro servicios .. y sucede que la semana pasada hice un cambio importante en el código y necesité generar nuevamente los archivos de instalación.. pero algo fallaba y no se podía generar el archivo .msi (setup) .. el error citaba algo como “Unable to build project output group ‘Content Files from ___ (Activate)” .. no me había pasado antes.. y pues el error no describía nada más .. por lo que encontrar el porque era algo tardado quizás..

Buscando un poco entoncré que esto ocurre cuando un archivo del proyecto fue eliminado del disco, pero no fue eliminado del entorno de desarrollo.. entonces al crear el archivo de instalación no se encuentra una fuente por consiguiente falla al generar el archivo instalador.

La solución.. simple!! solo expande todos las carpetas de tu proyecto y busca archivos que tengan un símbolo de admiración amarillo .. pues esos son los que están dando problemas.. o los restauras o los eliminas y listo.. si intentas nuevamente la generación del instalador, estoy super, super seguro de que no habrá más errores.

:)

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

08
may 12

Como saber que puertos estan ocupados y que programa los utiliza en windows

No Gravatar

netstat

Como saber que puertos estan ocupados y quien los esta utilizando

De esas veces que necesitas saber si un puerto esta abierto y no estas en linux, sino en windows.. no tienes herramientas gráficas y solo puedes acceder a la consola y sus comandos..

Lo primero es utilizar netstat y unos cuantos parámetros desde la consola en windows (-o muestra el PID, -a todas las conexiones y -n direcciones ip)

c:\Jack> netstat -oan

Luego que ya sabemos si o no está en uso.. ahí mismo con el parámetro -o podemos tener acceso al no. de proceso o PID .. ya con ese dato podemos abrir el administrador de tareas, eso bastaría para saber su nombre y matarlo si es lo que necesitan.. pero si es un proceso global y no aparece en el administrador de tareas, no hay de otra más que seguir utilizando la consola para averiguar de donde diablos salío la aplicación que utiliza el puerto que necesitan.

Bueno, lo siguiente entonces es saber el nombre de la aplicación dueña del proceso y para esto utilizamos el comando tasklist con otro par de parámetros (-svc para obtener el nombre del servicio, -FI para aplicar un filtro de búsqueda)

c:\Jack> tasklist /svc /FI "PID eq 1428"

En este caso de ejemplo quiero conocer el nombre de la aplicación con PID 1428 que fue lo que encontré utilizando netstat .. y el resultado de la ejecución de tasklist es el nombre de la aplicación.

Ya para finalizar vamos a utilizar el comando taskkill enviando como parámetros -F para forzar el cierre de la aplicacion y -PID para especificar el número de proceso a matar.

c:\Jack> taskkill /F /PID 1428

Y taraaán.. Aprendieron a averiguar sí o no se estaba utilizando un puerto, el nombre de la aplicación que lo utilizaba y hasta lo matamos para que no nos siga molestando :D

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

03
may 12

Utilizar WebServices en Microsoft SQL utilizando SSIS – Parte II

No Gravatar

Configurar el DTSx en Microsoft SQL

 

Continuamos con nuestra saga y bueno en esta parte lo único que tenemos que hacer es configurar nuestro paquete DTSx ya creado en el servidor de Microsoft  SQL y para hacer eso seguimos estos cuatro sencillos pasos:

1.- Abrir una conexión “Integration Server” en “Microsoft SQL Server Management Studio”.

2.- Importamos el paquete

3.- Probamos lo que hicimos este jalando (si tienen firewall confirmen que este desactivado)

 

4.- Confirmen que les haya llegado el mensaje. Si no, es posible que ya no tengan mensajes disponibles.

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

01
may 12

Encriptar cadenas utilizando MD5, SHA o SHA1 en SQL Server

No Gravatar
SQL Server encrypt

SQL Server encrypt

Nunca he sido muy amigo del motor de base de datos de microsoft.. MS SQL Server no es mi opción a elegir, pero la mayoría de las veces que trabajamos con la plataforma de .NET es casi un requisito forzoso tener que utilizarlo.

En este artículo escribiré un poco sobre como utilizar los métodos para encriptar cadenas utilizando MD5, SHA o SHA1 .. la verdad es que comparado con los otros motores de BD que conozco.. MS SQL Server es uno de los más feos para aplicar.. pero igualmente funcional.

Entonces el ejemplo para complementar de lo que hablo, va de la siguiente manera:

SELECT HashBytes('MD5','qbit.com.mx')
SELECT HashBytes('SHA','qbit.com.mx')
SELECT HashBytes('SHA1','qbit.com.mx')

Ahora, el problema común de utilizar este método es que retorna un tipo de dato VarBinary en lugar de VarChar por lo que para obtener la cadena correcta se necesita hacer una substracción de la parte que nos interesa.. y ello implica utilizar la función SUBSTRING…

SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'qbit.com.mx'), 3, 32) AS MD5
SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA', 'qbit.com.mx'), 3, 40) AS SHA
SELECT SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('SHA1', 'qbit.com.mx'), 3, 40) AS SHA1

Como verán si utilizo solamente la conversión SUBSTRING(HashBytes(‘MD5′,’qbit.com.mx’), 3,32) no extrae la cadena necesaria de forma correcta.. y es por esa razón que se necesita utilizar master.dbo.fn_varbintohexstr() .. para mi inquietud la función varbintohexstr no esta documentada así es que no estoy seguro del porque usarla :(

Estas funciones las he probado en el motor 9 de SQL Server .. en un par de días más lo estaré probando con versiones recientes y actualizaré este artículo..

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

26
abr 12

Utilizar WebServices en Microsoft SQL utilizando SSIS – Parte I

No Gravatar

Uno de nuestros usuarios de DcodSms me pregunto si es posible mandar mensajes SMS directamente desde la base de datos y bueno nos dimos a la labor de investigar como buenos desarrolladores que somos. Encontramos una solución que desde mi punto de vista no es tan compleja.

El esquema que vamos a utilizar es muy “simple”:

  1. Desarrollar un DTSx.
  2. Configurar el DTSx en Microsoft SQL.
  3. Crear un Job.
  4. Configurar el Job.
  5. Script para la ejecución de Job.

Crear DTSx

1.- Abrir SQL Server Business Intelligence Development Studio.

2.- Conectarse a Integration Server.

4.- Crear un nuevo proyecto de tipo Integration Services Project.

3.- Crear una variable llamada “respuesta” tipo string.

4.- Arrastrar el componente Web Service Task.

5.- Configurar un nuevo HttpConnection.

6.- Configurar el Input.

7.- Configurar el output.

8.- Guardar todo.

9.- Ejecutar para realizar la prueba.

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

24
abr 12

Etiquetas para documentar código en C# .NET

No Gravatar
doc-comment tag

doc-comment tag

Si estas empezando en el mundo de la programación utilizando C# .NET.. o quizás siendo ya un poco experimentado en este ambiente.. seguramente te estarás preguntando como rayos documentar el código, me imagino que en algun momento has utilizado algunas de las etiquetas para este fin, pero las utilizas todas y sabes que significa cada una de ellas ??

Este artículo es una reseña sobre las diferentes etiquetas que se utilizan sobre métodos y clases para generar documentación.. bien puede ser utilizando SandCastle o para documentar los objetos sobre el desarrollo cuando estos son invocados.

Por ejemplo, agregando “///” al inicio de una clase, el entorno de desarrollo de .NET automáticamente genera una secuencia especial de comentarios sobre el código y se ve de esta manera:

/// <summary>
/// Pretendo construir un reloj y esta es la descripcion de este objeto
/// </summary>
public Color reloj
{
    private int hora { get; set; }
}

Y como resultado, al implementar el objeto reloj .. Visual Studio me mostraría como documentación lo que escribí dentro de la etiqueta summary.

Creo que este tipo de etiquetas son llamadas “doc-comments tags” y forman parte del intellisense del editor de código de Visual Studio .. utilicé el ejemplo de “summary” porque virtualmente en cada miembro sea clase, método, propiedad, evento, etc.. se puede utilizar.. A continuación muestro una tabla con todas las etiquetas necesarias para documentar completamente un proyecto de software, veamos.

Continue reading →

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

20
abr 12

La subdivisión del espacio en computación 3D usando un Octree – I

No Gravatar

 

Octree

Octree

Actualmente estoy programando una funcionalidad para el nuevo sistema de navegación 3D que hemos estado desarrollando ya por algunos años para un cliente. La funcionalidad que requiere el navegador 3D es realizar una búsqueda de objetos en la escena y desplazar la cámara de la posición actual a una posición cercana al objeto buscado, la cámara tiene que desplazarse por un espacio tridimensional y esquivar en su trayectoria a los objetos que se encuentren entre la posición de origen y la posición final, para hacer esto se requiere de una secuencia de pasos o sea de un algoritmo para calcular el mejor camino hacia la posición final. El algoritmo que utilice en la versión anterior y volveré a utilizar se llama “A*” o Algoritmo de búsqueda A estrella.

Este algoritmo “Evalúa los nodos combinando g(n), el coste para alcanzar el nodo, y h*(n), el coste estimado de ir al nodo objetivo: f*(n) = g(n) + h*(n)” .

Aqui hay muy buena información sobre A*:

http://www.policyalmanac.org/games/articulo1.htm


http://poiritem.wordpress.com/2010/01/14/6-5-2-busqueda-heuristica-algoritmo-a/


http://es.wikipedia.org/wiki/Algoritmo_de_b%C3%BAsqueda_A*


http://en.wikipedia.org/wiki/A*_search_algorithm

Lo interesante es que para el navegador 3D adapte el algoritmo para hacer las búsquedas en un espacio tridimensional, en la mayoria de los ejemplos solo se utiliza para espacios en 2D.

El primer paso es dividir el área de búsqueda en una rejilla cuadrada, donde cada cuadro representa un nodo y cada nodo tiene un estado que se puede marcar como transitable o intransitable, y sirve de entrada al algoritmo para calcular la ruta. En el caso del espacio tridimensional utilice un cubo para envolver toda la escena y se subdividió en cubos mas pequeños, luego los cubos que contenían vertices de algún objeto en la escena fueron marcados como cubos o nodos no transitables, de esta manera la camara solo podría moverse por las zonas que no estuvieran ocupadas por algún objeto en la escena.

En la versión anterior el cálculo se hizo recorriendo “todos los nodos” del volumen para verificar cuales eran los nodos intransitables, este cálculo se hacia con una aplicación de procesos distribuidos y tardaba un tiempo considerable para obtener la lista de nodos.

Para esta nueva versión del navegador 3D utilizaré una mejor manera para agilizar la búsqueda de nodos intransitables, y esta es utilizando un Octree. Y Que es un Octree???.

“Un Octree es una estructura de datos en la cual cada nodo interno tiene exactamente 8 hijos. Las estructuras octree se usan mayormente para particionar un espacio tridimensional, dividiéndolo recursivamente en ocho octantes” [1]

“Gráficamente podemos visualizar a un octree como un cubo perfecto que representa al nodo raíz el cual encierra toda la geometría de la escena. Cada nodo está subdividido en ocho cubos más pequeños que representan a sus nodos hijo los cuales son llamados octantes. Cada uno de estos cubos también es subdividido en otros ocho octantes cada uno y así sucesivamente hasta llegar a una condición de término a la que tipicamente se llega en el momento en que los octantes son de cierto tamaño o cuando no llegan a contener un cierto número mínimo de polígonos” [2]

“El primer nodo del árbol, la raiz, es un cubo. Cada nodo tiene ocho hijos o no tiene hijos. Los ocho hijos forman una subdivisión regular de 2x2x2 en el nodo padre. Un nodo con hijos es llamado nodo interno. Un nodo sin hijos es llamado hoja.” [3]

Algunos usos comunes de los octrees son:

Indexación espacial.

Detección de colisiones en tres dimesiones

Mapeado de texturas [3]

Análisis de elementos finitos

Determinación de cara oculta (View Frustrum culling) [2] (aqui hay una excelente explicación de la aplicación de octrees para el manejo de caras ocultas)

La idea de utilizar un octree para encontrar los nodos intransitables es para aprovechar la estructura y definición del octree para hacer un menor número de comparaciones al evaluar si un cubo o nodo en la malla esta ocupado o colisiona con un objeto de la escena, los nodos del octree que envuelvan a los objetos de la escena seran los nodos no transitables.

Ejemplo de una escena dentro de un octree.

Ejemplo de una escena dentro de un octree.

Mas información sobre octrees :

Hieralchical Spatial Data Structures

Hanan Samet 1989

http://www.cs.umd.edu/~hjs/pubs/SametSSD89.pdf

Referencias :

[1] http://es.wikipedia.org/wiki/Octree
[2] Tesis profesional Desarrollo de un motor gráfico para el recorrido de mundos tridimensionales :

Ricardo Hermina Téllez:

http://catarina.udlap.mx/u_dl_a/tales/documentos/lis/hermida_t_r/capitulo_4.html


[3] http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter37.html

Imagenes :

http://www-lehre.informatik.uni-osnabrueck.de/~vcprakt/kolloquium00/html/octree.html


http://www.gamedev.net/topic/589587-optimizing-collision-detection-of-player-and-map-with-some-data-structures/

 

 

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

19
abr 12

Clase Attributes en C#

No Gravatar

Seguramente algunos de ustedes han visto algunas “etiquetas” ubicadas en la parte superior de algunos de los métodos o clases, principalmente cuando están implementando  algún Framework,  cuya funcionalidad de dichas “etiquetas”  es  es agregar cierto comportamiento de la clase dentro del framework.

Para mi sorpresa, dichas “etiquetas” no era lo que pensaba. A mi entender, son constructores de alguna clase que hereda de Attribute.

Veamos un ejemplo. Comencemos creando una clase “MyGridColumnAttribute”

Crear Clase tipo Attribute

[AttributeUsage(AttributeTargets.Property)]
public class MyGridColumnAttribute: Attribute
{
 
  private string _headerText;
  private bool _isHidden;
 
  public string HeaderText
  {
    get { return _headerText; }
    set { _headerText = value; }
  }
 
  public bool IsHidden
  {
    get { return _isHidden; }
    set { _isHidden = value; }
  }
 
  public PagingGridAttribute(string headerText, bool isHidden)
  {
    _headerText = headerText;
    _isHidden = isHidden;
  }
}

 

Un Par de Reglas

  1. En la parte superior de la declaración de la clase se encuentra el atributo “[AttributeUsage(AttributeTargets.Property)]” la cual indica en que parte de la clases pueden ser implementado  ”MyGridColumnAttribute”. Para mas referencias diríjanse a la página de Microsoft.
  2. El nombre de la clase debe de terminar con  Attribute (MyGridColumnAttribute).

 Utilizar la Clase Attribute

Ahora, es tiempo de utilizar nuestra recién creada clase. Para esto, debemos crear otra clase que llamaremos MyCustomDataSource:

 

public class MyCustomDataSource
{
  private string _firstName, _lastName, _nickName, _password;
 
  [MyGridColumnAttribute("Nombre", true)]
  public string FirstNombre
  {
    get{ return _firstName; }
    set{ _firstName = value; }
  }
 
  [MyGridColumnAttribute("Apellido", true)]
  public string LastName
  {
    get{ return _lastName; }
    set{ _lastName = value; }
  }
 
  [MyGridColumnAttribute("Clave", true)]
  public string NickName
  {
    get{ return _nickName; }
    set{ _nickName = value; }
  }
 
  [MyGridColumnAttribute("Contraseña", true)]
  public string Password
  {
    get{ return _password; }
    set{ _password = value; }
  }
}

 

Para aquellos que gusten cooperar con la causa, el siguiente paso es crear un componente que utilice “MyCustomDataSource” y lo muestre en alguna página Web.

 

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

17
abr 12

SVG una tecnología en extinción

No Gravatar
SVG Logo

SVG Logo

Hace algunas meses atrás parte de algunas de las características que pensaba desarrollar en Celestic .. y que aún se encuentran pendientes, era crear una especie de pizarra que permitiera a multiples usuarios escribir o hacer anotaciones en tiempo real.. para ese entonces pensaba en solamente 2 opciones, canvas o svg.. incluso escribí algunas pruebas de diferentes librerías y al final estuve muy certa de utilizar RaphaelJS, eso sobre cualquier librería para canvas.

En ese momento, html5 no estaba muy difundido y las librerías de canvas estaban muy verdes para utilizar alguna, al final Celestic se detuvo un poco y decidí centrar el desarrollo en otro tipo de características.. Han pasado 3 años desde que tuve en mente si utilizar svn sobre canvas.. y hoy estoy a punto de cambiar de idea.

Las tecnologías cambian de la noche a la mañana, un día una nueva herramienta de desarrollo esta en la cima y otro día simplemente cae .. y lo peor es que nosotros nos preparamos tanto tiempo para aprenderlas .. que un día nos deja de servir y tenemos que empezar desde cero con algo totalmente nuevo.

La web cambia rápido .. ahora parece que flash ya no es una tecnología en la que valga la pena invertir.. hemos de aceptar que tuvo su gran momento, años de desarrollo y grandes comunidades dedicándose a perfeccionar los métodos de codificación.. para que al final no quede en nada.. “nada es eterno”.

Entonces creo que con SVG esta ocurriendo una situación similar.. los equipos de escritorio tienen soporte para SVG, los equipos móviles no lo tienen y si lo tienen es con especificaciones diferentes.. el SVG es una tecnología en extinción, los navegadores se estan especializando en pintar (render) canvas de manera muy rápida.. igualmente algunos browsers preparan su javascript para utilizar aceleración por hardware, lo que hace de canvas la nueva tecnología ideal para dibujar sobre la web.

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

10
abr 12

Habilidades a desarrollar en el 2012

No Gravatar
Developer skills

Developer skills

HTML5

El nuevo estándar en para desarrollo de sitios y aplicaciones web.. cargado de características que ayudan a mejorar la navegación y la experiencia de usuario tanto en componentes como en atractivo visual. La mayoría de los navegadores ya soportan html5 inclusive los navegadores para dispositivos móviles se puede decir que casi están al mismo nivel de los navegadores de escritorio.

Aplicaciones Móviles

Creo que esta moda aun no hay muchos desarrolladores adoptándola aunque si es muy importante por la cantidad de dispositivos móviles que se adquieren día a día.. Se puede empezar escribiéndo aplicaciones nativas con los SDK de iOS o Android ..  también se pueden desarrollar con frameworks que portan la aplicación a multiples plataformas.. o más sencillo que los demás escribir aplicaciones web que se adaptan al formato de los móviles.

Servicios Web basados en REST

A pesar de que REST no tiene un estándar y se continúa escribiendo una definición.. muchos servicios alrededor de la web utilizan este método para transportar información.. su sencillez y la falta de tipos de datos pueden ser un punto a tomar en consideración antes de elegirlo. Su implementación conlleva conocer los diversos tipos de peticiones y su consumo es tan simple que con pocas líneas se puede solicitar información a un servidor basado en REST.

Bases de Datos NoSQL

Se puso de moda a partir de que las redes sociales necesitaron manipular grandes volúmenes de información en tiempos muy cortos.. es importante considerar que NoSQL sería casi imposible utilizarlo para realizar consultas complejas, pero entre sus ventajas está la velocidad de respuesta ante millones de peticiones simultáneamente. Su uso implica aprender nuevos métodos para realizar búsquedas y está fuertemente ligado a la denotación JSON para su estructura y almacén de información.

JavaScript

Es el lenguaje para la web interpretado del lado del cliente por excelencia.. hace mucho tiempo parecía no valer la pena aprenderlo.. pero con la llegada de librerías como jQuery, Prototype o Mootools su desarrollo fue muy importante.. PhoneGap o Titanium que son frameworks o librerías para desarrollar aplicaciones móviles utilizan este tipo de lenguajes. Html5 está muy relacionado con javascript, inclusive se desarrolló Node.js que es un framework orientado a eventos para el motor javascript v8 de google.

Las pruebas unitarias

Este tipo de pruebas garantizan el funcionamiento correcto tanto desde el punto de vista estructural como funcional.. es parte de la difícil tarea de los arquitectos de software y a diferencia de las pruebas funcionales que se acostumbran llevar a cabo por los testers, en una temprana etapa de desarrollo de una aplicación, este tipo de pruebas permiten detectar errores en la lógica a desarrollar. La mayoría de frameworks en diferentes lenguajes ya incluyen sus propias implementaciones para realizar pruebas unitarias, no estaría mal aprender a utilizar un par de ellas.

UX/UI

Siempre este término ha estado relacionado con los diseñadores y hay diseñadores que creen que pueden crear interfaces atractivas, simples e intuitivas para los usuarios .. pero creo que ahí esta el error.. parte de desarrollar aplicaciones implica conocer cual es la mejor forma de utilizar los componentes o en que lugares sería mejor utilizarlos para los usuarios.. El uso de equipos móviles han logrado que muchos desarrolladores empiecen a dar pequeños saltos hacia este interesante mundo..

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

Qbit Mexhico Blog is using WP-Gravatar