viernes, 30 de mayo de 2014

Multimedia en HTM5

Parte 1: Audio - Reproducción de Archivos

1. Formatos de Audio
Para reproducir Audio en HTML5 se usa el elemento <audio>, el cual dependiendo del navegador debe soportar los formatos:
·         WAV (Waveform Audio Format): Formato de audio no comprimido desarrollado por IBM y Microsoft.
·         Ogg Vorbis: Formato de audio comprimido de código abierto desarrollado por la fundación Xiph.Org.
·         MP3: Formato de audio comprimido desarrollado por Moving Picture Experts Group (MPEG).

2. El elemento <audio>
Este elemento se compone de varios atributos entre los cuales tenemos:
·         src: Especifica el archivo de audio a reproducir.
·         autoplay: Inicia automáticamente la reproducción.
·         loop: Reinicia el audio cuando termina.
·         controls: Muestra los controles predeterminados para manejar el audio: detener, continuar, tiempo, etc.

3. El elemento <source>
El elemento <audio> puede contener varios elementos de tipo <source> que especifica recursos de audio alternativos al atributo src especificado en el elemento <audio>, es decir, si el Navegador (Browser) no soporta un tipo de archivo de audio especificado en el atributo src del elemento <audio> se generaría un error, sin embargo, si no especificamos el atributo scr y definimos una lista de <source> el navegador reproducirá el primer formato que soporte, tal como se muestra en el siguiente ejemplo:
  <audio controls>
    <source src="Archivo.wav">
    <source src="Archivo.ogg">
    <source src="Archivo.mp3">
  </audio>
El elemento <source> a su vez tiene 2 atributos:
·         src: Especifica el archivo de audio a reproducir si soporta el formato el Navegador.
·         type: Especifica el tipo de recurso multimedia referenciado. Este tiene 2 parametros: un tipo MIME y un Codec. Como se muestra en el siguiente ejemplo:
  <audio controls>
    <source src="Archivo.wav" type="audio/wav; codecs=1">
    <source src="Archivo.ogg" type="audio/ogg; codecs=vorbis">
    <source src="Archivo.mp3" type="audio/mpeg; codecs=mp3">
  </audio>
Nota: No es necesario especificar el tipo (atributo type), mejor es que el navegador lo determine.

Más información:

Parte 2: Audio - Las APIs de Audio

1. Introducción
Actualmente hay 2 APIs de Audio para la Web en la W3C:
·         Audio Data API: Desarrollada por Mozilla e implementada en su navegador Firefox.
·         Web Audio API: Estandar W3C propuesto por Google e implementado en los navegadores Chrome, Firefox y Safari.
Nota: Audio Data API, no es un estándar solo funciona en Mozilla Firefox.
Las APIs de audio permiten programar audio, es decir, realizar las 2 operaciones básicas:
·         Leer archivos de audio y extraer muestras de audio.
·         Crear sonidos o generar datos de audio.
Todo audio, sea en un archivo de sonido o en uno de video, tiene un número fijo de muestras de audio al que se conoce como "FrameBuffer". La interpretación de esta información depende de 2 ajustes de codificación del recurso que son:
·         El número de canales presentes de audio.
·         La frecuencia de muestreo de la grabación.
Nota: A estos 2 se le conocen como Metadatos.

2. Audio Data API
La API de Audio de Mozilla tiene 2 eventos en los cuales se programa la lectura de datos de audio:
·         MozAudioAvailable: Se acciona por cada fragmento de datos de audio que haya sido decodificado.
·         loadedmetadata: Ocurre cuando se carga la información del FrameBuffer, es decir los canales y la frecuencia.
Una vez cargada la metadata se puede acceder a 3 atributos del objeto audio:
·         mozChannels: Número de canales.
·         mozSampleRate: Frecuencia de muestreo (Tasa).
·         mozFrameBufferLength : Número de FrameBuffers.
Ejemplo:
<audio id="audio" src="Archivo.mp3"></audio>
<script>
  var audio = document.getElementById("audio");
  audio.addEventListener('MozAudioAvailable', audioAvailableFunction, false);
  audio.addEventListener('loadedmetadata', loadedMetadataFunction, false);
</script>

Más información:

3. Web Audio API
El objeto principal de la API de Audio Web es "AudioContext" y solo debe existir uno por página. Entre sus miembros tenemos:
·      Propiedades: destination, sampleRate, currentTime, listener.
· Métodos: createBuffer, createBufferSource, createMediaElementSource, createMedia StreamSource, createMediaStreamDestination, createScriptProcessor, createAnalizer, createGain, createDelay, etc.
Las operaciones de audio básicas son realizadas mediante nodos de audio, representado por el objeto "AudioNode", el cual tiene los siguientes miembros:
· Propiedades: context, numberOfInputs, numberOfOutputs, channelCount, channelCount Mode, channelInterpretation.
·        Métodos: connect, disconnect.
Los nodos de audio están unidos a través de sus entradas y salidas. Cada entrada o salida está compuesta por varios canales representando un diseño de canal específico.
Otros objetos importantes de Web Audio API son: AudioBuffer, AudioListener, AudioParam, DelayNode, GainNode, OscillatorNode, PannerNode, ScriptProcessorNode, etc. También existen eventos como: audioprocess, complete y ended.

