09 febrero 2006

 

.NET Protector (II)

Hace unos días hablamos de la iniciativa .NET Protector. Pues hoy ya se ha colgado el segundo "examen". Lo pongo entre comillas, porque no debería llamarse asi; Un examen debería implicar algo de dificultad... Esta vez, incluso los contenidos han sido más que evidentes (podeis ver el webcast correspondiente al capítulo II en la página de MSDN Media Center). Además, el funcionamiento del sistema de examenes es "tecnicamente mejorable"... en un par de días no se ha podido acceder (debe compartir plataforma con Desarrollador 5 Estrellas, tambien algo deficiente).

En fin, me parece genial este tipo de iniciativas, pero a pesar de su gratuidad se deberían cuidar ciertos detalles, ya que hacen que todos sus esfuerzos no sirven más que para que los usuarios se cansen pronto dado su escaso contenido técnico...

Esperemos que el 3er. capítulo sea más interesante....

 

¿Que es Mnemotecna?


Buenas!! Ya llevo una semana con el blog y todavía no os he contado de que va esto de Mnemotecna. Bien, Mnemotecna es mi proyecto empresarial, digamos, es mi "embrión" de empresa (teneis el link a la izquierda). Realizamos todo tipo de trabajos relacionados con simulación de sistemas medianamente complejos, normalmente a través de redes neuronales; Bueno, realmente nuestra vocación es ésta, pero estamos preparados para realizar cualquier tipo de soluciones basadas en entornos Microsoft, desde desarrollos web, o desarrollos para dispositivos móviles, o de Media Center, o de gestión, soluciones integrales, etc. Ahora mismo trabajamos en un proyecto de gran envergadura relacionado con la predicción de tráfico (si a alguien le produce curiosidad, que me ponga un comentario y le cuento más en detalle)... Como pista, os puedo decir que hemos tenido referencias en prensa, radio y TV por lo innovador del proyecto!!

07 febrero 2006

 

Desarrollando para Media Center 2005 (II)

.

Buenas!! Ayer vimos como instalar las SDKs para desarrollar HTML Hosted Applications para Media Center 2005. Hoy vamos a ver como crear un proyecto en Visal Studio para empezar a "customizar" las plantillas. Para ello, creamos un proyecto Web en blanco (en mi caso en C#) bajo un IIS local. Desconozco si se puede crear utilizando el Developer Web Server de VS 2005, pero supongo que si. En nuestro caso, si se usa un IIS local, VS se encarga automaticamente de crear el directorio virtual correpondiente con el nombre del proyecto.

Abrimos el fichero html que más nos interese (por similitud a nuestra aplicación final, en nuestro caso newsmain.htm) localizado en el subdirectorio HTML Templates del SDK, y copiamos todo su contenido en el portapapeles. Añadimos al proyecto un fichero nuevo llamado default.aspx y pegamos lo que hay en el portapapeles. Para que el fichero sea un aspx válido, añadimos al principio del todo la siguente linea:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

Hay que asegurarse que el proyecto contiene el fichero Default.aspx.cs, y si no lo tiene, lo añadimos y escribimos el siguiente código:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}

A continuación, añadimos al proyecto los siguientes ficheros encontrados en el subdirectio HTML Templates:

Una vez llegados a este punto, podemos ejecutar el proyecto y obtendremos la página elegida de la plantilla funcionando (incluyendo su funcionamiento con el Remote).

¿Como ver la aplicación desde MCE?

Para ello añadiremos al proyecto un fichero en blanco con extensión .mcl, en nuestro caso lo añadiremos como "MiAplicacion.mcl". Insertaremos el siguiente código en el:


donde http://localhost/Website será la url a nuestra aplicación. Para ejecutar la aplicación desde MCE, simplemente haremos docble click en este fichero .mcl desde el explorador de windows. Y si todo ha ido bien, veremos la aplicación ejecutandose dento de Media Center.

Hasta aqui ha llegado este capítulo. En el próximo veremos como modificar la plantilla a nuestro antojo, teniendo en cuenta las directrices del "10 Foot Interface".


