lunes, 22 de abril de 2013

Concatenar varios registros en una sola cadena

Si alguna vez necesitaron concatenar varios de registros en un solo campo varchar (separados por comas o punto y coma como mi ejemplo), seguro probaron COALESCE, con cursores, tablas temporales, funciones, o mas de alguna de las anteriores mezcladas.

Pues bien, a continuación agregaré un bloque de código que hace lo mismo que todos esos inventos anteriores, pero mas rápido, fácil y sin esfuerzo. Espero sea de utilidad.  
(
  (
     SELECT COLUMN_NAME + ';' 
       FROM TABLE 
      WHERE COLUMN_ID = VALUE
        FOR XML PATH('')
  ) AS VARCHAR(MAX)
)

miércoles, 14 de noviembre de 2012

Probando sitio seguro (HTTPs) en LOCALHOST

Creo que el titulo es bastante claro, tienen un sitio web en su sitio Default Web Site que necesitan probar con HTTPs, pero quieren hacerlo de la manera mas fácil y rápida posible.

Bueno, pues encontré el siguiente sitio donde nos dicen como hacerlo aqui. Ahí están las instrucciones completas, los valientes pueden ir directo al link de descarga del IIS 6.0 Resource Kit Tools.

Suerte!

sábado, 15 de septiembre de 2012

¿Por que la propiedad MPMediaItemPropertyLyrics esta vacia?

Realmente no se si en iOS 6 ya esta corregido este pequeño inconveniente, pero en iOS 5.1 y anteriores, al consultar la propiedad MPMediaItemPropertyLyrics del ítem en reproducción, nos regresaba un NSString vacío aun y cuando el elemento si contaba con letra (esto comprobado por ejemplo, en la aplicación de música del dispositivo).

Una solución a esto consiste en obtener la letra de una manera un poco diferente, primero agregamos el Framework AVFoundation y posteriormente usamos las siguientes líneas de código:

NSURL* songURL = [musicPlayer.nowPlayingItem valueForProperty:MPMediaItemPropertyAssetURL];
AVAsset* songAsset = [AVURLAsset URLAssetWithURL:songURL options:nil];
NSString* PropiedadLetra = [songAsset lyrics];

Y terminaremos siempre con el contenido de la letra en nuestra variable PropiedadLetra. Este código es utilizado en la aplicación gratuita Song Data que consulta esta y mas información de tus canciones. Puedes descargarla si así lo deseas de aquí.

viernes, 3 de agosto de 2012

Navigation Bar desplaza View de contenido hacia abajo.

Recientemente he estado teniendo un problema en un View Controller en el cual manipulo todos los SubViews directamente en el código, modificando su posición mediante la propiedad frame:
AlbumArt.frame = CGRectMake(15, 52, 290, 290); 
Todo funcionaba estupendamente hasta que decidí agregar un Navigation Controller. Aunque todo parecía funcionar como debiera, en algunos momentos se creaba una franja en la parte superior de mi view y los controles se desplegaban hacia abajo.


Después de un rato de buscar a alguien que le sucediera lo mismo encontré un par de soluciones:

La primera y mas obvia, configura el Navigation Bar para que sea traslucida: 
[self.navigationController.navigationBar setTranslucent:YES]; 
La segunda y que fue la que me ayudó a reconciliarme con mi app fue la de establecer en el código las dimensiones de mi Navigation Bar en el método didRotateFromInterfaceOrientation:
CGRect frame = self.navigationController.navigationBar.frame;
self.MyTable.frame = CGRectMake(0, frame.size.height, frame.size.width,
self.MyTable.frame.size.height - frame.size.height);

Actualización

En algunas ocasiones el procedimiento anterior puede producir comportamientos inesperados en la tabla (como que se reduzca mas de la cuenta). Así que les recomiendo que realicen el ajuste no en el frame de la tabla, sino directamente en el view que contiene la tabla. Suerte!

martes, 6 de diciembre de 2011

Problema Acceso Denegado de javascript en sitios con frames