Más información:

Parte 3: Video - Reproducción de Archivos

1. Formatos de Video
Para reproducir Video en HTML5 se usa el elemento <video>, el cual dependiendo del navegador debe soportar los formatos:
·         WebM: Formato de Video basado en el contenedor MKV de Matroska. Alberga codecs VP8 y Vorbis.
·         Ogg: Formato de video de código abierto desarrollado por la fundación Xiph. Alberga codecs Theora, Vorbis, Speex, FLAC.
·         MP4: Formato de video desarrollado por Moving Picture Experts Group (MPEG). Contenedor de codecs MP3, AAC y H.264.

2. El elemento <video>
El elemento <video> se compone de algunos atributos similares al <audio> entre los cuales tenemos:
·         src: Especifica el archivo de video a reproducir.
·         autoplay: Inicia automaticamente la reproducción.
·         loop: Reinicia el video cuando termina.
·         controls: Muestra los controles predeterminados para manejar el video: detener, continuar, tiempo, etc.
Pero el elemento <video> tiene otros atributos que no tiene el elemento <audio>, entre ellos:
·         poster: Muestra una imagen representativa del video.
·         width: Especifica el ancho del video.
·         height: Especifica el alto del video.

3. El elemento <source>
Al igual que el elemento <audio>, el elemento <video> puede contener varios elementos de tipo <source> que especifican los recursos de video a intentar reproducirse, tal como se muestra en el siguiente ejemplo:
  <video controls>
    <source src="Archivo.webm">
    <source src="Archivo.ogv">
    <source src="Archivo.mp4">
  </video>

4. Conversión de Formatos
Si se desea convertir cualquier formato de video a MP4 (MPEG-4 H.264) existen muchas herramientas, pero la mas útil y de código abierto es FFmpeg, que trabaja por línea de comandos, la versión para Windows se llama Zeranoe FFmpeg. A partir de esta se puede construir una GUI por ejemplo en .NET que permita convertir cualquier tipo de archivo de video en MP4.

Más información:

Parte 4: Video - La API Javascript Multimedia

1. Introducción
La mayoría de objetos de HTML están disponibles para su acceso de 2 formas:
·         Declarativa: Mediante la definición de elementos, por ejemplo para multimedia: <audio> y <video>.
·         Programática: Mediante el uso de Javascript y el Modelo de Objetos de Documento (DOM).
Nota: Para esta última, existe un Lenguaje de Definición de Interfaz Web (WebIDL) que expecifica cada tipo y sus miembros, es decir, cada clase, y las propiedades, metodos y eventos que debe exponer.

2. Atributos
En general, podemos clasificar a los atributos de 2 formas:
·         Atributos de contenido: Definidos en tiempo de diseño en el elemento respectivo, por ejemplo para los elementos <audio> y <video> tenemos los atributos src, autoplay, loop y controls.
·         Atributos IDL: Definidos en tiempo de ejecución o por programación usando las APIs de Javascript, es decir las propiedades. Conocidos también como atributos DOM, para el caso de multimedia reflejan el estado en que se encuentra un elemento multimedia.
Nota: En IDL el recurso multimedia es de tipo HTMLMediaElement, el audio es de tipo HTMLAudioElement y el video de tipo HTMLVideoElement. Estos 2 últimos comparten la misma interfaz HTMLMediaElement.

3. Propiedades
A continuación clasificamos los atributos IDL o propiedades multimedia:
·         Propiedades sobre caracteristicas generales de recursos multimedia: currentSrc, startTime, duration, volume, muted, videoWidth y videoHeight.
·         Propiedades asociadas a la reproducción del recurso multimedia: currentTime, seeking, paused, ended, defaultPlaybackRate, playbackRate.
·         Propiedades referidas a los estados del elemento multimedia: networkState, readyState, error, buffered (TimeRanges), played (TimesRanges), seekable (TimesRanges).

4. Métodos
Solo existen 4 métodos de los elementos multimedia que son los siguientes:
·         load: Carga el recurso realizando los siguientes pasos: inicialización, selección del recurso, obtención del recurso, iniciar la reproducción si autoplay es true.
·         play: Solo ejecuta la reproducción del recurso multimedia a la vez que obtiene y almacena los datos en el buffer.
·         pause: Este método detiene la reproducción del recurso multimedia.
·         canPlayType: Este método toma como parámetro una cadena de tipo MIME y devuelve si el navegador puede reproducir dicho recurso multimedia.

5. Eventos
En realidad son muchos eventos que tiene un recurso multimedia, entre los principales tenemos:
·         loadstart: Ocurre cuando el navegador comienza a buscar la información multimedia.
·         progress: El navegador está obteniendo datos multimedia.
·         suspend: El navegador ha pausado la obtención de datos multimedia pero el recurso todavía no está descargado.
·         playing: Ocurre cuando el recurso se está reproduciendo.
·         ended: Ocurre cuando el recurso termino de reproducirse, etc.

Más información:

Parte 5: Voz - Síntesis con la API de Voz Web

1. Introducción
Web Speech API es la propuesta de Google para implementar voz en las aplicaciones Web con HTML5, actualmente está disponible solo en Chrome, no en los demás navegadores, ya que todavía No es un estándar W3C, sino solo una especificación.