06 febrero 2006

 

Desarrollando para Media Center 2005 (I)

.

Despues del descanso dominical, vamos a ver un articulo técnico. Lo voy a dividir en capítulos porque si no me podría tirar escribiendo (y vosotros leyendo) hasta el dia del juicio, asi que mejor, tomemonos las cosas con calma.

Para empezar, seguro que ya sabeis que se pueden hacer varios tipos de aplicaciones para Media Center. Básicamente son dos, las aplicaciones de tipo "Add-In", y las "Hosted HTML Applications". Las aplicaciones "Add-In" son aplicaciones que se ejecutan en la máquina MCE local, y se programan usando las APIs de MCE. Las "Hosted HTML Applications" son como aplicaciones web, que se ejecutan en un servidor externo (como el funcionamiento de los "Online Spotlights"), pero cuyo interfaz vemos en la máquina local.

En esta serie de artículos vamos a ver como programar aplicaciones del tipo "Hosted HTML Applications", a partir de los templates incluidos en las SDKs.

Lo primero que debemos hacer es hacernos con los elementos necesarios para empezar. Estos son, básicamente, un Windows XP Media Center Edition 2005 con su correspondiente mando a distancia...


Este mando a distancia viene incluido cuando compras un PC Media Center. También se puede obtener por Internet (aqui, por ejemplo) . Incluso podemos usar PDAs, usando software como el Niveus Pocket Remote. E incluso algunos teléfonos móviles.

Debemos descargar e instalar la Microsoft XP Media Center Edition 2005 SDK. Para ello es "necesario" contar con software genuíno de Microsoft, ya que se hace una comprobación antes de descargar.

Como ultimo paso de hoy, instalaremos el SDK, y haremos una prueba para ver si funcionan los templates. Para ello iremos al directorio donde hallamos instalado el SDK (por defecto "C:\Program Files\Microsoft\Microsoft Windows XP Media Center SDK") y nos metemos en el subdirectorio "HTML Templates". Buscamos el fichero default.htm y lo ejecutamos con Internet Explorer. Antes de nada, IE nos preguntara si deseamos ejecutar el codigo bloqueda de esta página, y le diremos que si. A partir de ahi, y si todo va bien, podremos navegar por los templates (con el mando, los cursores o el ratón) para familiarizarnos con ellos.

En el siguiente capítulo veremos como navegar por estas plantillas desde DENTRO de Media Center, y como crear un proyecto de Visual Studio para empezar a desarrollar sobre estas plantillas.

Talueg!!!

04 febrero 2006

 

.NET Protector (I)

¿Que es esto de .NET Protector?

.NET Protector es una iniciativa de los chicos de Microsoft LATAM (Latinoamérica) para que los desarrolladores se conciencien y aprendan a realizar código mas seguro. Se trata de un curso del estilo de los de Desarrollador 5 estrellas (de los que hablaré pronto), pero orientado a la seguridad. NO es parecido a otras iniciativas del estilo Boinas Negras y demas, aqui simplemente te presentan una documentación y luego haces un test, que de momento (solo ha salido el nivel 1) es muy facilón. El curso consta de 6 capítulos (uno cada semana), donde teóricamente se irá incrementando la dificultad. Hasta aqui todo parece muy bonito, PERO... lo triste del tema es que han intentado darle al curso una pátina de historia oscura de hackers o algo asi que queda realmente patética y ridícula...

Si quieres saltarte toda esa parafernalia de historieta de cómic, te recomiendo que eches un vistazo al Centro de Desarrollo de Microsoft Seguridad y te leas los documentos más interesantes.... aprenderás lo mismo, al menos de momento.

El nivel 1

El nivel 1 es simplemente un repaso general a temas de seguridad, muy facil. Hay un webcast al efecto, pero la misma información (e incluso mas ampliada) se puede encontrar en el link anterior del centro de desarrollo. Seguiré al tanto del resto de los capitulos y ya iré informando....

03 febrero 2006

 

Demasiados dispositivos...

