viernes, 19 de noviembre de 2010

Silverlight: Enlaces de ayuda para Silverlight y SketchFlow

Ahora que tengo que usar Silverlight y Silverlight Sketchflow, me he dado la tarea de investigar un poco y poner como siempre los links de las páginas que me han ayudado a ganar en conocimiento:

1) Ejemplo Online sobre Sketckflow por: Lukas Zdechovan.

2) No hay quite!, en mi segundo día con Silverlight SketchFlow, ya me estaba quejando que no tenemos por lo menos un Grid para poner en las escenas. La solución la tiene Philipp Sumi con su Sketchables Framework que llega a complementar el set de controles entre ellos está el que yo andaba buscando. (En otra entrada explicaré como se instala Sketchables Add-in).

Una alternativa más rápida para diseñar es Balsamiq Mockups o Pencil. Con respecto a los diseños de prototipos de pantalla conocidos también como Wireframes o  Blueprints, se realizan éstos para concentrarse en la estructura del contenido que tendrá el sistema y no en aspectos visuales, considera además, un enfoque en aspectos generales del sistema sin entrar en detalles. De ésta forma los programadores, diseñadores y los clientes pueden entrar en discusión y toma de decisiones más rápido y como resultado beneficioso serán menos cambios a futuro reduciendo costos y tiempo.

3) Controles para mostrar texto, los tipos de fuentes, controles que no permiten seleccionar el texto, etc. en Texto y fuentes

4) Ejemplos donde se demuestra como navegar entre páginas XAML:
- Ejemplo #1
- Ejemplo #2
- Ejemplo #3. La forma correcta de navegar entre páginas. También vale mucho la pena leer The Silverlight Navigation Framework
- Ejemplo #4: Otro ejemplo de la forma correcta para navegar entre páginas XAML

- Ejemplo #5: Y sigo jodiendo con el tema sobre la forma correcta de navegar entre páginas XAML.

sábado, 6 de noviembre de 2010

Ubuntu: Sonido de TvTime no funciona

No podía escuchar sonido en TvTime con Ubuntu 10.10, por suerte encontré una solución en los foros de Ubuntu.

Lo anterior aplica para capturadoras TV Kworld con chip philips SAA7134/SAA7135HL que es la que tengo en mí máquina.

martes, 2 de noviembre de 2010

Ajax .Net: Web Method no se está ejecutando.

Me preguntó un colega de progra si he tenido un error con Ajax cuando ocurre una excepción que dice algo como "Sys.Net.WebServiceFailedException ......".

Resulta que ese error me a ocurrido más de una vez, jeje!, y por suerte me acuerdo que específicamente para ese mensaje, dicho error ocurre porque no se está controlando la respuesta de una llamada de un "Static Web Server". Los Static Web Server o Static Web Method, son algo muy común en Ajax y ni que decir en los Ajax Control Tool Kit.

El problema se da cuando se hace clic sobre un botón el cual llama a una función del objeto WebMethods. Resulta que al dar clic sobre el botón se estaría enviando dos órdenes: 1º Un refresh de la página, 2º una llamada a un Web Method. Los dos puntos anteriores provocan el error. La solución es simplemente cancelar la orden del refresh de la página (o del roundtrip). Al cancelar el refresh, el web method hace el viaje de vuelta en forma exitosa.

Para mayor claridad, recomiendo revisar en el siguiente foro de Ajax .Net, donde de hecho en Agosto del 2010 puse mi comentario al respecto!

domingo, 31 de octubre de 2010

Inglés: Pasado de los verbos regulares

Jeje, ésta entrada nada que ver con la computación, pero lo pongo porque siempre se me olvidan estas reglas del inglés.

¿Cómo se forma el pasado de los verbos regulares?

1) Los verbos que terminan en vocal "e", agregan "d":

     live   ==>  lived
    date  ==>  dated
    hate  ==>  hated

2) Los verbos que terminan en consonante seguida de "y", convierten la "y" en "i" y agregan "ed":

    try      ==>  tried
    dry     ==> dried
    cry     ==> cried

3) Los verbos que terminan en vocal seguida de consonante que no sea "w" o "y", doblan la consonante y agregan "ed":

    plan        ==>  planned
    commit   ==>  committed
    shop       ==>  shopped