2. Clase SpeechSynthesis
Esta clase permite implementar la síntesis o emisión de voz y presenta los siguientes miembros:
·         Propiedades: pending, speaking y paused.
·         Métodos: speak, cancel, pause, resume y getVoices.

3. Clase SpeechSynthesisUtterance
Esta clase contiene el mensaje a pronunciar (Utterance) por el objeto SpeechSynthesis y contienen los siguientes miembros:
·         Propiedades: text, lang, voiceURI, volume, rate y pitch.
·         Eventos: start, end, error, pause, resume, mark y boundary.

4. Ejemplo de Síntesis
<script>
  var msg = new SpeechSynthesisUtterance();
  var voices = window.speechSynthesis.getVoices();
  msg.voice = voices[10];
  msg.voiceURI = 'native';
  msg.volume = 1; // 0 a 1
  msg.rate = 1; // 0.1 a 10
  msg.pitch = 2; //0 a 2
  msg.text = 'Hola me llamo Luis Dueñas';
  msg.lang = 'es-PE';
  msg.onend = function(e) {
    console.log('Finalizo en ' + event.elapsedTime + ' segundos.');
  };
  speechSynthesis.speak(msg);
</script>

Mas información:

Parte 6: Voz - Reconocimiento con la API de Voz Web

1. Introducción
Mientras la síntesis consiste en reproducir un texto en forma hablada (emisión o salida de voz), el reconocimiento de voz consiste en capturar la voz y convertirla en texto (captura o entrada de voz). Para lo cual también se usa Web Speech API desarrollado por Google e implementado en Chrome.

2. Clase SpeechRecognition
Es la principal clase para el reconocimiento de voz y tiene los siguientes miembros:
·         Propiedades: grammars, lang, continuous, interimResults, maxAlternatives y serviceURI.
·         Métodos: start, stop y abort.
·         Eventos: audiostart, soundstart, speechstart, speechend, soundend, audioend, result, nomatch, error, start y end.

3. Clase SpeechRecognitionError
Esta clase contiene información sobre los errores del reconocimiento de voz. Es usada por el evento "error" del objeto SpeechRecognition. Contiene solo 2 propiedades o atributos:
·         error: Su propiedad principal es errorCode que es una enumeración con los valores no-speech, aborted, audio-capture, network, not-allowed, service-not-allowed, bad-grammary language-not-supported.
·         message: Mensaje de error especifico del reconocimiento de voz. Puede variar por navegador.

4. Ejemplo de Reconocimiento
<script>
    var recognition = new webkitSpeechRecognition();
    recognition.continuous = true;
    recognition.interimResults = false;
    recognition.onresult = function(event) {
      var rpta = event.results[event.results.length-1][0].transcript;
      alert(rpta);
    };
    recognition.lang = "es-PE";
    recognition.start();
</script>
Nota: Para ejecutar cualquier ejemplo de Reconocimiento de Voz es necesario tener un Micrófono conectado, además por seguridad no acepta ejecución local sino en un servidor, por ejemplo IIS, Apache, etc. No olvidar que solo corre en Google Chrome.

5. Ingresos de Textos por Voz
En HTML5 podemos realizar el ingreso de texto por voz, tan solo aumentando el atributo "x-webkit-speech" a los input type="text", tal como se muestra abajo:
<input type="text" x-webkit-speech>
Nota: Aparecerá un icono con un micrófono, dar clic y empezar a hablar, lo que se pronuncie se escribirá sobre dicho texto. Recordar que por ahora solo está disponible en Chrome.

Más información:

Parte 7: Conclusión y Comentarios

En este artículo de 6 partes tratamos sobre Multimedia en HTML5, en la primera parte vimos como trabajar con el elemento <audio> para reproducir archivos de sonido, en la segunda parte tratamos de como programar audio usando las APIs de audio: Audio Data API de Mozilla (solo para Firefox) y Web Audio API que es estándar W3C.

En la tercera parte tratamos sobre como Reproducir archivos de Video usando el elemento <video> y en la cuarta parte vimos como programar tanto el audio como el video usando la API de Javascript para Multimedia.

Finalmente, en los 2 últimas partes tratamos sobre Voz, usando la Web Speech API de Google disponible solo para Chrome hasta que se convierta en estándar W3C, primero mostramos como hacer síntesis (texto a voz) y luego como hacer reconocimiento (voz a texto).

Sin duda, un tema muy interesante que ya está usándose en Aplicaciones Web Comerciales y también en Juegos. Audio y Video ya son estándares, Voz muy pronto lo será y lo mejor sería adelantarnos a lo que viene.

Estándares Web de la W3C

Revisando el Libro: "La Guía Definitiva del Video en HTML5" de la Dra Alemana: "Silvia Pfeiffer" que colabora en los estándares de Audio y Video para la W3C, aprendí varias APIs de Audio que solo funcionan en Mozilla Firefox.

Esto me animo a buscar detalladamente que es oficial para la W3C y cuales APIs son solo implementadas por ciertos fabricantes de Navegadores (Browsers), comparto con ustedes el resumen de los Estándares W3C:

1. Arquitectura Web