Bueno, hoy quería contar la cantidad de trabajo que tenemos cuando queremos hacer una aplicación disponible al público... Si queremos que la gente la use, tenemos que distribuirla para acceder a ella de todas las formas posibles... Aunque en este artículo me centraré en las tecnologías basadas en Microsoft.

La gran mayoría de las aplicaciones de usuario pueden (y deben) distribuirse de las siguientes maneras:

Como veis, es importante que seleccionemos bien los modos de distribución de nuestra aplicación, pues si no lo hacemos quizas tengamos demasiado trabajo!!


02 febrero 2006

 

Captura y reprodución de audio para Smartphone


Alguien me ha pedido que haga una aplicación que, sin dar muchos detalles, sea capaz de capturar audio en formato MP3 o WMA desde un Smartphone de Microsoft. Pues creo que le voy a decir que no, pues no es posible (al menos con Smartphone 2003). A lo máximo que he llegado a sido a capturar audio en formato WAV con el Waveform Audio Interface, implementando el código incluido en el artículo de MSDN Recording and Playing Sound with the Waveform Audio Interface. Este código utiliza P/Invoke, y a pesar de que esta escrito para Pocket PC, no he tenido ningún problema al compilarlo para Smartphone... Simplemente he creado un nuevo proyecto para Smartphone en Visual Studio 2005, y he importado las siguientes clases (bajadas del artículo referenciado antes):

Para hacerlo funcionar, hay que incluir el archivo test.wav en el proyecto, y OJO: hay que marcar la propiedad "Copy to output directory" de este archivo como "Copy if newer". Si ponemos un boton (menú) para capturar y otro para reproducir... et voilá, ya lo tenemos. Yo lo he probado con el emulador, y enchufando un microfono al PC me ha funcionado a la perfección.

Aqui os incluyo el código para reproducir audio en WAV (obtenido a partir de WaveOut.TestProc):

******************************************************************************
private void Reproducir()
{

WaveOut wo = null;
try
{
wo = new WaveOut();
uint numDevices = wo.NumDevices();
if (numDevices < 1)
{
// FALLO: No se han detectado drivers de audio
return;
}

String fileName = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase;
fileName = Path.GetDirectoryName(fileName);
fileName = Path.Combine(fileName, "test.wav");
// Pone los stream buffers a 512KB
if (Wave.MMSYSERR.NOERROR != wo.Play(fileName, 512 * 1024, 0xffff, 0xffff))
{
// FALLO al reproducir
}

uint soundLength = wo.Milliseconds();
int sleepTime = (int)((float)soundLength / 3.0f);

// Espera a que acabe el sonido
sleepTime = 5;
int watchDog = 0;
int maxLoops = (int)( wo.Milliseconds() / sleepTime);
while (!wo.Done())
{
Thread.Sleep(sleepTime);
Application.DoEvents();
watchDog++;

if (watchDog > maxLoops)
{
// FALLO al detectar el final de sonido
return;
}
}

}
finally
{
if (wo != null)
wo.Dispose();
}

}

****************************************************************

La captura es también sencilla (a partir de WaveIn.TestProc):

****************************************************************
private void Capturar()
{
WaveIn wi = null;
try
{
wi = new WaveIn();
uint numDevices = wi.NumDevices();
if (numDevices < 1)
{
//FALLO: No se han detectado dispositivos de sonido

return;
}

// Poner 3 segundos de captura

// usando buffers de 256 KB
if (Wave.MMSYSERR.NOERROR != wi.Preload(3000, 256 * 1024))
{
// FALLO al cargar buffers
}

// Comienza captura
if (Wave.MMSYSERR.NOERROR != wi.Start())
{
// FALLO al capturar
}

// Espera 2 segundos
Thread.Sleep(2000);

// Para la captura
wi.Stop();

String fileName = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase;
fileName = Path.GetDirectoryName(fileName);
fileName = Path.Combine(fileName, "test.wav");

if (Wave.MMSYSERR.NOERROR != wi.Save(fileName))
{
// Error al salvar
}
}
finally
{
if (wi != null)
wi.Dispose();
}

}


******************************************