4) El resto de verbos incluyendo los que terminan con "w", agregan "ed":

    fill      ==>   filled
    serve  ==>  served
    smell  ==>  smelled
    show  ==>  showed


Pronunciación:

1) Todos los verbos regulares que terminan con: p – k – s – ch – sh – f – x – h, pronuncian ED como “T”. Ejemplos de verbos que suenan con "T" al final: asked, baked, fixed, joked

2) Todos los verbos regulares que terminan con: l – v – n – m – r – b – v – g – w – y – z, y sonido vocal, pronuncian la "ED" como "D".Ejemplos: allowed, agreed, appeared, believed, cried, moved, shared.

3) Todos los verbos regualres que terminan en "T" o "D", pronuncian el "ED" como "ID". Ejemplos: accepted, afforded, ended, invited, painted, planted.


Referencias:
Reglas Verbos Regulares
Pronunciación de verbos regulares
Lista de verbos regulares

sábado, 30 de octubre de 2010

ASP .NET: iTextSharp no funciona en sitios web en producción

iTextSharp es un ensamblado OpenSource para .Net, que permite crear archivos en formato PDF. Muy útil cuando queremos convertir archivos HTML a PDF. Sin embargo existe un problema con la dll en producción.

El problema es que después de instalar en el servidor de producción, obtenemos el sisguiente error: "That assembly does not allow partially trusted callers"

La solución es modificar el código fuente de iTextSharp, para que permita ensamblados en modo "Partially Trusted Callers" en lugar de full trust.

Lo único que se debe hacer es modificar el archivo AssemblyInfo.cs, establecediendo las siguientes líneas de código:

using System.Security;
using System.Security.Permissions;

[assembly: AllowPartiallyTrustedCallers]

Referencia: www.techparadise.gr

jueves, 14 de octubre de 2010

domingo, 26 de septiembre de 2010

Linq: Usar operadores de Linq en lugar de un foreach

Éste es un caso en el que quería llenar un DropDownList utilizando el CascadingDropDown. En el método del WebService, quise usar el método AddRange, y así evitar tener que implementar un foreach para iterar por la colección de filas de un DataTable.

Por ejemplo, tengo un método que se llama Clientes.Listar(), el cual devuelve la lista de filas en un objeto DataTable, entonces para llenar al DropDownList tengo que usar un foreach para recuperar el valor que se va a mostrar en el DropDown y el valor llave que se utilizaría para saber cuál item se seleccionó. Utilizando el método AddRange del tipo List y las técnicas de Linq, tenemos el siguiente código de ejemplo:

--------------------
List valores = new List();
Clientes clientes = new Clientes();

valores.AddRange
(
    from fila in clientes.Listar().AsEnumerable()
    select new CascadingDropDownNameValue(fila["NOMBRE"].ToString(), fila["CODIGO"].ToString())
);
return values.ToArray();

--------------------
Otra alternativa de Linq pero expresada en secuencia de operadores de Linq sería de la siguiente forma:

--------------------
values.AddRange(clientes.Listar().AsEnumerable().Select(
fila => new CascadingDropDownNameValue
(
    fila["NOMBRE"].ToString(),
    fila["CODIGO"].ToString()
)));
--------------------

Cualquiera de los dos casos anteriores sirven para reemplazar el siguiente código:

foreach (DataRow fila in clientes.Listar().Rows)
{
     values.Add(new CascadingDropDownNameValue(fila["NOMBRE"].ToString(),   
     fila["CODIGO"].ToString()));
}

La diferencia, entre éste foreach y el uso de Linq es que Linq me permite hacer muchas cosas en una sola línea de código, en el peor de los casos tengo que agregar otras líneas, pero con las técnicas tradicionales, en lo personal, el código se vuelve para mí muy tedioso y en ocasiones dificil de entender.

Algunos dicen que Linq es más rápido, otros dicen que no siempre es el más rápido, independientemente de la eficiencia con que resuelva Linq el problema, prefiero Linq porque me permite codificar mejor casos difíciles donde tengo que dar tratamiento a por ejemplo muchos campos de una tabla o muchos datos de un arreglo, etc.

domingo, 12 de septiembre de 2010

Asp.Net: Valor enviado desde servidor no se actualiza con Javascript