1.1. Principales Arquitecturas
  • Arquitectura Web
  • Arquitectura de Servicios Web
1.2. Protocolos
  • HTTP
  • SOAP
1.3. Identificadores
  • URI
  • Web Services Addressing
1.4. Metaformatos
  • XML
  • RDF
  • JSON
  • XHTML
1.5. Consideraciones
  • Accessible Rich Internet Applications (WAI-ARIA)
  • Internalización de XML
  • Framework de Aseguramiento de Calidad (QA)
Más información en la URL:
http://www.w3.org/standards/webdesign/

2. Diseño Web y Aplicaciones

2.1. APIs Web de Javascript
  • Scripting
  • Document Object Model (DOM) -> DHTML
  • Eventos DOM: Progreso, XML, DOM Nivel 2
APIs de Javascript Estándares
  • Metadata API for Media Resources
  • Eventos de Progreso
  • JSON-LD Processing Algorithms ans API
  • Performance Timeline
  • User Timing
  • Widget Interface
  • Page Visibility
  • Geolocation
  • Touch Events
  • Web Storage
  • Selectors API Nivel 1
  • Navigation Timing
  • High Resolution Time
  • Element Traversal Specification
APIs de Javascript En Progreso
  • Web Audio Processing
  • RDF APIs
  • Device APIs
  • Offline Web App
APIs de Javascript Recomendadas para Candidatas
  • Resource Timing
  • Media Source Extensions
  • Pointer Lock
  • Timing control for script based animations
  • Ambient Light Events
  • Proximity Events
  • Indexed Database
  • Media Capture
  • Pointer Events 
  • Server Sent Events (SSE)
  • Web Sockets 
  • Battery Status
  • Web Workers 
  • Web Messaging
  • Web IDL
APIs de Javascript en Borrador
  • Navigation Timing 2
  • Clipboard
  • Gamepad
  • Network Service Discovery
  • Screen Orientation
  • Encrypted Media Extensions
  • Navigation Error Logging
  • XMLHttpRequest Nivel 1 (AJAX)
  • Web Near Field Communications (NFC)
  • Input Method Editor
  • Quota Management
  • Streams
  • Web Audio
  • WebRTC 1.0 (Real Time Communication between Browsers)
  • Media Capture and Streams
  • Push
  • Mediastream: Image Capture, Recording & Capture Scenarios
  • Web Telephony API (WTAPI)
  • Messaging
  • Raw Socket
  • WebDriver
  • Contacts Manager
  • Web Alarms
  • Network Information
  • Fullscreen
  • URL
  • File: Directories, System & Writer
  • Audio Processing
  • Permission for Device Access
  • Web Forms 2.0
  • Window Object 1.0
Más información en la URL:
http://www.w3.org/standards/techs/js#w3c_all

2.2. HTML y CSS
  • Hypertext Markup Language (HTML)
  • XML Hypertext Markup Language (XHTML)
  • Cascading Style Sheets (CSS)
  • WebFonts
2.3. Gráficos
  • Portable Network Graphics (PNG)
  • Scalable Vector Graphics (SVG)
  • Cascading Style Sheets (CSS)
  • Canvas API
  • Web Computer Graphics Metafile (WebCGM)
2.4. Audio y Video
  • Synchronized Multimedia Integration Language (SMIL)
  • Timed Text
  • Media Fragments
  • Media Annotations
  • Media Access
  • Web Audio Processing
2.5. Accesibilidad
  • Accessibility (All)
  • Web Content Accessibility Guidelines (WCAG)
  • Accessible Rich Internet Applications (WAI-ARIA)
  • User Agent Accessibility Guidelines (UAAG)
  • Authoring Tool Accessibility Guidelines (ATAG)
  • Evaluation and Report Language (EARL)
  • IndieUI
2.6. Internacionalización
  • Internationalization (All)
  • Internationalization of Web Design and Applications
  • Internationalization of Web Architecture
  • Internationalization of XML
  • Internationalization of Web Services
2.7. Web Móvil
  • CSS Mobile
  • SVG Tiny
  • XHTML For Mobile
2.8. Privacidad
  • Platform for Privacy Preferences Project (P3P)
  • Protocol for Web Description Resources (POWDER)
2.9. Matemática en la Web
  • MathML
Más información en la URL:
http://www.w3.org/standards/webarch/

Conclusión y Comentarios
Sin lugar a dudas el trabajo por estandarizar la enorme cantidad de tecnologías Web por la W3C es incansable y para lo cual se apoya en grupos de trabajo conformados por expertos de los principales fabricantes de software, entre ellos: Microsoft, IBM, Oracle, Google, Apple, etc. junto con sus propios investigadores.

Actualmente ya están casi por salir nuevas APIs de Javascript como WebSockets para comunicación entre el Cliente y el Servidor Web en forma eficiente, también WebWorkers para trabajar en forma asíncrona código de Javascript, Audio Processing para el reconocimiento y la emisión (síntesis) de voz, etc.
Creo que el Navegador (Browser) está tomando cada vez mas funcionalidad que antes solo se lograba del lado del servidor mediante los Frameworks como Java, PHP, .NET, etc. Actualmente con HTML5, CSS3 y las APIs de Javascript se podrá controlar casi todo desde el cliente.