Resulta que tenía un sitio web en .Net desarrollado con controles Telerik el cual funcionaba estupendamente. El problema se presentó cuando la empresas decidió que mi pagina debería correr dentro de un iFrame en otra aplicación.

Después del obligado cambio en el diseño y distribución, me encontré con que muchos de los controles no funcionaban correctamente o de plano, ya no servían para nada. Para no hacer la historia más larga, encontramos que el problema era que mi aplicación se encontraba en un dominio y la aplicación maestra (la que encerró en un triste frame a mi aplicación) en otro.

Entre los errores que encontré estaba el siguiente:
Mensaje: Acceso denegado.
Línea: 5959
Carácter: 49
Código: 0
URI: http://192.200.4.248/NOMBRE_APLICACION/ScriptResource.axd?d=2TUSrXlGiZ-YhriQIxHvs2j2r3CD-1dxiNch9HtINJ1-xYqYmXVZ2MxqzBF9v_CRUg-thDlUW3uXGz_vysgmtwWzobIsUaqbRwJQzvcSjKo1&t=633093755470531249 

Ese o en lugar de ScriptResource.axd TelerikScript.axd o algo así. El punto es que la solución está en usar unos archivos de scripts modificados directamente en nuestros ScriptManagers. Esto se hace de la siguiente manera (en cada página que tenga un ScriptManager o RadScriptManager):

    <telerik:RadScriptManager ID="RadScriptManager1" runat="server" >
        <Scripts>
            <asp:ScriptReference Name="MicrosoftAjax.js" ScriptMode="Auto" Path="~/Includes/MicrosoftAjax.js"/>
        </Scripts>
    </telerik:RadScriptManager>

Adjunto aquí el par de archivos requeridos (MicrosoftAjax.js y MicrosoftAjax.debug.js).

Referencias:

http://madskristensen.net/post/Iframe-cross-domain-JavaScript-calls.aspx
http://weblogs.asp.net/bleroy/archive/2007/01/31/how-to-work-around-the-quot-access-denied-quot-cross-domain-frame-issue-in-asp-net-ajax-1-0.aspx
http://www.koders.com/javascript/fid512F223189A2C0D3E027DA32C0742FA88FEA3FD8.aspx

martes, 22 de noviembre de 2011

Obtener todas las propiedades de una clase

Recientemente necesite consumir un WebService que me regresaba un objeto que contaba con cientos de propiedades. Puesto a que no sabía exactamente cuál de todas ellas era la que buscaba, me di a la tarea de buscar una manera de cargar en un Grid todas sus propiedades junto con su valor correspondiente.

Después de un par de búsquedas en internet, y unas cuantas compiladas sin resultado, llegue al siguiente código que realiza la actividad perfectamente.

using System.Reflection; 

foreach (MemberInfo mi in NOMBRE_CLASE.GetType().GetMembers())

    try 
    { 
       if (mi != null && mi.MemberType == MemberTypes.Property) 
       { 
          PropertyInfo pi = mi as PropertyInfo; 
          if (pi != null) 
            Table.Rows.Add(mi.Name, pi.GetValue(NOMBRE_CLASE, null).ToString()); 
       } 
    } catch { } 
}

Nota:
El código lo tome de varios sitios del web, cuando tenga un poco de tiempo pondré los sitios de referencia.

viernes, 18 de noviembre de 2011

Copia simultanea mediante hilos de ejecución

¿Alguna vez se te presento la urgente necesidad de copiar cientos de memorias flash? Si la respuesta es no, y crees que no se te presentara jamás esta interesante oportunidad, pues entonces esta entrada no te será de gran ayuda, en caso contrario, si te ha pasado o mejor aún, te pasara próximamente (o te pasa regularmente) entonces no dudes en bajar este pequeño proyecto que te puede ayudar a hacerlo de manera más rápida.

Utiliza hilos de ejecución independiente y no esta pulido en absoluto, pero como está el fuente, pueden dejarlo tan simpático como decidan hacerlo.

Descargalo aquí