Bueno, pues como he contado, con esto capturamos y reproducimos WAV en un Smartphone. Pero... y el MP3 y el WMA?? pues de momento, ajo y agua... para comprimir a MP3 habría que hacer funcionar la librería LAME u otra similar en smartphone... la pena es que estas librerias suelen tener partes de ensamblador, por tanto nos olvidamos de recompilarlas para .NET Compact Framework. Respecto comprimir a WMA, lo unico que he encontrado ha sido código basado en las Windows Media Format SDKs, que NO estan disponibles para .NET Compact Framework... Una pena.

A si que esperemos que en Windows Mobile 5.0 cambie la cosa....

Por cierto, voy a abrir los comentarios por si alguien cree que estoy equivocado en alguna de estas cosas, lo pueda comentar...


 

Buenas!! (o como escribir un blog)

Este es mi primer blog. Siempre me han parecido una pérdida de tiempo, pero bueno, ahora como estoy de exámenes y me aburro estudiando pues voy a probar... Aqui intentare escribir con la mayor frecuencia posible sobre aquellos temas tecnológicos que me parezcan interesantes, dando enlaces e información útil técnicamente... Seguramente los artículos que publique estén relacionados con la programación (seguramente .NET) y tecnologías Microsoft...

Realmente no tengo ni idea de como llevar esto, asi que he buscado algo de información por ahi, y he encontrado esto en IsoPixel. Corto y pego:


Consejos para escribir un blog

1. Escribe sin faltas de ortografía. Si dudas, pasa el texto por Word para corregir tu escrito.

2. Contenido de calidad. La gente no desea que copies y pegues una anotación ajena con solo la leyenda: vía. Es válido hacerlo, pero que no sea la norma.

3. Redacta tus posts pensando que son para un medio en línea. No es lo mismo escribir para un medio impreso. Dale pausas al lector, usa espacios en blanco y separa en párrafos, usa listas, etc. No hay nada peor que una anotación compacta y con puro punto y seguido.

4. Crea un estilo propio. Escribiendo con regularidad, con el tiempo lo irás encontrando. No te esfuerces por este punto, en algún momento deberá darse de manera natural.

5. Regularidad. Una nota al día al menos. Los blogs más exitosos siguen esta tendencia. Boing Boing, Zeldman, Pjorge, Minid, Kottke, Microsiervos, etc. son blogs que actualizan varias veces al día. Hay que ver su popularidad y número de suscriptores a sus feeds.

6. Evita los posts largos, salvo que sean estrictamente necesarios (un tutorial, una reseña, etc). Una buena historia la puedes redactar en pocos párrafos. Lo demás es paja.

7. Enlaza los sitios claves de los que hablas en el post. No temas compartir tu Page Rank ;)

8. Encuentra un nicho y explótalo (Casciari Sic). Existen relativamente pocos blogs estrictamente personales famosos. El tema principal de este blog es el DISEÑO, pero como pueden ver, se adereza con temas políticos, deportes, cultura y lo que se me ocurra. Pero fundamentalmente, se habla de diseño en un 90%.

9. Evita discusiones banales. No te enganches con opiniones del tipo: los bloggers no deberían meter publicidad porque corrompen al medio. Ignórales, es mejor.

10. Evita en lo posible querer ser un guru de la blogosfera. En ocasiones y más en este medio, los egos son enormes. A veces conviene pasar como de perfil bajo ;).

11. No escribas por popularidad y comentarios. acabaras hartándote pronto. Con el tiempo puedes llegar a tener buena cuota de lectores y personas que te comenten.

12. Colabora y ayuda, ese es un signo que nos caracteriza, expande tus horizontes. Si comentas en un blog, que tu comentario sea certero y relacionado al tema. Si no escribes algo medianamente inteligente, olvídate de captar una visita por esta vía.


Bueno, pues intentaré seguir estos pasos más o menos a ver que tal va esto...

Ah! se me olvidaba!! He cerrado los comentarios porque de momento no voy a tener tiempo de leerlos ni nada... Ala, salvtes!!

This page is powered by Blogger. Isn't yours?