Espero que este artículo de 4 partes les ayude a entender que hay que reforzar la programación de lado del cliente: HTML y Javascript, que ya dejaron de ser pasajeros de segunda categoría en el desarrollo de aplicaciones Web, ahora son de primer nivel, eso lo demuestra el auge de jQuery y AJAX (que son Javascript).

A las aplicaciones donde se crean simples paginas con HTML, CSS y código incrustado del servidor se le denominan: Single Page Applications (SPA) y es lo que está de moda sobre todo por las aplicaciones web móviles que requieren el mínimo código y diseño.

Es por esto que haremos más seminarios enfocados en HTML y Javascript, ya vimos HTML5 Canvas para graficar en 2D, pronto veremos HTML5: SVG, WebGL, WebSockets, WebWorkers, Audio y Video, etc.

jueves, 29 de mayo de 2014

El Libro del Día: ASP.NET MVC 4 and the Web API

El Libro del Día: 2014-05-29

Titulo: ASP.NET MVC 4 and the Web API
Autor: Jamie Kurtz
Editorial: Apress
Nro Paginas: 141

Capítulos:
Chapter 1: ASP.NET MVC as a Service Framework
Chapter 2: What is RESTful?
Chapter 3: Designing the Sample REST API
Chapter 4: Building the Environment and Creating the Source Tree
Chapter 5: Controllers, Dependencies, and Managing the Database Unit of Work
Chapter 6: Securing the Service
Chapter 7: Putting It All Together

Descarga:
ASP .NET MVC4 WebAPI

Frameworks de ASP .NET en Visual Studio 2013

1. ASP .NET MVC5
·         Modelo de Desarrollo Vista Controlador basado en Pruebas
·         Plantilla Unica para ASP .NET y Ruteo de atributos
·         Usa Bootstrap como plantilla para HTML y CSS
·         Nuevos filtros de autenticación y sobre escritura de filtros
·         Componentes: System.Web.Mvc (Controller, ViewPage), System.Web.Mvc.Ajax, System.Web.Mvc.Async,  System.Web.Mvc.Filters, System.Web.Mvc.Html, System.Web.Mvc.Razor, System.Web.Mvc.Routing

2. ASP .NET Web API 2
·         Permite crear Servicios HTTP para exploradores y dispositivos móviles
·         Permite crear aplicaciones RESTfull en .NET
·         Operaciones CRUD: Create, Read, Update, and Delete
·         HTTP Métodos: GET, POST, PUT y DELETE
·         Componentes: System.Net.Http y System.Web.Http (ApiController)

3. ASP .NET SignalR 2
·         Librería para desarrollo web en tiempo real.
·         Comunicación bidireccional entre servidor y cliente.
·         Soporta Web Sockets y APIs para manejo de conexiones
·         Componentes: SygnalR.Hubs (Hub)

4. ASP .NET Tracing
·         Permite habilitar el seguimiento en una aplicación ASP .NET
·         Se integra con System.Diagnostics
·         Componentes: System.Web.Http (HttpConfigurationTracingExtensions) y System.Web.Http.Tracing (SystemDiagnosticsTraceWriter)

5. ASP .NET OData
·         OData (Open Data Protocol) es un procolo de acceso a datos para la web.
·         Provee un mecanismo uniforme para consultar y manejar datos atraves de operaciones CRUD
·         Se pueden exponer multiples extremos OData
·         Componentes: System.Web.Http.OData (ODataController, PageResult)

6. ASP .NET Web Optimization Framework
·         Se usan para mejorar el rendimiento de las aplicaciones web
·         Reduce el número de solicitudes que llegan al servidor y el tamaño de los activos solicitados (como archivos CSS y JavaScript)
·         Responsable de reducir la carga (minify) de scripts, hojas de estilos, etc.
·         Componentes: System.Web.Optimization (Bundle, CssMinify, JsMinify, Optimizer, Scripts, Styles)

7. ASP .NET WebPages 2
·         ASP .NET Web Pages con sintaxis Razor es un marco de programación para la creación de aplicaciones web.
·         Se incluye como parte de Microsoft WebMatrix 2, que es un entorno gratuito de desarrollo.
·         Razor usa una sintaxis de programación sencilla que permite incorporar código de servidor en una página web.
·         Componentes: System.Web.Razor y System.Web.WebPages (WebPage)

8. ASP .NET OpenAuth for Membership
·         La autenticación abierta es un conjunto de bibliotecas para los desarrolladores de ASP .NET con el que pueden usar el protocolo abierto OAuth 2.0 para permitir la autorización segura.
·         Componentes: Microsoft.AspNet.Membership.OpenAuth (OpenAuth y OpenAuthManager)  Microsoft.AspNet.Membership.OpenAuth.Data (OpenAuthAccount y OpenAuthUserData)

9. ASP .NET Friendly URLs
·         Es una biblioteca para las aplicaciones de ASP.NET Web Forms que permite a los desarrolladores crear direcciones URL sin extensiones de archivo para determinados tipos de archivo ASP.NET (tales como archivos .aspx y .ashx).
·         Componentes: Microsoft.AspNet.FriendlyUrls (FriendlyUrl), Microsoft.AspNet.FriendlyUrls. ModelBinding y Microsoft.AspNet.FriendlyUrls.Resolvers (FriendlyUrlResolver).