Existe un caso especial en el que deseamos actualizar un valor, por ejemplo un contador de filas de un GridView, el cual está dentro de un UpdatePanel. Para actualizar el valor, se decide registrar una variable dinámica la cual se asocia al objeto window.document, quedando en la página del cliente de la siguiente forma:

<script type="text/javascript">//<![CDATA[
document.TotalRows='5';//]]>
</script>


Para registrar una variable al objeto document de Javascript desde el Code-Behind con C#, se hace de la siguiente forma:

if (!ClientScript.IsClientScriptBlockRegistered("total"))
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "total",
"document.TotalDeFilas ='" + gridView.Rows.Count + "';", true);

En el caso que estaba resolviendo, el código anterior lo coloqué en el evento Page_Load() de una página *.aspx.

Ahora bien, cada vez que un usuario agregue un registro nuevo o elimine un registro, el valor debe cambiar en la página. Si utilizamos la siguiente línea de código, nos daremos cuenta que no va a funcionar, aunque la línea de código éste buena:

ClientScript.RegisterClientScriptBlock(this.GetType(), "total", "document.TotalDeFilas ='" + gridView.Rows.Count.ToString() + "';", true);

¿Por qué no se actualiza el valor en la página después de por ejemplo eliminar un registro?

Muy simple (aunque me tomo como tres horas darme cuenta, jaja!), eso ocurre porque el GridView está dentro del UpdatePanel. Entonces para solucionarlo; es decir, para actualizar el valor, hay que usar el objeto ScriptManager en lugar del objeto ClientScriptManager. La línea de código sería entonces:

ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "total", "document.TotalDeFilas ='" + GridView.Rows.Count + "';", true);

Lo que vale la pena tener en mente es que si uno desea actualizar valores de objetos que están dentro de un UpdatePanel usando javascript, lo mejor es usar ScriptManager en el CodeBehind.

lunes, 9 de agosto de 2010

LINQ: Excelente plug-in para VS 2008+

Encontré un excelente plug-in para instalar en Visual Studio 2008 el cual permite visualizar de una forma diferente la cadena que se envía a SQL Server una vez ejecutada la expresión o sentencia de LINQ.

Si bien en modo de depuración podemos ver la cadena que se envía al SQL Server, con el plugin es posible visualizar la cadena pero además se puede visualizar los datos que vienen de vuelta desde la base de datos.

Un ejemplo de la nueva ventana de dialogo es la siguiente:

Ventana de Linq Visualizer.

Si hacemos clic en "Execute", veremos el resultado que es devuelto desde la base de datos, por ejemplo:

Ventana con resultados.

El plugin se llama "Linq to Sql Visualizer" y se puede descargar desde la página del creador en linq-to-sql-debug-visualizer.
 

domingo, 4 de julio de 2010

Ubuntu 10.04: ¿Cómo posicionar los botones de la barra de título de la ventana?

Como es sabido, en Ubuntu 10.04, todas las ventanas muestran los botones de configuración de tamaño de la ventana en el lado izquierdo de la barra de título. Este cambio se me hace totalmente incómodo y por suerte la forma para restaurarlo es muy fácil!

Los pasos son los siguientes (forma para expertos):

1- Alt+F2 para abrir el cuadro de diálogo para ejecutar aplicaciones.
2- Digitar gconf-editor
3- Ir a /apps/metacity/general
4- En el lado derecho buscar button_layout
5- Modificar el valor de la cadena button_layout de la siguiente forma

:minimize,maximize,close
Notar que los dos puntos ahora se ponen en el lado izquierdo de la cadena y la palabra close se mueve al final de la cadena.


La otra alternativa pero mucho más fácil es utilizando la herramienta Ubuntu Tweak, y sinceramente es muy buena. Permite configurar infinidad de cosas y preferencias de Linux de forma fácil y que no son visibles para la mayoría de los usuarios. Por consiguiente el uso de comandos queda relegado! Además la aplicación permite la actualización o descarga de nuevos programas.

Para restaurar el posicionamiento de los botones de la barra de título, simplemente, en Ubuntu Tweak, vayan a la sección Escritorio y buscan Configuración de Gestor de Ventanas y en el lado derecho buscan Formato de botones en la barra de título de la ventana. Muestran las opciones Izquierdo - Derecho. Simplemente se escoge derecho y listo.

Ejemplo: