Microsoft


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

8
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

1
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

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

6
abr 12

Visualizar/Ocultar la consola en una aplicación.

No Gravatar

Hemos estado desarrollando varias aplicaciones de consola que hagan diversas funcionalidades (conectarse a un servidor sFtp, Ftp, Ftps, a WebServices, a Bases de Datos, etc) y el cliente quiere que dependiendo de un parámetro de  configuración se pueda visualizar o no la consola para fines de monitoreo.

Para realizar la visualización u ocultar la pantalla de consola en una aplicación hay que realizar los siguientes pasos:

1.- Crear un nuevo proyecto “Aplicación de Consola”.

2.- Ir a la ventana de propiedades del proyecto que acabamos de crear.

3.- En la pestaña de aplicación, en la opción “Tipo de resultado” seleccionar “Aplicación para Windows” y cerrar la pantalla de propiedades.

4.-  Agregar los métodos AllocConsole y FreeConsole a la clase principal como se muestra a continuación:

    class Program
    {
        [DllImport("kernel32.dll")]
        static extern bool AllocConsole();
 
        [DllImport("kernel32.dll")]
        public static extern Boolean FreeConsole();
 
        static void Main(string[] args)
        {
 
        }
    }

5.- En el método Main se puede permitir la visualización de la consola dependiendo de algún parámetro configurado en el archivo App.config

   static void Main(string[] args)
        {
 
            if (Convert.ToBoolean(ConfigurationManager.AppSettings["activarVisualizacionEventosEnConsola"]))
                AllocConsole();
 
            //[Tú código]
 
            if (Convert.ToBoolean(ConfigurationManager.AppSettings["activarVisualizacionEventosEnConsola"]))
            {
                Console.WriteLine("Presione enter para terminar el proceso");
                Console.ReadLine();
                FreeConsole();
            }
        }

 

Esperando que les sea útil esta información y recuerden que la compartir la información enriquecen a todos.

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

2
mar 12

NUI (Natural User Interface)

No Gravatar

Los dispositivos moviles como teléfonos inteligentes y “tables” han hecho popular el uso de atractivas interfaces “multitouch”, este tipo de interfaces estan extendiendose a otros dispositivos como mesas interactivas, cristales inteligentes y otros tipos de superficies, para permitir interactuar de una manera mas natural a las personas con la información. Con la aparición de Wii y Kinect que ha agregado el lenguaje corporal, los diseñadores y programadores han pensado en una gran cantidad de aplicaciones que en los próximos años cambiaran la manera en que nos comunicamos con las computadoras.

“En computación, una interfaz natural de usuario o NUI, es el termino comun usado por diseñadores y desarrolladores de interfaces de computadora para referirse a una interfaz de usuario que es efectivamente invisible, o se vuelve invisible con las intereacciones aprendidas sucesivamente por sus usuarios. La palabra natural se utiliza porque la mayoría de las interfaces de computadora utilizan
dispositivos artificiales de control, cuyo funcionamiento se tiene que aprender. una NUI se basa en que un usuario puede rapidamente hacer la transición de principiante a experto. Mientras que la interfaz requiere de aprendizaje, por lo tanto, “Natural” se refiere a un objetivo en la experiencia del usuario, que un usuario siente “como algo natural” mientras interactua con la tecnología” [1].

Evol-Interfaz1

Evolución de las interfaces. [2

“En los años 1970s,80s y 90s Steve Mann desarrollo una serie de estrategias de interfaz de usuario utilizando la interacción natural con el mundo real como una alternativa a una interfaz de línea de comandos (CLI) o a la interfaz gráfica de usuario (GUI). Mann se refiere a esta obra como “interfaces naturales de usuario”, “Interfaces de usuario directas”, y ”Computación Libre de Metaforas” [1].

Evol-Interfaz2

Evolución de las interfaces. [2

Las interfaces naturales de usuario es un siguiente paradigma en la historia de la computación y es un tema de actualidad por lo que hay que estar atento a sus avances así como aprender lo suficiente para poder desarrollar las aplicaciones que se necesitaran para la tecnología que se avecina.

Referencias :

[1].http://en.wikipedia.org/wiki/Natural_user_interface

[2].http://channel9.msdn.com/Events/MIX/MIX09/C15F

Mas información

http://channel9.msdn.com/Events/MIX/MIX09/C13F
http://nuigroup.com/log/P8/
http://nuigroup.com/tv/P75/
http://channel9.msdn.com/blogs/larrylarsen/ces-2010-nui-with-bill-buxton

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

24
feb 12

Arreglando compatibilidad IIS6 y reporviewer con IIS7 Windows Server 2008

No Gravatar

Hace poco tuve unos contratiempos con una aplicación WEB desarrollada para funcionar con IIS6
pues en el servidor donde se quería instalar era una versión más actual corriendo IIS7 más concretamente en un Windows Server 2008.

Para empezar, el instalador de la aplicación web no se ejecutaba correctamente, pues no permitía terminar el último paso de la instalación. Y además los reportes elaborados con reporviewer tampoco se visualizaban correctamente.Así que a investigar un rato en internet para saber como resolver los problemas.
Y encontre lo siguiente:

Para instalar los componentes para la administración de compatibilidad IIS6.0 usando el administrador del servidor de Windows Server 2008 y corregir el error en el instalador de la aplicación Web.

    1. Primero hay que presionar en el botón Inicio.
    2. Dar clic sobre Herramientas Administrativas y luego en Administrador del servidor.

      CompatibilidadII6-01

      CompatibilidadII6-01

    3. En el árbol de navegación de la izquierda expandir “Funciones” y con el botón derecho dar clic sobre “Servidor web (IIS) y seleccionar agregar servicios de función.
    4. En la lista de Servicios de función desplazar la barra hacia abajo y localizar las opciones
      “Compatibilidad con la administración de IIS6”.
    5. Seleccionar los check boxes para:
      Compatibilidad con la metabase de IIS6.
      Compatibilidad con WMI de IIS6.
      Herramientas de scripting de IIS6.
      Consola de administración de IIS6.

      CompatibilidadII6-02

      CompatibilidadII6-02

    6. Presionar el boton “Siguiente>” luego presionar el botón “Instalar” y confirmar la instalación.
    7. Presionar el botón Cerrar y salir del asistente de Servicios de función.

      CompatibilidadII6-03

      CompatibilidadII6-03

La compatibilidad con IIS6 se encuentra instalada.

Visto en:

http://www.activexperts.com/support/network-monitor/online/ii6metabase/

Para corregir los errores de visualización en los reportes de reporviewer:

Primero se necesita instalar el paquete distribuible 2008 de reporviewer

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=6576

CompatibilidadII6-04

CompatibilidadII6-04

También puede ser útil darle un vistazo a esta página:

http://praveenbattula.blogspot.com/2010/03/fix-to-report-viewer-problems-in-iis-7.html

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

15
feb 12

Sí te cambias a Mac, esto te puede ayudar

No Gravatar

Este post está dedicado a las personas que utilizan Windows y están iniciando a trabajar en el entorno de Mac, cuando las personas cambian de sistema operativo y solo están familiarizadas a aquello que siempre usaron de forma tan común, como el escritorio, el botón inicio, instalando un programa, a veces cambiar radicalmente nuestra perspectiva de un mundo informático, nos hace sentirnos desconcertados,y puede que en algunos casos nos desesperemos, para ello te publico esta guía para que empiezas con el pie derecho utilizando Mac.

A pesar de que en Mac OS X es un sistema operativo que está orientado a hacer las cosas simples, es habitual que nos “perdamos” un poco al no reconocer características con las que estamos habituados a trabajar en Windows.

¿Dónde está el menú Inicio y su contenido?

  • En Mac no existe un equivalente exacto a menú de inicio. En el dock (es un elemento de interfaz gráfica de usuario que permite a los usuarios iniciar, cambiar y monitorizar aplicaciones, en tu Mac es la barra inferior), puedes guardar las aplicaciones a las que accedes comúnmente. La configuración de impresoras, red, etc. está en Preferencias del Sistema.

Personalmente, trabajo de la siguiente forma: Utilizo Spotlight o Quicksilver para encontrar la aplicación que necesito lanzar, por lo que no necesito iconos de todas las aplicaciones instaladas. Sin embargo, en el dock sólo dejo aquellas aplicaciones que conviene tener en el escritorio porque trabajo con ellas “arrastrándoles” objetos, como Photoshop, iTunes, Safari…

¿Dónde está el “Panel de control”?

  • En Mac se llama “Preferencias del Sistema”, hay un acceso directo si pulsas el logo de la manzanita de la barra superior del escritorio, o el icono de las ruedas dentadas en el dock.

¿Cómo expulso una unidad?

  • Para montar una unidad no tendrás ningún problema, cualquier dispositivo montado correctamente aparecerá en el escritorio. Para expulsarla, simplemente lleva su icono hacia la papelera. Tranquilos, no significa que se borrara, o se formateara tu dispositivo, si observas al seleccionar una aplicación el icono de la papelera se convierte en el signo de “expulsar”.

También es útil saber que si seleccionamos varios documentos que queremos borrar, y una unidad, el sistema hará lo que toca para cada caso: Si son documentos los borrará, y si son unidades los desmontará.
¿Cómo instalo una aplicación?

  • En Mac, las aplicaciones no se “instalan” tal y como se hace en Windows. Los programas para Mac OS X son, en apariencia para el usuario, un simple icono. En realidad, profundizando un poco, dicho icono es una carpeta especial con permisos de ejecución y que contiene una estructura de archivos definida por el sistema operativo y que contiene lo necesario para que la aplicación funcione de manera adecuada.

En Mac, no existe un “registro del sistema”, debido a lo anterior. Las aplicaciones utilizan una carpeta llamada “Application Support” para guardar los archivos de configuración del usuario. Para instalar una aplicación, nos bajaremos los programas habitualmente en formato .dmg. Haciendo doble click sobre dicho archivo, se nos montará una nueva unidad en el escritorio, que contiene la aplicación. Lo único que tendremos que hacer es arrastrar esta aplicación donde queramos guardarla (normalmente en Aplicaciones).

¿Como desinstalar una aplicación?

  •  Para desinstalar una aplicación, llevaremos su icono a la papelera. Si no queremos guardar la configuración personalizada que nos habrá creado la aplicación para nuestro usuario, podemos borrar la carpeta con su nombre que se encuentra en (nuestro_nombre_usuario)/Librería/Application Support.

¿CTRL+ALT+SUPR en Mac?

  • Para forzar a algunas aplicaciones a cerrarse en Windows usábamos esto, en Mac pulsamos ALT+CMD+ESC. Aparecerá una lista con las aplicaciones abiertas y podrás cerrar la que deseas individualmente. El sistema o resto de aplicaciones no se verán afectados.

¿Cómo cambio la aplicación predeterminada para abrir algunos tipos de archivos?

  • Abrimos las propiedades del archivo, pulsando botón derecho sobre el archivo con la extensión a tratar, y “Obtener Información”. Luego buscamos la zona “Abrir con…” y elegimos con qué queremos que se abra. Si pulsamos el botón “Cambiar todo”, cambiaremos cualquier archivo con esa extensión, y no sólo el que estábamos seleccionando.

Estas son la aplicaciones más comunes que utilizamos en el entorno de Windows pero al compararlo con la Mac  notamos una increíble diferencia.

“Suerte y bienvenido a un nuevo mundo informático”

Más información en:
http://www.applesfera.com/apple/screencast-switchers-el-escritorio

http://es.wikipedia.org/wiki/Spotlight
http://www.chozadigital.com/?p=4151

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

20
dic 11

Asp.net MVC 2 Model List<> DropdownListFor

No Gravatar

ASP.NET MVC

En mi experiencia recorrindo diferentes lenguajes de programación y sus respectivos frameworks de desarrollo ágil para aplicaciones web, esta vez tocó el turno a asp mvc 2 y para iniciar esperaba crear un lista de selección.. Se que la versión actual de asp mvc es la 3, pero solamente se puede utilizar con visual studio 2010, el cual aun no hemos comprado, por eso este mini how to lo hago con la versión 2.

Leí muchos tutoriales y ejemplos sobre como lograr hacer un dropdownlist con información de un modelo, la mayoría de los ejemplos mostraban lo siguiente:

Crear un modelo y luego una propiedad de tipo List conteniendo SelectListItem que básicamente es una estructura de textos y valores.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class EjemploModel
{
   [DataType(DataType.Text)]
   [Required(ErrorMessage = "Selecciona un mes")]
   [DisplayName("Mes")]
   [UIHint("List")]
   public List<SelectListItem> meses { get; set; }
 
   // Constructor para llenar la lista en la instancia
   public EjemploModel()
   {
      meses= new List<SelectListItem>();
      for(int i=1; i<=12; i++)
      {
         meses.Add(new SelectListItem() { Value =i.ToString(), Text = i.ToString() });
      }
   }
}

Hasta esta punto todo parece tener sentido.. creando una propiedad de tipo lista y luego pasándola a la  vista:

1
2
3
<%= Html.LabelFor(model => model.mes) %>
<%= Html.DropDownListFor(Model.mes, Model.mes, "-------")%>
<%= Html.ValidationMessageFor(model => model.mes, "*")%>

Y seguramente funciona.. el problema venía cuando hacia submit del formulario.. ya que el valor seleccionado del dropdownlist nunca era tomado como parametro en el action donde la enviaba.. Leí muchos post donde a novatos como yo les ocurría el mismo error.. claro, en los tutoriales nunca decían como resolverlo por lo que la respuesta viene a continuación, sencilla para serles sincero..

En los otros frameworks no es necesario definir una propieda de tipo lista, simplemente lo que se hace es definir una propiedad que en este caso sería Int .. y la lista crearla por aparte sin necesidad de hacerla propiedad del modelo. Sé que hay más de una manera de hacer esto y mi forma es la siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class EjemploModel
{
   [DataType(DataType.Text)]
   [DisplayName("Mes")]
   [UIHint("List")]
   public List<SelectListItem> mesLista { get; set; }
 
   [DataType(DataType.Text)]
   [Required(ErrorMessage = "Debe de seleccionar un mes de vencimiento.")]
   [DisplayName("Mes")]
   public int mes{ get; set; }
 
   // Constructor para llenar la lista en la instancia
   public EjemploModel()
   {
      mesLista= new List<SelectListItem>();
      for(int i=1; i<=12; i++)
      {
         mesLista.Add(new SelectListItem() { Value =i.ToString(), Text = i.ToString() });
      }
   }
}

Y en la vista quedaría de la siguiente manera:

1
2
3
<%= Html.LabelFor(model => model.mes) %>
<%= Html.DropDownList("mes", new SelectList(Model.mesLista, "Value", "Text"), "-------")%>
<%= Html.ValidationMessageFor(model =>; model.mes, "*")%>

Ahora al momento de hacer submit, el valor seleccionado se pasará hacia la propiedad mes y no a mesLista como ocurría anteriormente. Espero les sirva de ejemplo y guía..

Suerte

Compartir y Disfrutar

  • Facebook
  • Twitter
  • Delicious
  • Digg
  • StumbleUpon

Qbit Mexhico Blog is using WP-Gravatar