10. Microsoft ASP .NET Identity
·         Es un sistema de membrecía o de afiliación para aplicaciones ASP .NET
·         Facilidad de conexión de datos del perfil de usuario
·         Control de persistencia y soporte de pruebas unitarias
·         Conexiones externas a: Microsoft Account, Facebook, Twitter y Google
·         Componentes: Microsoft.AspNet.Identity (RoleManager, UserLoginInfo, UserManager)

11. Microsoft OWIN Components
·         OWIN (Open Web Interface for .NET) usado para desacoplar el servidor y la aplicación.
·         Define interfaces estandares entre Servidores Web .NET y Aplicaciones Web.
·         Servidores y Hosts: Katana y Nowin
·         Frameworks: SignalR, WebAPI, Nancy, FubuMVC, Simple.Web, DuoVia.Http
·         Componentes: Microsoft.Owin (OwinRequest, OwinResponse, OwinContext) y Microsoft. Owin.Hosting (StartOptions y WebApp)

12. Browser Link
·         Permite que las extensiones de Visual Studio ejecuten código JavaScript personalizado en exploradores conectados a sitios web de ASP .NET
·         Puede llamar a funciones y pasar datos entre las extensiones de Visual Studio y exploradores de prueba usando la API Vínculo de explorador.
·         Permite a los desarrolladores de extensiones crear experiencias integradas entre VStudio y exploradores web para el desarrollo de aplicaciones web.
·         Componentes: Microsoft.VisualStudio.Web.BrowserLink (BrowserLinkAction, BrowserLink Connection, BrowserLinkExtension)

Más información

Evolución del Desarrollo de Aplicaciones Web en ASP .NET

Parte 1: NET Framework

En los inicios de ASP .NET para crear una aplicación web solo existía un solo Framework: .NET Framework, el cual proveía los siguientes componentes:
1. Modelo de Desarrollo: ASP NET WebForms.
2. Uso de Controles: ASP NET WebControls.
3. Motor de Vista: WebForm (para la visualización de la pagina aspx, que ofrecía código incrustado del servidor <%=...%> y enlace de datos <%#...%>)
4. Lenguajes .NET para el código del servidor: C#, VB NET, etc.
5. Para validar en el cliente: JavaScript y HTML DOM.
6. Acceder a datos: ADO .NET.
7. Opcional como Contenedor de Documentos (CMS): Microsoft Sharepoint.

Actualmente, Microsoft ha extendido su propuesta para desarrollar aplicaciones web y ofrece:
1. Modelo de Desarrollo: ASP NET MVC.
2. Uso de Controles: Ajax Control Toolkit.
3. Motor de Vista: Razor (código incrustado del servidor: @)
4. Lenguajes .NET para el código del servidor: C#, VB NET, F#, etc.
5. Para validar en el cliente: jQuery.
6. Acceder a datos con Mapeo Relacional Objetos (ORM): ADO .NET Entity Framework y LINQ.
7. Opcional como Contenedor de Documentos (CMS): Microsoft Sharepoint.

Pero el auge del Software Libre y el Open Source ha aumentado la propuesta de los componentes a usar, sobre todo de terceros.

Parte 2: Web Applications Frameworks

Algunos de los Frameworks más populares para Crear Aplicaciones Web en .NET son:
1. ASP Web Forms (NET 1.0)
2. ASP NET MVC (NET 3.5)
3. ASP NET Dynamic Data (NET 3.5)
4. Base One Foundation Component Library (BFC)
5. MonoRail (Castle on Rails)
6. Spring.NET
7. Clockwork
8. Nancy
9. FubuMVC
10. OpenRasta
11. Frank

URL: http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks
URL: http://es.wikipedia.org/wiki/Modelo_Vista_Controlador

Parte 3: View Engines

Los Motores de Vistas (View Engines) permiten realizar la presentación de la pagina y su procesamiento, el uso de plantillas, código incrustado del servidor, etc.

En los inicios de ASP .NET con el Modelo de Desarrollo WebForms el motor de vista era también WebForm (aspx) por defecto, aunque con la aparición de ASP .NET MVC ya está disponible otro Motor de Vista: Razor (vbhtml, cshtml), el cual su puede usar con el Modelo Web Form o MVC.

Pero no solo se pueden usar motores de vistas creados por Microsoft, sino por terceros entre ellos:
1. WebForm
2. Razor
3. Brail
4. AspView
5. StringTemplate
6. Spark
7. NHaml
8. NDjango
9. Hasic
10. Bellevue
11. SharpTiles
12. SharpDOM
13. Wing Beats

URL: http://channel9.msdn.com/coding4fun/articles/Developer-Review-Four-ASPNET-MVC-View-Engines
URL: http://www.codeproject.com/Articles/467850/ASP-NET-MVC-view-engines
URL: http://www.slideshare.net/shayfriedman/the-big-comparison-of-aspnet-mvc-view-engines

Parte 4: Controls Libraries

Para crear la Interface de Usuario (UI) de una Aplicación ASP .NET se usan controles, ya sea de lado del cliente (HTML Controls) o de lado del servidor (WebControls).

Actualmente, existen muchas librerías de controles que ayudan a que el diseño y la programación (LoC: Lines of Codes) se simplifique, entre los más populares tenemos:
1. Microsoft Ajax Control Toolkit
2. Telerik .NET UI Controls
3. Infragistics Control Toolkit
4. DevExpress Control Suite
5. SyncFusion ASP .NET MVC Controls
6. SharpPieces ASP .NET Controls
7. MVC Controls Toolkit (Francesco Abbruzzese)
8. jQuery UI Extensions for ASP .NET MVC
9. DotNetAge DJ jQuery for ASP .NET

URL: http://stackoverflow.com/questions/361271/best-free-controls-for-net
URL: http://learndotnetprogramming.com/free-dot-net-controls-libraries/

Parte 5: JavaScript Frameworks

Para validar los datos de una página web debe realizarse en el lado del cliente, para lo cual tradicionalmente usamos Scripts, tales como JavaScript, ECMAScript, VBScript, JScript, etc.

El más usado sin duda es Javascript, pero para acceder a todos los objetos de la pagina necesitamos usar DOM (Document Object Model) de HTML, lo que implica conocer metodos como childNodes, parentNode, firstChild, lastChild, previousSibling, nextSibling, etc.

Actualmente, el trabajo con DOM de HTML, y la creación de controles HTML se ha simplificado gracias a los Frameworks de Javascript que existen en el medio, entre los más importantes:
1. jQuery
2. AngujarJS
3. Dojo
4. ExtJS
5. Google Web Toolkit (GWT)
6. MooTools
7. PhoneJS
8. Prototype
9. Rico
10. Yahoo User Inteface Library (YUI)
11. Webix
12. Backbone
13. Knockout
14. Agility
15. CanJS
16. Spine
17. Maria
18. Sammy
19. Soma
20. Kendo UI

URL: http://en.wikipedia.org/wiki/Comparison_of_JavaScript_frameworkshttp://www.infoq.com/research/top-javascript-mvc-frameworks

Parte 6: Frameworks de Persistencia de Datos - ORM

Como mencionamos al inicio la forma nativa de acceder a datos en ASP .NET es ADO .NET, usando la clase Connection, Command, DataReader, etc.

Primero nos conectamos a una Base de Datos (Connection), luego ejecutamos una instrucción SQL Select para traer datos (Command y DataReader) y almacenamos los datos en una estructura en memoria como un DataSet o mejor en una Lista de Objetos.

Si optamos por trabajar con Objetos tendríamos que escribir código personalizado para pasar de una entidad relacional hacia un objeto (mapeo), por lo cual aparecieron los ORM (Mapeo de Entidad Relación a Objetos) que incluían la persistencia de datos.

Entre los Frameworks más populares de persistencia de datos (la mayoría ORM) tenemos:
1. ADO .NET Entity Framework (NET FW 3.5)
2. LINQ To SQL (NET FW 3.5)
3. ActiveRecord (Castle)
4. MyBatis
5. nHibernate
6. nHydrate
7. OpenAccess ORM
8. Persistor .NET
9. Subsonic
10. Symbiotic ORM
11. Signum Framework

URL: http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software#.NET
URL: http://www.frozenelephant.com/List_Of_Dot_Net_ORM_Frameworks.html

Parte 7: Content Management Systems - CMS

Muchas empresas necesitan manejar gran cantidad de documentos, para lo cual existen los CMS o Sistemas de Manejo de Contenidos como Microsoft SharePoint que permite almacenar, administrar y trabajar con documentos de todo tipo.

No solo Microsoft ofrece un CMS, Oracle tiene UCM (Universal Content Management), pero existen muchos Content Management Systems (CMS) creados en ASP .NET y la mayoría son Open Source, entre ellos tenemos:
1. DotNetNuke
2. Telerik Sitefinity CMS
3. Composite C1
4. mojoPortal CMS
5. Orchard
6. Umbraco
7. Kentiko CMS
8. Kooboo CMS
9. Yendo CMS
10. Pronto CMS
11. VMD CMS
12. N2 CMS

URL: http://en.wikipedia.org/wiki/Comparison_of_content_management_systems
URL: http://abundantcode.com/15-best-asp-net-based-content-management-systemscms/http://webmasterformat.com/blog/top-asp-net-cmss

Parte 8: Conclusión y Comentarios

Como hemos visto en esta breve historia de cómo ha ido evolucionando el desarrollo de aplicaciones web en ASP .NET, podemos resumir que hay 2 grandes formas de trabajar:

1. Usar solo .NET Framework
- Esta es la forma nativa y de la cual se hablo en la Parte 1.
- Todos los componentes usados son de Microsoft.
- Es recomendable para profesionales con experiencia en .NET
- Ofrece la mejor performance y la máxima integración con el Visual Studio
- Mayor esfuerzo para la creación de código y reusabilidad

2. Usar Frameworks de Terceros
- Esta es la forma No nativa y de la cual se hablo en las Partes 2 al 7.
- Los componentes usados son de Terceros o de Microsoft.
- Es recomendable para profesionales sin mucha experiencia en .NET, pero si en Java, PHP, etc.
- Mas fácil de usar sobre todo si se conoce el uso del Framework en otra plataforma.

Cada desarrollador es libre de elegir cualquier camino, pero antes deben realizar un análisis de las ventajas y desventajas, particularmente creo que lo nativo es lo mejor, pero mucha gente sin saber la historia, el rendimiento, lo bueno y lo malo, casi sin pensar ya están usando:
- ADO .NET Entity Framework y LINQ como OMR
- jQuery para validar
- Telerik, Infragistics como Controles, etc.

El hecho de que los Frameworks de terceros ganen terreno en el mundo de .NET es que mucha gente sin una buena preparación en .NET necesita crear aplicaciones lo más rápido posible y dichos Frameworks se prestan para eso, pero No es lo más adecuado.

Finalmente, siempre es preferible trabajar más en el desarrollo pero descansar o trabajar menos en Producción y No al revés, trabajar menos en Desarrollo y luego trabajar más en Mantenimiento y Cambios en Post Producción.

Espero les ayude a aclarar el panorama y compartan esta serie de artículos con sus colegas, sobre todo con aquellos que hacen los Requerimientos de Desarrolladores Web en ASP .NET y piden un experto que sepa: AJAX, jQuery, MVC, Telerik, Infragistics, NHibernate, MyBatis, etc. Un poco mas y copian todos los Frameworks, en vez de pedir un Experto en ASP .NET y punto.

Charlas de .NET en ISILTECH

Relación de Charlas de .NET en ISILTECH
      A partir de Junio, realizaremos en ISILTECH charlas técnicas gratuitas sobre .NET y Arquitectura, las charlas que daré sobre .NET serán:

1.       .NET Framework – Mejores Prácticas de Performance (Miércoles 18 de Junio)
En esta primera charla se compara diferentes formas de programar y se mide el rendimiento:
  • Lectura y Escritura de Archivos
  • Llenado de Controles de Listas en Windows Forms
  • Creación de Imágenes Dinámicamente y Enlace a un Control
  • Llenado de Datos usando DataSet, XML y Listas
  • Filtrando objetos en una Lista de Objetos
  • Lectura y Escritura de Archivos Excel


2.       .NET Framework – Técnicas de Programación Asíncrona (Miércoles 16 de Julio)
En esta charla veremos las diferentes técnicas de programación asíncrona que podemos usar en .NET para que una aplicación cliente no quede en espera o colgada, entre ellas:
  • Subprocesamiento con Thread y ThreadPool
  • Modelo de Programación Asíncrona (APM)
  • Programación Asíncrona por Eventos (EAP)
  • Programación Asíncrona por Tareas (TAP)
  • Librería de Tareas Paralelas (TPL)


3.       .NET Framework – Usando Reflection (Miércoles 20 de Agosto)
Reflection es una librería de .NET Framework muy útil para obtener información de ensamblados (archivos exe o dll creados en .NET), entre las tareas más comunes tenemos:
  • Cargando un ensamblado
  • Listando los tipos de un ensamblado
  • Listando los miembros de un tipo
  • Creando una instancia de un tipo dinámicamente
  • Ejecutando un método dinámicamente


4.       ASP .NET – Creando un Control DataGrid en MVC4 (Miércoles 17 de Septiembre)
ASP .NET MVC4 es un Marco de Trabajo de Microsoft para crear Aplicaciones Web usando el Modelo-Vista-Controlador, existe una librería de controles MVC llamada HTML Helpers que ayudan a construir aplicaciones, pero no hay un Control DataGrid, en esta charla se verá cómo crearlo:
  • Crear una Librería de Controles para ASP .NET MVC
  • Crear un Control DataGrid que permita paginar registros
  • Agregar funcionalidad que permita ordenar registros
  • Usar la Librería en una Aplicación ASP .NET MVC


5.       ASP .NET – Servicios Full REST con Web API (Miércoles 15 de Octubre)
ASP .NET Web API es un Marco que facilita la creación de servicios HTTP disponibles para una amplia variedad de clientes, entre los que se incluyen exploradores y dispositivos móviles. ASP .NET Web API es la plataforma perfecta para crear aplicaciones RESTful en .NET Framework. Los temas a desarrollar en esta charla serán:
  • Creando un Servicio Web API
  • Consumiendo un Servicio Web API en forma síncrona
  • Consumiendo un Servicio Web API en forma asíncrona


6.       HTML5 – Nuevos Controles y Creación de Gráficos (Miércoles 19 de Noviembre)
HTML5 es la última versión del Lenguaje de Marcas de HiperTexto usado por los Navegadores para presentar información en la Web, este contiene nuevos controles y nuevas APIs que revolucionarán la forma cómo se desarrolla actualmente las aplicaciones web, dando más poder al cliente (Navegador). En esta charla veremos lo siguiente:
  • Nuevos Controles HTML5
  • Creación de Gráficos usando Canvas
  • Creación de Gráficos usando SVG


7.       HTML5 – Trabajando con Multimedia (Miércoles 17 de Diciembre)
Una de las características más importantes de las aplicaciones es la capacidad de implementar Multimedia: Audio, Video y Voz. En esta sesión veremos:
  • Manejando Audio
  • Manejando Video
  • Reconocimiento y Síntesis de Voz