Mostrando las entradas con la etiqueta HTML. Mostrar todas las entradas
Mostrando las entradas con la etiqueta HTML. Mostrar todas las entradas

lunes, 2 de diciembre de 2024

Entrenamiento - Desarrollo de Aplicaciones Comerciales con Python (DACP 2025)

Desarrollo de Aplicaciones Comerciales con Python (DACP 2025)

Contenido del Programa:

Módulo 1: Fundamentos de Programación en Python con Aplicaciones de Consola

- El Lenguaje Python

- Estructuras de Datos

- Usando las Librerias Estandar

- Manejo de Archivos y Directorios

- Persistencia de Datos (Serialización)

- Compresión de Datos y Archivos

- Cifrado de Datos y Archivos

- Servicios Genéricos del Sistema Operativo

- Programación Asincrona, Paralelismo y Concurrencia (APC)

- Protocolos y Comunicación en Internet: HTTP, SMTP

- Acceso a Bases de Datos SQL Server con PyOdbc

Módulo 2: Desarrollo de Aplicaciones Windows en Python con PyQT

- Introducción a PyQT

- Trabajando con Diálogos en PyQT

- Usando Controles Basados en Items (Item Widgets)

- Usando Controles Basados en Modelos (Model Widgets)

- Personalizando el Control QTableView

- Mantenimiento de Datos usando QTableView

- Reportes e Impresiones en PyQT usando QPainter y QtPrintSupport

- Gráficos de Datos en PyQT usando PIL, QPainter y Matplotlib

- Aplicacion completa con Login y Menu Principal dinamico

- Programación Asincrona con QThread

Módulo 3: Desarrollo de Aplicaciones Web en Python con Django

- Introducción al Desarrollo Web: BackEnd (Django) y FrontEnd (HTML+JavaScript)

- Creando Aplicaciones de Consultas: Conectadas y Desconectadas

- Creando una Librería de JavaScript con Controles Básicos: Grid, TextList

- Creando una Librería de JavaScript con Controles Avanzados: TreeView, Grid+

- Mantenimiento (CRUD) de una Tabla con Imagen en Popups (SPA)

- Exportación de Datos a Texto, Excel, Word y PDF

- Creando Gráficos de Datos: Canvas y SVG

- Sistema con Login, TreeView, iFrame con Código Genérico

- Carrito de Compras con Login, Imágenes y Seguridad

- Trabajar con Archivos Grandes usando Bloques

- Trabajar con Miles de Registros: Consultar y Grabar

Módulo 4: Integracion de Aplicaciones usando Servicios Web y Web Sockets

- Introducción a los Servicios Web

- Servicios Web de Consulta de Datos

- Servicios de Mantenimiento de Datos (CRUD)

- Servicio de Manejo de Archivos por Bloques

- Creando un Servidor WebSocket en Python

- Creando un Cliente WebSocket en PyQT con QtWebSockets

- Creando un Cliente Web en JavaScript con WebSocket

- Manejo de Documentos en Tiempo Real

- Registro de Asistencia de Empleados en Tiempo Real

- Registro de Incidentes en Tiempo Real con Mapas


Datos del Programa:

Duración: 8 meses

Requisitos: Conocimientos de Programación y Bases de Datos

Modalidad: Online Virtual

Costo Mensual: 300 soles (USD 80 para extranjeros)

Horario: Martes y Jueves de 7:00 pm a 11:00 pm

Inicio: Martes 7 de Enero del 2025


Registro en el Programa:

Los interesados deberán enviar un mail a Luis.duenash@gmail.com:

Asunto: DACP 2025

Nombre Completo: XXXXXXXXXXXXX

Documento de Identidad: XXXXXX

Lugar de Procedencia: Ciudad/Pais

Ha llevado Cursos antes con Lduenas: Si/No

Si es nuevo como se entero: Blog/LinkedIn/Facebook/UnAlumno

domingo, 29 de julio de 2018

Videos - Cuarto Seminario de Desarrollo Web ASP.NET MVC & JavaScript

Videos del Seminario 4 Programando Mapas con Google Maps

Demo 01: Simple Mapa


Demo 02: Eventos, Marcadores, Ventanas de Información


Demo 03: Grabar y Recuperar Zonas en un Mapa


Demo 04: Controles del Mapa


Demo 05: Controles Personalizados


Demo 06: Estilos en Mapas


Demo 07: Superposiciones - Símbolos


Demo 08: Superposiciones - Iconos y Animaciones


Demo 09: Superposiciones - Polilíneas


Demo 10: Superposiciones - Polígonos, Círculos y Rectángulos


Demo 11: Agrupación de Marcadores (Markers Cluster)


Demo 12: Cargando Datos GeoJson


Demo 13: Cargar Datos UTM de Excel


jueves, 23 de noviembre de 2017

El Manual del Día: Visual Web Developer Parte 1

MSDN - Manual de Visual Web Developer Parte 1

Titulo: Manual de Visual Web Developer Parte 1
Fuente Original: Microsoft Developer Network (MSDN)
Compilado Por: Luis Dueñas Huaroto (Lduenas)
Año de Compilación: 2008
Número de Páginas: 306

Indice del Manual de Visual Web Developer (Parte 1)

1. Lo Nuevo en ASP.NET y Desarrollo Web
2. Información General sobre ASP.NET
3. Trabajar con Visual Web Developer
  3.1. Información General sobre el Trabajo con CSS
    3.1.1. Cómo: Usar la Ventana Propiedades de CSS
    3.1.2. Cómo: Usar las Ventanas Aplicar Estilos y Administrar Estilos
    3.1.3. Cómo: Usar la Barra de Herramientas Aplicación de Estilo Directo
    3.1.4. Cómo: Cambiar el Relleno y los Márgenes en la Vista Diseño
  3.2. Exploración de Etiquetas en el Editor HTML de Visual Web Developer
  3.3. Validación de Formato en Visual Web Developer
    3.3.1. Cómo: Seleccionar Esquemas de Validación para la Edición de HTML
    3.3.2. Cómo: Establecer Opciones de Validación para la Edición de HTML
  3.4. Cómo: Agregar Exploradores Web a Visual Web Developer
  3.5. Edición de Tablas HTML en Visual Web Developer
    3.5.1. Introducción a la Edición de Tablas HTML en Visual Web Developer
    3.5.2. Cómo: Crear y Editar Tablas HTML en la Vista Diseño
    3.5.3. Cómo: Agregar y Quitar Elementos de Tabla HTML
    3.5.4. Cómo: Seleccionar Contenido y Elementos de Tabla HTML
    3.5.5. Cómo: Cambiar el Tamaño de los Elementos de Tabla HTML
    3.5.6. Sugerencias para Editar Tablas HTML en Visual Web Developer
  3.6. Cómo: Explorar en el Editor HTML de Visual Web Developer
  3.7. Operaciones de Pegar en el Diseñador HTML de Visual Web Developer
  3.8. Vista Código Fuente, Diseñador de Páginas Web
    3.8.1. Código Fuente
    3.8.2. Aplicar Formato a los Elementos en el Editor HTML
    3.8.3. Cómo: Contraer y Expandir Elementos HTML
    3.8.4. Cómo: Crear Secuencias de Comandos y Controladores de Eventos de Edición
    3.8.5. Cómo: Seleccionar un Editor HTML Alternativo en Visual Web Developer
  3.9. Vista Diseño, Diseñador de Páginas Web
    3.9.1. Cómo: Colocar Elementos en la Vista Diseño
    3.9.2. Cómo: Insertar Hipervínculos HTML y Marcadores en la Vista de Diseño
    3.9.3. Cómo: Mostrar Información Oculta en la Vista Diseño
    3.9.4. Solución de Problemas de Representación de la Vista Diseño
  3.10. Información General sobre la Edición de Páginas Web ASP.NET en Visual Web Dev.
  3.11. Métodos Abreviados de Teclado del Diseñador de Páginas Web
  3.12. Comprobar Páginas Web en Visual Web Developer
    3.12.1. Cómo: Comprobar Páginas Web en Visual Web Developer
    3.12.2. Cómo: Especificar Páginas de Inicio para Comprobar Sitios Web
4. Crear Páginas Web ASP.NET
  4.1. Información General sobre Páginas Web ASP.NET
    4.1.1. Introducción a Páginas Web de ASP.NET
    4.1.2. ASP.NET y XHTML
      4.1.2.1. Cómo: Configurar la representación XHTML en sitios Web ASP.NET
      4.1.2.2. XHTML en Visual Web Developer
    4.1.3. Redirigir a los usuarios a otra Página
      4.1.3.1. Envío entre páginas en las Páginas Web ASP.NET
      4.1.3.2. Cómo: Redirigir los Usuarios a otra Página
      4.1.3.3. Cómo: Enviar Páginas Web ASP.NET a una Página Diferente
      4.1.3.4. Cómo: Determinar el Modo en que se Invocaron las Páginas Web
      4.1.3.5. Cómo: Pasar Valores entre Páginas Web ASP .NET
    4.1.4. Bloques de Código Incrustado en las Páginas Web ASP .NET
    4.1.5. Directivas para las Páginas Web ASP .NET
  4.2. Información General sobre Sintaxis de Páginas Web ASP .NET
  4.3. Modelo de Código de las Páginas Web ASP .NET
  4.4. Información General sobre Clases de Páginas ASP .NET
  4.5. Programar Páginas Web ASP .NET
    4.5.1. Control de Eventos del Servidor en Páginas Web ASP .NET
      4.5.1.1. Modelo de Eventos de Control de Servidor Web ASP .NET
      4.5.1.2. Cómo: Conectar Varios Eventos con un Unico Controlador de Eventos en Páginas Web ASP .NET
      4.5.1.3. Cómo: Enlazar Controladores de Eventos Dinámicamente en Tiempo de Ejecución en las Páginas Web ASP .NET
      4.5.1.4. Cómo: Crear Controladores de Eventos en Páginas Web ASP .NET (Visual Studio)
      4.5.1.5. Cómo: Determinar qué Control de Servidor Web produce un Evento
    4.5.2. Cómo: Detectar Tipos de Explorador en Páginas Web ASP .NET
    4.5.3. Contexto de Página y Aplicación en Aplicaciones Web ASP .NET
  4.6. Tutorial: Crear una Página Web Básica en Visual Web Developer
  4.7. Tutorial: Crear una Página Web Básica con Separación de Código en Visual Web Developer
  4.8. Tutorial: Edición de Código en Páginas Web en Visual Web Developer
  4.9. Cómo: Agregar Páginas Web ASP.NET a un Sitio Web
5. Crear Sitios Web ASP .NET
  5.1. Estructura de Sitios Web ASP .NET
    5.1.1. Diseño de Sitios Web ASP .NET
    5.1.2. Tipos de Archivos de Sitios Web
    5.1.3. Rutas de Acceso a Sitios Web ASP .NET
    5.1.4. Información General sobre Proyectos de Aplicaciones Web
      5.1.4.1. Cómo: Crear Nuevos Proyectos de Aplicaciones Web
      5.1.4.2. Cómo: Establecer Propiedades de Proyectos de Aplicaciones Web
      5.1.4.3. Cómo: Publicar Proyectos de Aplicaciones Web
      5.1.4.4. Compilar Proyectos de Aplicaciones Web
      5.1.4.5. Tutorial: Convertir un Proyecto de Sitio Web en un Proyecto de Aplicación Web en Visual Studio
    5.1.5. Tipos de Sitios Web en Visual Web Developer
    5.1.6. Sitios Web de IIS Locales
      5.1.6.1. Tutorial: Crear un Sitio Web Local de IIS en Visual Web Developer
    5.1.7. Sitios Web del Sistema de Archivos
      5.1.7.1. Cómo: Crear Sitios Web del Sistema de Archivos
    5.1.8. Sitios Web Implementados en FTP
      5.1.8.1. Tutorial: Editar Sitios Web con FTP en Visual Web Developer
      5.1.8.2. Cómo: Abrir Sitios Web mediante FTP
      5.1.8.3. Cómo: Crear y Configurar Sitios FTP en IIS 6.0
    5.1.9. Sitios Web de IIS Remotos
      5.1.9.1. Cómo: Crear Sitios Web de IIS Remotos
    5.1.10. Generar Sitios Web
    5.1.11. Cómo: Agregar Archivos a Sitios Web ASP .NET
    5.1.12. Cómo: Habilitar la Ventana Propiedades de Visual Web Developer
    5.1.13. Servidores Web en Visual Web Developer
      5.1.13.1. Cómo: Especificar el Servidor Web para Sitios Web
      5.1.13.2. Cómo: Especificar un Puerto para Servidor de Desarrollo ASP .NET
      5.1.13.3. Cómo: Omitir un Servidor Proxy para las Solicitudes Web Locales
      5.1.13.4. Cómo: Crear Directorios Virtuales de IIS en Visual Web Developer
      5.1.13.5. Cómo: Instalar y Configurar Servidores Virtuales SMTP en IIS 6.0
    5.1.14. Utilizar Visual Web Developer como un Usuario No Administrativo
    5.1.15. Proyectos y Soluciones de Sitios Web
      5.1.15.1. Páginas Web y Proyectos
    5.1.16. Control de Código Fuente para Sitios Web
      5.1.16.1. Información General sobre Control Código Fuente de Sitios Web
      5.1.16.2. Archivos de Sitios Web bajo Control de Código Fuente
      5.1.16.3. Soluciones y Controles de Código Fuente de Sitios Web
      5.1.16.4. Visual SourceSafe para Controles de Código Fuente de Sitios Web
    5.1.17. Establecer Referencias a otros Componentes en Sitios Web
      5.1.17.1. Cómo: Agregar una Referencia a un Componente .NET o COM en un Sitio Web
      5.1.17.2. Cómo: Agregar una Referencia a un Proyecto de Visual Studio en un Sitio Web
    5.1.18. Carpetas de Código Compartido en Sitios Web ASP .NET
    5.1.19. Tutorial: Desarrollar Sitios Web utilizando Varios Lenguajes de Programación
    5.1.20. Tutorial: Utilizar Código Compartido en Sitios Web en Visual Web Developer
  5.2. Ciclo de Vida en ASP .NET
    5.2.1. Información General sobre el Ciclo de Vida de una Aplicación ASP .NET para IIS 5.0 y 6.0
    5.2.2. Información General sobre el Ciclo de Vida de una Aplicación ASP .NET para IIS 7.0
    5.2.3. Información General sobre el Ciclo de Vida de una Página ASP .NET
    5.2.4. Información General sobre la Compilación de ASP .NET
    5.2.5. Descripción de la Compilación Dinámica de ASP .NET
    5.2.6. Cómo: Crear Controladores de Eventos en las Aplicaciones ASP .NET
  5.3. Exploración de Sitios ASP .NET
    5.3.1. Información General sobre la Exploración del Sitio de ASP .NET
    5.3.2. Mapas de Sitio de ASP .NET
    5.3.3. Proteger la Exploración del Sitio de ASP .NET
      5.3.3.1. Reducción de Seguridad del Mapa del Sitio de ASP .NET
    5.3.4. Cómo: Agregar la Función de Exploración a Sitios Sencillos
    5.3.5. Cómo: Personalizar la Apariencia de Controles SiteMapPath de Servidor Web
    5.3.6. Cómo: Mostrar los Datos de Mapas de Sitio de Controles No Jerárquicos de Servidor Web
    5.3.7. Cómo: Filtrar los Nodos Recuperados por Controles SiteMapDataSource de Servidor Web
    5.3.8. Cómo: Enumerar los Nodos del Mapa del Sitio mediante Programación
    5.3.9. Cómo: Modificar Nodos de Mapa de Sitio en Memoria mediante Programación
    5.3.10. Cómo: Configurar Varios Mapas de Sitio y Proveedores de Mapas de Sitio
    5.3.11. Cómo: Buscar Datos de Mapas de Sitio
    5.3.12. Proveedores de Exploración del Sitio de ASP .NET
      5.3.12.1. Implementar Proveedores de Mapas de Sitio de ASP .NET
        5.3.12.1.1. Cómo: Implementar Proveedores de Mapas de Sitio de ASP .NET
          5.3.12.1.1.1. Ejemplo de Proveedor de Mapas de Sitio de Texto
          5.3.12.1.1.2. Ejemplo de Proveedor de Mapas de Sitio de Microsoft Access
    5.3.13. Tutorial: Agregar la Función de Exploración de Sitios Web
    5.3.14. Tutorial: Filtrar Nodos de Mapas de Sitios basándose en las Funciones de Seguridad
  5.4. Páginas Principales ASP .NET
    5.4.1. Información General sobre las Páginas Principales ASP .NET
    5.4.2. Compartir Páginas Principales en Visual Studio
    5.4.3. Páginas Principales ASP .NET Anidadas
    5.4.4. Trabajar con Páginas Principales ASP .NET mediante Programación
      5.4.4.1. Eventos en Páginas Principales y Páginas de Contenido ASP .NET
      5.4.4.2. Cómo: Hacer Referencia al Contenido de Página Principal ASP .NET
    5.4.5. Editar Páginas Principales en el Diseñador de Visual Web Developer
      5.4.5.1. Cómo: Crear Páginas de Contenido para Página Maestra ASP .NET
    5.4.6. Tutorial: Crear y Usar Páginas Principales ASP .NET en Visual Web Developer
  5.5.Temas y Máscaras de ASP .NET
    5.5.1. Información General sobre Temas y Máscaras de ASP .NET
    5.5.2. Cómo: Aplicar Temas de ASP .NET
    5.5.3. Cómo: Deshabilitar Temas de ASP .NET
    5.5.4. Cómo: Aplicar Temas de ASP .NET mediante Programación
    5.5.5. Tutorial: Crear Temas Seleccionables por el Usuario
    5.5.6. Cómo: Definir Temas de Páginas ASP .NET
    5.5.7. Tutorial: Personalizar un Sitio Web mediante Temas en Visual Studio
  5.6. Especificar una Versión de .NET Framework para Sitios Web

Descarga
MSDN_Manual_Visual_Web_Developer_Parte1

martes, 18 de abril de 2017

Videos - MVA Top 10 JavaScript Questions

Videos MVA Top 10 JavaScript Questions

1. MVA Top 10 JavaScript Questions - Introduction


2. MVA Top 10 JavaScript Questions - Question 1

How do I return the response from an asynchronous call?


3. MVA Top 10 JavaScript Questions - Question 2

What are JavaScript closures?


4. MVA Top 10 JavaScript Questions - Question 3

Why is it bad to use the for in statement to iterate through an array?


5. MVA Top 10 JavaScript Questions - Question 4

What is the difference between “==” and “===” ?


6. MVA Top 10 JavaScript Questions - Question 5

How to get a date as a software engineer?


7. MVA Top 10 JavaScript Questions - Question 6

How do I check if JavaScript objects are equal?


8. MVA Top 10 JavaScript Questions - Question 7

How do I sort an array?


9. MVA Top 10 JavaScript Questions - Question 8

What is the difference between let and var?


10. MVA Top 10 JavaScript Questions - Question 9

How do I change HTML elements in JavaScript?


11. MVA Top 10 JavaScript Questions - Question 10

How do I check if an array contains an object with a certain attribute value?




martes, 5 de julio de 2016

El Libro del Día: RESTful Web Clients

El Libro del Día: 2016-07-05

Titulo: RESTful Web Clients
Autor: Mike Amundsen
Editorial: O'Reilly
Nro Paginas: 169

Capítulos:
1. Our HTML Roots and Simple Web APIs
2. JSON Clients
3. The Representor Pattern
4. Versioning and the Web
5. Collection+JSON Clients

Descarga:
RESTful_Web_Clients

martes, 23 de febrero de 2016

El Libro del Día: Frontend Architecture for Design Systems

El Libro del Día: 2016-02-23

Titulo: Frontend Architecture for Design Systems
Autor: Micah Godbolt
Editorial: O'Reilly
Nro Paginas: 197

Capítulos:
Part I. Origins
1. The Discipline of Frontend Architecture
2. Alpha Project
3. The Pillars of Frontend Architecture
Part II. The Code Pillar
4. HTML
5. CSS
6. JavaScript
7. Red Hat Code
Part III. The Process Pillar
8. Workflow
9. Task Runners
10. Red Hat Process
Part IV. The Testing Pillar
11. Unit Testing
12. Performance Testing
13. Visual Regression Testing
14. Red Hat Testing
Part V. The Documentation Pillar
15. Style Guides
16. Pattern Libraries
17. Red Hat Documentation
18. Conclusion

Descarga:
Frontend_Architecture_for_Design_Systems

jueves, 28 de enero de 2016

Videos Curso ASP.NET MVC & JavaScript Desysweb (Parte 1)

Videos del Curso ASP.NET MVC & JavaScript Desysweb (Parte 1)

Comparto la primera parte de otro curso de ASP.NET MVC & JavaScript realizado en la Empresa Desysweb donde todo se trabaja en forma desconectada usando en el Servidor mi Serializador de Cadenas y JavaScript en el Cliente, sobre todo Matrices.

1. Curso MVC & JavaScript Desysweb - Demo 01

En este video se muestra como trabajar con Listas de 2 formas:
- Consulta Síncrona usando el control MVC WebGrid que envia HTML
- Consulta Asíncrona usando XHR y enviando String que son usados para crear una Tabla por JavaScript en el Cliente.

Esta segunda forma es mas eficiente ya que solo se envía los datos (cadenas separadas por un caracter) y  en el cliente se construye el HTML usando JavaScript.


2. Curso MVC & JavaScript Desysweb - Demo 02

En este video se muestra como crear una Consulta Asíncrona usando XmlHttpRequest (XHR) enviando Cadenas (String) mediante un serializador personalizado y creando una tabla HTML en JavaScript.

Para el ejemplo se trabaja con una lista de Productos: Código, Nombre, Id del Proveedor, Nombre del Proveedor, Id de la Categoría, Nombre de la Categoría, Precio Unitario y Stock.


3. Curso MVC & JavaScript Desysweb - Demo 03

En este video se muestra como crear un filtro desconectado mediante un ComboBox y usando solo Cadenas en JavaScript.

Para el ejemplo se muestra en un ComboBox las Categorías y al seleccionar una se muestran los Productos por Categoría, pero todo es en el lado del cliente usando JavaScript.


4. Curso MVC & JavaScript Desysweb - Demo 04

En este video se enseña como crear un filtro desconectado mediante las cabeceras de la tabla usando controles de texto para filtrar cada campo, el filtro se hace solo usando Cadenas.

El ejemplo es con la tabla productos y se puede filtrar por código, nombre, proveedor, categoría, precio y stock mediante JavaScript.


5. Curso MVC & JavaScript Desysweb - Demo 05

En este video se enseña como crear un filtro desconectado mediante las cabeceras de la tabla usando controles de textos y combos para filtrar cada campo.

El ejemplo es con la tabla productos y se puede filtrar por código, nombre, proveedor, categoría, precio y stock mediante JavaScript.


6. Curso MVC & JavaScript Desysweb - Demo 06

En este video se muestra como trabajar con matrices y ocultar columnas en la presentación, para lo cual se listan los datos de los productos sin incluir el código del proveedor ni el código de la categoría.

Al seleccionar un producto se muestra un popup con su detalle donde si se muestran todos los datos, incluyendo los ocultos, el cual se realiza usando una búsqueda en la matriz.

Cabe resaltar que en este ejemplo no se usan dos páginas sino dos divs, uno para la lista y el otro para el detalle, lo que hace más rápido la visualización de los datos.


7. Curso MVC & JavaScript Desysweb - Demo 07

En este video se muestra como ordenar columnas en forma ascendente y descendente usando matrices en JavaScript.

Para el ejemplo se crean enlaces en la cabecera de la tabla, los cuales permiten ordenar sobre cada campo de la tabla productos, el primer clic ordena en forma ascendente y el segundo ordena en forma descendente mostrándose el símbolo respectivo.


8. Curso MVC & JavaScript Desysweb - Demo 08

En este video se muestra como paginar registros usando matrices en el cliente usando JavaScript. La paginación consta de enlaces (links) con los números de páginas y a los extremos los botones de avance por bloques, en el caso de que sean demasiadas páginas.

En este ejemplo se usan enlaces (a hrefs) para la paginación los cuales se encuentran sobre una lista de viñetas que se visualizan como botones gracias a la hija de estilos.


9. Curso MVC & JavaScript Desysweb - Demo 09

En este video se muestra como hacer las 3 operaciones en forma conjunta, es decir, paginar registros, ordenar columnas y filtrar registros en el cliente (desconectado) usando matrices en JavaScript.

El ejemplo es con la lista de productos y los datos están paginados y por bloques, también las columnas se pueden ordenar en forma ascendente y descendente y finalmente se puede filtrar por cada campo escribiendo sobre los textos de las cabeceras en cada columna de la tabla.


lunes, 25 de enero de 2016

Videos Curso ASP.NET MVC & JavaScript HTE (Parte 1)

Videos del Curso ASP.NET MVC & JavaScript HTE (Parte 1)

Comparto la primera parte del curso de ASP.NET MVC & JavaScript realizado en la Empresa HTE donde todo se trabaja en forma desconectada usando en el Servidor mi Serializador de Cadenas y JavaScript en el Cliente, sobre todo Matrices.

1. Curso MVC & JavaScript HTE - Demo 01

En este video se muestra como crear una simple aplicación web usando un Formulario Web y Controles Web.

El ejemplo muestra una consulta de empleados, se ingresa el código y se envía la consulta al servidor obteniendo los datos de este y mostrando un mensaje por JavaScript.

Además permite crear un archivo de texto con los datos del empleado y bajarlo al cliente.


2. Curso MVC & JavaScript HTE - Demo 02

En este video se muestra como crear una simple aplicación web con ASP.NET MVC, sobre todo se muestra como pasar datos desde el cliente al servidor usando parámetros el método de acción.

También se muestra como enviar datos desde el servidor al cliente  de diferentes formas, entre ellas usando ViewData y usando un Modelo.


3. Curso MVC & JavaScript HTE - Demo 03

En este video se muestran los diferentes Tipos de Resultados de Acciones en MVC, tales como ActionResult, ContentResult (string y DateTime), JsonResult, FileResult y JavaScriptResult.


4. Curso MVC & JavaScript HTE - Demo 04

En este video se muestra como crear una Consulta Asíncrona usando XmlHttpRequest (XHR) enviando Cadenas (String) mediante un serializador personalizado y creando una tabla en JavaScript.

Para el ejemplo se trabaja con una lista de clientes: código, nombre, dirección y contacto.


5. Curso MVC & JavaScript HTE - Demo 05

En este video se muestra como crear un filtro desconectado usando cadenas y matrices. El filtro se hace mediante un control textbox y los resultados se muestran en una tabla.

El ejemplo es con la tabla Clientes de Northwind, se consulta por nombre y se se muestran el código, nombre, dirección y contacto.


6. Curso MVC & JavaScript HTE - Demo 06 (Parte 1)

En este video se muestra la primera parte de como crear un filtro desconectado mediante un ComboBox y usando Cadenas y Matrices en JavaScript.

Para el ejemplo se muestra en un ComboBox las Categorías y al seleccionar una se muestran los Productos por Categoría, pero todo es en el lado del cliente usando JavaScript.


7. Curso MVC & JavaScript HTE - Demo 06 (Parte 2)

En este video se muestra la segunda parte de como crear un filtro desconectado mediante un ComboBox y usando Cadenas y Matrices en JavaScript.

Para el ejemplo se muestra en un ComboBox las Categorías y al seleccionar una se muestran los Productos por Categoría, pero todo es en el lado del cliente usando JavaScript.


8. Curso MVC & JavaScript HTE - Demo 07

En este video se enseña como crear un filtro desconectado mediante las cabeceras de la tabla usando controles de texto para filtrar cada campo.

El ejemplo es con la tabla productos y se puede filtrar por código, nombre, proveedor, categoría, precio y stock mediante JavaScript.


9. Curso MVC & JavaScript HTE - Demo 08

En este video se enseña como crear un filtro desconectado mediante las cabeceras de la tabla usando controles de textos y combos para filtrar cada campo.

El ejemplo es con la tabla productos y se puede filtrar por código, nombre, proveedor, categoría, precio y stock mediante JavaScript.


lunes, 4 de enero de 2016

Artículos - Computación y Sistemas en el 2015

Computación y Sistemas en el 2015

En este artículo quiero compartir el resumen educativo del 2015, donde mostraremos las Universidades más importantes del mundo para estudiar Ciencias de la Computación y los Lenguajes de Programación mas usados en el mundo.

Top 50 de Universidades de Ciencias de la Computación 2015 (según Top Universities)

01 Massachusetts Institute of Technology (MIT) - USA
02 Stanford University - USA
03 University of Oxford - UK
04 Carnegie Mellon University (CMU) - USA
05 Harvard University - USA
06 University of California, Berkeley (UCB) - USA
07 University of Cambridge - UK
08 The Hong Kong University of Science and Technology (HKUST) - China
09 ETH Zurich (Swiss Federal Institute of Technology) - Suiza
10 Princeton University - USA
11 National University of Singapore (NUS) - Singapur
12 The University of Hong Kong (HKU) - China
13 The University of Melbourne - Australia
14 The University of Edinburgh - UK
15 Imperial College London (ICL) - UK
16 University of Toronto (UofT) - Canada
17 University of California, Los Angeles (UCLA) - USA
18 The Chinese University of Hong Kong (CUHK) - China
19 The University of Tokyo - Japon
20 University of Washington (UW) - USA
21 Nanyang Technological University, Singapore (NTU)- Singapur
22 University of Texas at Austin (UT) - USA
23 University College London (UCL) - UK
24 University of British Columbia (UBC)- Canada
25 University of Waterloo (UW) - Canada
26 The Australian National University (ANU) - Australia
27 California Institute of Technology (Caltech) - USA
28 Columbia University - USA
29 Ecole Polytechnique Fédérale de Lausanne (EPFL) - Suiza
30 University of Illinois at Urbana Champaign - USA
31 Cornell University - USA
32 New York University (NYU) - USA
33 Technische Universität München - Alemania
34 Yale University - USA
35 The University of New South Wales (UNSW) - Australia
36 Peking University - China
37 The University of Sydney - Australia
38 Tsinghua University - China
39 Georgia Institute of Technology (GaTech) - USA
40 Korea Advanced Institute of Science & Technology (KAIST) - Corea del Sur
41 University of Pennsylvania - USA
42 Seoul National University - Corea del Sur
43 Politecnico di Milano - Italia
44 The University of Auckland - Nueva Zelandia
45 University of California, San Diego (UCSD) - USA
46 National Taiwan University (NTU) - Taiwán
47 University of Chicago - USA
48 The University of Manchester - UK
49 The University of Queensland - Australia
50 McGill University - Canada

Como se observa en la lista, Estados Unidos tiene 19 Universidades en los 50 primeros puestos, encabezadas por el MIT, Stanford,  Carnegie Mellon y Harvard; en segundo puesto le sigue Inglaterra con 6 Universidades encabezadas por Oxford y Cambridge y Australia con 5 Universidades encabezadas por Melbourne, ANU, UNSW y Sidney.

Top 400 por Países de Universidades de Ciencias de la Computación 2015

USA 70
UK 41
Alemania 28
Australia 21
China 20
Canadá 17
Francia 17
Italia 14
Taiwan 12
Japón 11
Holanda 10
Corea 10
España 7
Irlanda 7
Suiza 7
India 7
Brasil 7
N. Zel 7
Bélgica 6
Suecia 6
Austria 6
Hong K. 6
M. Orie. 6
México 3
Chile 2
Argentina 1
África 1

Como se observa claramente, nuevamente Estados Unidos ocupa el primer puesto con 70 Universidades dentro de las primeras 400, en segundo puesto Reino Unido con 41, en tercer puesto Alemania con 28, en cuarto puesto Australia con 21 y en quinto puesto China con 20.

En nuestra región, el líder es Brasil con 7 Universidades, México con 3, Chile con 2 y Argentina con 1. Como se observa Perú no tiene ninguna Universidad en el Ranking de las primeras 400 Universidades.

Top 10 de Lenguajes de Programación (IEEE Spectrum)

01 Java
02 C
03 C++
04 Python
05 C#
06 R
07 PHP
08 JavaScript
09 Ruby
10 Matlab

Según IEEE Spectrum Java es el Lenguaje mas usado en el mundo, seguido por C y C++. La revelación en este Ranking es JavaScript que debido al aumento de sus APIs es el mas usado para escribir código en el cliente en Aplicaciones Web.

Top 10 de Lenguajes de Programación (GitHub)

01 JavaScript
02 Java
03 Ruby
04 PHP
05 Python
06 CSS
07 C++
08 C#
09 C
10 HTML

Según GitHub la mayoría de librerías y código compartido en Git está escrito en JavaScript, seguido por Java y Ruby. Aunque CSS y HTML no son Lenguajes de Programación tradicionales están considerados en la lista y poco a poco toman un lugar importante en el Desarrollo Web por encima de muchos otros.

Resumen del 2015

En resumen las mejores Universidades para estudiar Ciencias de la Computación (Informática, Sistemas, Ingeniería de Software, etc.) están en Estados Unidos (USA) con 70 Universidades, seguido por Inglaterra con 41 Universidades, el resto de países no tiene una fuerte presencia, excepto Alemania, Australia y China

Por otro lado en Lenguajes de Programación el de mayor crecimiento a sido JavaScript, pero también son muy usados Java, PHP, Python y Ruby. Además JavaScript no es usado solo sino junto con HTML5 y CSS3, que forman la trilogía moderna del Desarrollo Web.

Finalmente, para que nuestro país mejore su educación y este en el Ranking debe hacerse cambios radicales, los cuales se pueden resumir en dos puntos:

1. Cambio de Curricula: Nuevos cursos de Desarrollo Web y Móvil (HTML5, CSS3, APIs de JavaScript, Node.js, C#, Java, etc). Estos nuevos cursos no tienen que ser "Hello World", sino cometeríamos los mismos errores.

2. Captar mejores profesores: El requisito principal para ser profesor no debe ser el título (pregrado ni postgrado), debemos reclutar expertos, científicos, genios, inventores que deseen compartir sus conocimientos y que sobre todo tengan pasión por lo que hacen.

En este sentido, para contribuir con la educación, desde este Blog durante este 2016 vamos a mostrar más algoritmos, más demos y más artículos orientados a la optimización de sistemas (performance) sobre todo mostraremos mas APIs de JavaScript, HTML5 y CSS3.

miércoles, 9 de diciembre de 2015

Artículo - Pruebas de Performance

Pruebas de Performance

En este artículo veremos un caso práctico de pruebas del software: las pruebas de performance, que son las más necesarias en los sistemas web, debido al creciente incremento de usuarios y sobre todo de dispositivos que se pueden conectar a una aplicación web.

1. Criterios para Medir la Performance

Primero debemos entender que la medición de la performance de un sitio web se realiza a nivel de cada página, es decir, para medir la performance de todo el sitio web debemos medir la performance de cada página y luego hacer un promedio.

Entre las principales métricas para medir la performance de una página tenemos:
  • Tiempo de carga (Load Time)
  • Tiempo del primer byte recibido (First Byte)
  • Índice de velocidad (Speed Index)
  • Elementos del Modelo de Objetos del Documento (DOM Elements)
Por otra parte, estas métricas deben aplicarse en 2 momentos
  • La primera vez (First View)
  • Las demás veces (Repeat View)
Solo para recordar, hay que mencionar que los principales factores que afectan a la performance son:
  • Cantidad de solicitudes hechas por la página (Request)
  • Cantidad de datos enviados al cliente (Bytes)
Para obtener un buen puntaje debemos hacer la menor cantidad de solicitudes en cada página, es decir, usando pocos archivos CSS, JavaScript, Imágenes y Fuentes.

Además cada archivo debe tener la menor cantidad de datos, es decir, solo lo que se va a usar; en el caso de CSS las clases, en el caso de JavaScript las funciones y en el caso de las imágenes y las fuentes tienen que estar optimizadas.

2. Herramientas para Pruebas de Performance

Existen muchas herramientas para medir la performance, entre las más usadas en el mundo tenemos:

2.1. YSlow

Esta herramienta fue la primera en medir la performance y la primera versión fue creada por Steve Souders en Yahoo en el 2007, actualmente está disponible la versión 2.0 mantenida por Marcel Duran de Twitter.

YSlow es un complemento que se agrega al navegador (Browser) y está disponible para casi todos los navegadores (Firefox, Chrome, Safari, Opera, etc.) menos para Microsoft Internet Explorer.

URL: http://yslow.org/

Página Web de YSlow

Esta herramienta, identifica 34 criterios claves de los cuales actualmente usa 23 criterios para medir la performance de la página, los cuales se muestran en la siguiente figura.

Criterios para Medir Performance de YSlow V2.0

2.2. PageSpeed Insights

Esta herramienta desarrollada por Google en el 2013, inicialmente estaba disponible como una extensión para los navegadores, pero actualmente está disponible como una página web dentro del sitio de desarrolladores de Google.

Una de las ventajas de esta herramienta es que analiza la performance tanto para Desktop como para dispositivos móviles.

URL: https://developers.google.com/speed/pagespeed/insights/

Página Web de PageSpeed Insights

2.3. WebPageTest

Es una herramienta inicialmente desarrollada por AOL en el 2008 y actualmente mantenida por Google. 

Es una de las más usadas actualmente ya que muestra información completa de todas las métricas de performance vistas anteriormente.

URL: http://www.webpagetest.org/

Página Web de WebPageTest

3. Página de Prueba: Login del Sistema

Para las pruebas con las 3 herramientas hemos tomado la página de login de un sistema ubicado en la siguiente dirección.

URL: http://red.hteperu.com/test/Incentivos.Appweb/

Página Web de Prueba

Solo hay que resaltar que la página está en ASP.NET MVC y se compone de lo siguiente:
  • 1 archivo html para la página
  • 1 archivo de hoja de estilo: Login.css
  • 2 archivos de JavaScript: md3.js y Login.js
  • 2 archivos de fuentes: regular.woff y regular.woff2
Las pruebas se harán usando Google Chrome V46.0.2490.86 m (64 bits)

4. Pruebas de Performance usando YSlow

Después de descargar el complemento YSlow V2.0 abrir la herramienta y realizar los siguientes pasos:
  • Ir a la dirección URL: http://red.hteperu.com/test/Incentivos.Appweb/.
  • Clic al botón “Run Test” de la ficha “Home” similar a lo mostrado en la figura.
Ficha Inicio de YSlow V2.0

  • Automáticamente se irá a la ficha “Grade” similar a lo mostrado en la figura.
Ficha Grado de YSlow V2.0

  • En esta ficha se aprecia el puntaje obtenido por la página, en este caso “93 puntos” obteniendo el grado “A” que significa un buen resultado.
  • Para mejorar el puntaje necesitamos usar CDN (grado C), usar cabeceras de expiración (grado E), configurar Entity Tags (grado D).
  • Si deseamos ver el detalle por tipo de archivos seleccionamos la ficha “Components” y se mostrará algo similar a la siguiente figura.
Ficha Componentes de YSlow V2.0
  • En la figura notamos que aparece un mensaje de color rojo indicando que No se encuentra el archivo favicon (icono de la página web).
  • Si deseamos ver una estadística de archivos por tipos seleccionamos la ficha “Statistics” y se mostrará algo similar a la siguiente figura.
Ficha Estadística de YSlow V2.0

Finalmente, en esta ficha podemos darnos cuenta de que solo se está guardando en cache los archivos de hojas de estilos (css) y de JavaScript (js) pero no la página principal y el icono de inicio (ya que éste no existe).

En términos generales, diremos que hemos pasado la prueba de performance usando YSlow V2.0 de Yahoo.
 
5. Pruebas de Performance usando PageSpeed Insights

Para realizar las pruebas con esta herramienta realizar los siguientes pasos:
  • Ir a la dirección URL: 
https://developers.google.com/speed/pagespeed/insights/.
  • Ingresar la dirección de la página web con el login:
http://red.hteperu.com/test/Incentivos.Appweb/
  • Clic al botón “Analize” tal como se muestra en la siguiente figura.
Página principal de PageSpeed Insights
  • Automáticamente aparecerá los resultados de la ficha “Mobile” que tiene 2 partes: Velocidad y Experiencia de Usuario.
  • A continuación se muestra un gráfico con la sección de “Velocidad” de la ficha “Mobile”.

Sección Velocidad de la ficha Mobile de PageSpeed Insights

  • Aquí se aprecia que se ha fallado en 2 reglas y se ha pasado 8 reglas. Los 2 temas a mejorar son cargar asíncronamente el archivo CSS y el otro es usar cabeceras de expiración para guardar en cache los archivos JS y CSS.
  • A continuación se muestra un gráfico con la sección de “Experiencia de Usuario” de la ficha “Mobile”.
Sección Experiencia de Usuario de la ficha Mobile de PageSpeed Insights
  • En esta se aprecia que no hay ningún problema de experiencia de usuario si la página se ve en un dispositivo móvil.
  • Si cambiamos a la ficha “Desktop” ésta tiene solo la parte de Velocidad que es exactamente la misma que la de la ficha Mobile.
  • A continuación se muestra un gráfico con la sección de “Velocidad” de la ficha “Desktop”.
Sección Velocidad de la ficha Desktop de PageSpeed Insights
  • En términos generales, podemos decir que también hemos pasado la prueba de performance usando PageSpeed Insights de Google.
6. Pruebas de Performance usando WebPageTest

Para realizar las pruebas con esta herramienta realizar los siguientes pasos:
  • Ir a la dirección URL: 
http://www.webpagetest.org/.
  • Ingresar la dirección de la página web con el login:
http://red.hteperu.com/test/Incentivos.Appweb/
  • Clic al botón “Start Test” tal como se muestra en la siguiente figura.
Página principal de WebPageTest
  • Aparece un mensaje de probando (Testing) y luego se muestra el resultado del test similar al de la siguiente figura.
Página de Resultado de la Prueba en WebPageTest
  • Nuevamente apreciamos que la página web está casi bien excepto que debe usar Cache para archivos JS y CSS (F) y usar CDN (X).
  • Podemos analizar la primera ficha “Summary” que muestra un resumen con una tabla con los tiempos de carga y un par de gráficos con la primera vista y la vista repetida, similar a la siguiente figura.
Ficha Resumen del Resultado de WebPageTest
  • La segunda ficha “Details” muestra mayor detalle de los tiempos de carga, un gráfico de cascada, un gráfico de conexiones y una tabla con las solicitudes realizadas por la página.
  • El gráfico de cascada o “Waterfall View” muestra los tiempos de carga por cada recurso de la página, similar a la siguiente figura.
 Vista Cascada de la Ficha Detalle del Resultado de WebPageTest
  • El gráfico de conexión o “Connection View” muestra los tiempos de carga por conexiones realizadas al servidor, similar a la siguiente figura.
Vista Conexión de la Ficha Detalle del Resultado de WebPageTest
  • Finalmente en la sección de Detalles la tabla “Request Details” muestra los detalles de las solicitudes realizadas por la página, similar a la siguiente figura.
Detalles de Solicitud de la Ficha Detalle del Resultado de WebPageTest
  • Las filas pintadas de color rojo indican peligro, en este caso, el archivo de fuentes woff2 no ha sido registrado en el servidor como extensión conocida (MIME) y el otro problema es que la página no cuenta con un icono de inicio.
  • La tercera ficha “Performance Review” permite mostrar una revisión de las métricas de performance, para lo cual presenta una tabla con la lista de verificación a mejorar, el detalle y un glosario.
Lista de verificación de la Ficha Revisión del Resultado de WebPageTest
  • En el “CheckList” se aprecia claramente los temas que se pueden mejorar (color rojo), el archivo de fuente woff2 y el archivo de icono, además de usar caché para contenido estático (CSS, JS) y usar un servidor CDN.
Detalles de la Ficha Revisión del Resultado de WebPageTest

Glosario de la Ficha Revisión del Resultado de WebPageTest
  • La cuarta ficha “Content Breakdown” permite desglosar el contenido por tipo de recurso, mostrando 4 gráficos: por tipo MIME y por Conexión, tanto para la primera vista como para las vistas repetidas.
Gráfico por Tipo MIME (Primera Vista) de la Ficha Desglosar Contenido del Resultado de WebPageTest

Gráfico por Conexión (Primera Vista) de la Ficha Desglosar Contenido del Resultado de WebPageTest

Gráfico por Tipo MIME (Vista Repetida) de la Ficha Desglosar Contenido del Resultado de WebPageTest

Gráfico por Conexión (Vista Repetida) de la Ficha Desglosar Contenido del Resultado de WebPageTest
  • La quinta ficha “Domains” muestra 2 gráficos de desglose de contenido pero por dominio, tanto para la primera vista como para las vistas repetidas.
  • Solo hay que mencionar que No es necesario tenar varios Dominios (incluyendo CDN) cuando el número de archivos es poco, por ejemplo en nuestro caso, la página de login tiene solo 6 archivos.
  • A continuación se muestra los gráficos de la ficha “Domains” conteniendo el desglose de contenidos para la primera vista y para las vistas repetidas.
Gráfico de desglose de contenido (Primera Vista) de la Ficha Dominio del Resultado de WebPageTest
Gráfico de desglose de contenido (Vista Repetida) de la Ficha Dominio del Resultado de WebPageTest

  • Finalmente, revisaremos la sexta y última ficha llamada “Screen Shot” que muestra 2 gráficos con las pantallas de la página totalmente cargada y otra con el Documento Completado, además también los mensajes de consola del Log.
  • A continuación se muestra los gráficos de la ficha “Screen Shot” y los mensajes del Log.
Gráfico de la Pantalla Totalmente Cargada de la Ficha Captura de Pantalla del Resultado de WebPageTest
Gráfico de la Pantalla con Documento Completado de la Ficha Captura de Pantalla del Resultado de WebPageTest
Gráfico de Log de la Ficha Captura de Pantalla del Resultado de WebPageTest

  • En términos generales, podemos decir que también hemos pasado la prueba de performance usando WebPageTest de Google.
Finalmente, si hacemos caso de las sugerencias de estas 3 herramientas de performance nuestro sitio será muy rápido.

Descarga del documento completo
Pruebas_Performance

martes, 17 de noviembre de 2015

El Libro del Día: Security for Web Developers

El Libro del Día: 2015-11-17

Titulo: Security for Web Developers
Autor: John Paul Mueller
Editorial: O'Reilly
Nro Paginas: 382

Capítulos:
Part I. Developing a Security Plan
1. Defining the Application Environment
2. Embracing User Needs and Expectations
3. Getting Third-Party Assistance
Part II. Applying Successful Coding Practices
4. Developing Successful Interfaces
5. Building Reliable Code
6. Incorporating Libraries
7. Using APIs with Care
8. Considering the Use of Microservices
Part III. Creating Useful and Efficient Testing Strategies
9. Thinking Like a Hacker
10. Creating an API Safety Zone
11. Checking Libraries and APIs for Holes
12. Using Third-Party Testing
Part IV. Implementing a Maintenance Cycle
13. Clearly Defining Upgrade Cycles
14. Considering Update Options
15. Considering the Need for Reports
Part V. Locating Security Resources
16. Tracking Current Security Threats
17. Getting Required Training

Descarga:
Security_for_Web_Developers

jueves, 29 de octubre de 2015

Videos - Curso MVA - Performance HTML JavaScript

Videos del Curso MVA Performance HTML y JavaScript

Comparto con ustedes los videos del Curso publicado en Microsoft Virtual Academy (MVA) en Marzo del 2015 llamado: "Practical Performance Tips to Make Your HTML/JavaScript Faster" contando como instructores a Doris Chen y John-David Dalton.

Modulo 01 - Web Performance 101


Modulo 02 - Tools and Measurement


Modulo 03 - Strategies and Principles, Network Requests


Modulo 04 - Strategies and Principles, Media Usage


Modulo 05 - Strategies and Principles, Memory, Markup, Execution


Modulo 06 - Write Fast JavaScript


Modulo 07 - Case Study, Casual Game Performance Tunning


Comentario

Desde hace unos años vengo difundiendo este tema aqui en Perú debido a que es urgente cambiar la forma de pensar (paradigma) el cual esta fuertemente orientado al desarrollo (reusabilidad, mantenibilidad, diseño adaptativo, etc) y no a la ejecución (performance, seguridad y escalabilidad).

Para que un Sistema sea muy rapido hay que reducir el ancho de banda enviando pocos archivos y con poco contenido, para lo cual existen muchas tecnicas, no solo la minificación y el bundling son suficientes.

Desarrollar pensando en Performance es muy diferente que desarrollar pensando en facilidad, es por eso, que trato de compartir mis experiencias en los Desarrollos que realizo y sobre todo en las Capacitaciones, pero siempre hay resistencia al cambio, sino es "estandar" la gente todavia no considera adoptar algo nuevo.

Por esa razón voy a publicar hoy y mañana Libros y Videos sobre Performance para que entiendan que es otro camino el que hay que tomar, el cual ya ha sido adoptado en Estados Unidos desde el 2007, gracias al trabajo de los investigadores de Yahoo como Steve Souders, Douglas Crockford, Nicholas Zakas, Stoyan Stefanov, Nicolle Sullivan, etc.

Este esfuerzo ha sido imitado por los otros gigantes del Software tales como Google, Mozilla, Facebook, Microsoft, etc, que cada vez invierten mas recursos para el tema de Performance, cosa que en los paises en "vias de desarrollo" es casi nulo, ya que solo nos conformamos con que el Sistema este en Producción y no se caiga (gran logro) y no que sea el mas rápido y el mas seguro.

Dejo este comentario para que reflexionemos y tratemos de cambiar ya que se lo debemos a los usuarios que usan nuestros sistemas, a los cuales siempre les decimos "no se puede", por ejemplo siempre se ha dicho que un Sistema Web No puede ser igual de rapido que un Sistema Windows o que una Aplicación HTML No puede ser igual de rapida que una Nativa en Andorid o iOS y eso es totalmente falso y pronto lo comprobaremos (The Web is Platform, Internet of Things, etc).

martes, 15 de septiembre de 2015

El Libro del Día: Learning React Native

El Libro del Día: 2015-09-15

Titulo: Learning React Native
Autor: Bonnie Eisenman
Editorial: O'Reilly
Nro Paginas: 104

Capítulos:
1. Introduction
2. Getting Started
3. Components for Mobile
4. Styles

Descarga:
Learning_React_Native

lunes, 7 de septiembre de 2015

Artículos - Buenas Prácticas de Performance en Sitios Web

Buenas Prácticas de Performance en Sitios Web

Uno de los principales atributos de un sitio web es que tenga un Alto Rendimiento, es decir, una buena Performance. En esta sección veremos todo lo necesario para mejorar el rendimiento de nuestros sitios web.


1.   Factores para Medir la Performance de una Aplicación
Los 2 factores más importantes para medir la performance son:
·         Tiempo de Procesamiento, el cual debe ser el menor posible
·         Consumo de Memoria, el cual también debe ser el menor posible

2.   Componentes de un Sitio Web
Los componentes de un Sitio Web los podemos dividir en 2 grandes grupos:
Front-End
Representa el inicio del procesamiento, sobre el cual interactúa el usuario y envía las órdenes al Back-End.
En un entorno web éste se compone básicamente por el Navegador (Browser), el cual procesa los siguientes elementos:
·         HTML, son las etiquetas que especifican lo que hay que Pintar en el Navegador.
·         JavaScript, son Secuencias de Comandos que debe ejecutar el Motor de Scripts.
·         Hojas de Estilos (CSS), son los formatos que se aplicarán a los elementos HTML.
·         Imágenes, son gráficos que debe mostrar el navegador, etc.

Componentes del Front-End de un Sitio Web
Todos estos elementos se encuentran definidos dentro de la página y deben descargarse desde el Servidor Web hacia el Cliente Web (navegador).
Back-End
Representa el final del procesamiento y se encarga de procesar las llamadas del Front-End y devolver resultados.
En un entorno web éste se compone de los Servidores entre los cuales tenemos:
·         Servidor Web, donde se aloja la aplicación web, por ejemplo, el Internet Information Services (IIS) de Microsoft.
·         Servidor de Datos, donde se aloja la base de datos, por ejemplo, el SQL Server de Microsoft.
·         Servidor de Aplicaciones, donde se aloja los Componentes Reusables, por ejemplo, el IIS con Servicios WCF, un Host WCF con Servicios, un Host .NET Remoting con Librerías Remotas, etc.
Componentes del Back-End de un Sitio Web

3.   El problema de la Performance en los Sitios Web
Hace varios años un equipo de investigadores de Yahoo, encabezados por Steve Souders, investigó el problema de la performance, que es: “Cuales son los factores que causan que un Sitio Web sea lento”.
La conclusión a la que llegaron fue que entre el 80 y 85 % de la velocidad de carga de una página está asociada al Front-End y solo del 15% al 20% de problemas lo causa el Back-End.
En síntesis, para dar mayor velocidad a nuestras aplicaciones, hay que optimizar sobre todo la página en el lado del cliente, es decir, HTML, JavaScript, CSS, Imágenes, etc, lo cual se trata con mayor detalle a continuación.


Estadística del Problema de la Performance

4.   Las 14 Reglas de Performance de Steve Souders
En el 2007 Steve Souders arquitecto principal de Yahoo escribió el Libro: “High Performance Web Sites”, en el cual resume en 14 reglas los criterios más importantes para la velocidad de un Sitio Web, además creó una herramienta llamada YSlow que ayuda a medir la performance, que junto a PageSpeed de Google son las herramientas más usadas para este fín.
Las 14 reglas de Steve Souders para que un sitio web tenga un alto rendimiento son:
·         Regla 1: Hacer pocas solicitudes HTTP
·         Regla 2: Usar una Red de Entrega de Contenidos (CDN)
·         Regla 3: Añadir una Cabecera HTTP con el Tiempo de Expiración
·         Regla 4: Comprimir Componentes usando GZIP
·         Regla 5: Ubicar la Definición de Hojas de Estilos al inicio de la página
·         Regla 6: Ubicar la Definición de JavaScripts al final de la página
·         Regla 7: Evitar usar Expresiones CSS
·         Regla 8: Usar JavaScript y CSS externos (archivos)
·         Regla 9: Reducir Búsquedas en Sistema de Nombres de Dominios (DNS)
·         Regla 10: Minificar o Reducir JavaScript y CSS
·         Regla 11: Evitar Redirecciones
·         Regla 12: Remover Scripts duplicados
·         Regla 13: Configurar ETags
·         Regla 14: Guardar en Cache Ajax

5.   Otras 14 Consideraciones de Performance de Steve Souders
En el 2009 Steve Souders escribe otro Libro titulado: “Even Faster Web Sites”, en colaboración con otros especialistas, como:
·         Dion Almaer y Ben Galbraith, líderes de la comunidad Ajax (Mozilla).
·         Douglas Crockford, creador de JSON (Yahoo).
·         Tony Gentilcore, creador de Fasterfox (Google).
·         Dylan Schiemann, co-creador de Dojo Toolkit (SitePen).
·         Stoyan Stefanov, co-creador de YSlow 2.0 y Smush.it (Yahoo).
·         Nicole Sullivan, experta en CSS, co-creadora de Smush.it (W3C)
·         Nicholas C. Zakas, co-creador de YUI Library (Yahoo).
Estas 14 consideraciones para que un sitio web sea siempre rápido son:
·         Consideración 1: Optimizar Ajax
·         Consideración 2: Crear Aplicaciones Web Adaptativas
·         Consideración 3: Dividir la Carga Inicial de la Página
·         Consideración 4: Cargar Scripts sin bloquear el Navegador
·         Consideración 5: Unir Scripts Asíncronos
·         Consideración 6: Posicionamiento de Scripts en línea
·         Consideración 7: Optimizar JavaScript
·         Consideración 8: Escalado con Comet
·         Consideración 9: Aumentando GZIP
·         Consideración 10: Optimizando Imágenes
·         Consideración 11: Fragmentando Dominios Dominantes
·         Consideración 12: Nivelar desde el inicio el Documento
·         Consideración 13: Usar escasamente los iFrames
·         Consideración 14: Simplificar los Selectores CSS

6.   Principales Reglas de Performance en Sitios Web

·         Regla 1: Hacer la menor cantidad de solicitudes (HTTP Request)
Para cumplir con esta regla se deberá bajar la menor cantidad de archivos del servidor al cliente, por lo que se debe tener en cuenta lo siguiente:
Ø  Tratar de enviar solo uno o dos archivos de JavaScript. De preferencia debe ser un solo archivo conteniendo solo las funciones usadas en dicha página. Sin son 2 archivos JS uno será genérico (compartido para varias páginas) y otro específico (solo para dicha página).
Ø  Tratar de enviar solo uno o dos archivos de Hojas de Estilos. De preferencia debe ser un solo archivo conteniendo solo los estilos usados en dicha página. Sin son 2 archivos CSS uno será genérico (compartido para varias páginas) y otro específico (solo para dicha página).
Ø  Tratar de Reducir el número de imágenes enviadas al cliente usando Sprites o si las imágenes son pequeñas enviando un flujo serializado como Base64 String.
Comentarios
Actualmente, la mayoría de Sitios Web No cumplen con la regla más importante de la performance, por las siguientes razones:
Ø  Uso de varios archivos de JavaScripts de Frameworks como jQuery, jQueryUI, PlugIns, etc; la mayoría de veces solo por usar unas cuantas características (funciones) de cada uno en la página, innecesariamente se bajan todos los archivos con todas las funciones.
Ø  Uso de varios archivos de Hojas de Estilos de Frameworks de Diseño Web Adaptativo (Responsive Web Design) como Bootstrap, jQuery Mobile, etc; la mayoría de veces solo por usar unas cuantas características (estilos) de cada uno en la página, innecesariamente se bajan todos los archivos con todos los estilos.
Ø  Uso exagerado de archivos de imágenes para mejorar la apariencia de la página, sin importar que por cada archivo mostrado se tenga que hacer un viaje desde el cliente hacia el servidor para traerla y mostrarla.
Ø  El hacer Bundling (Fusión de Archivos) para los JS y CSS No es la mejor solución, ya que si bien es cierto se envía un solo archivo al cliente se incumple la segunda regla ya que se envía mucho contenido.

·         Regla 2: Enviar la menor cantidad de bytes al cliente
Esta segunda regla requiere enviar la menor cantidad de datos del servidor al cliente, incluyendo: HTML, JavaScript, CSS, Imágenes, etc; para lo cual debemos tener en cuenta lo siguiente:
Ø  Solo incluir las funciones de JavaScript que se van a usar en la página.
Ø  Solo incluir los estilos que se van a usar en la página.
Ø  Una vez seleccionado solo las funciones necesarias, minificar el archivo JS.
Ø  Una vez seleccionado solo los estilos necesarios, minificar el archivo CSS.
Ø  Minificar el HTML de la página que viene del servidor, si se usa controles de lado del servidor se deberá crear un Modulo HTTP que intercepte el contenido y minifique el HTML.
Ø  Optimizar las imágenes antes de enviarlas al cliente, reduciendo su tamaño y escogiendo un formato comprimido que no pierda la calidad, por ejemplo el formato png o web-p.
Comentarios
Actualmente, la mayoría de Sitios Web tampoco cumplen con la segunda regla más importante de la performance, por las siguientes razones:
Ø  Cuando usan archivos de JavaScript de terceros, no seleccionan solo las funciones que necesitan en la página y las copian a su único archivo JS, sino que se descargan todos los archivos con todas las funciones tal cual venga en el Framework JavaScript que están usando.
Ø  Cuando usan archivos de hojas de estilos de terceros, no seleccionan solo los estilos que necesitan en la página y las copian a su único archivo CSS, sino que se descargan todos los archivos con todos los estilos tal cual venga en el Framework Responsive Web Design que están usando.
Ø  Minificar los archivos JS con todas las funciones que vienen en los Frameworks de JavaScript, las cuales en su mayoría no se usan, es una solución incompleta, lo mejor es minificar solo las funciones que se usan y no enviar en vano tanto contenido.
Ø  Minificar los archivos CSS con todos los estilos que vienen en los Frameworks Responsive, los cuales en su mayoría no se usan, es una solución incompleta, lo mejor es minificar solo los estilos que se usan y no enviar en vano tanto contenido.
Ø  Muchos desarrolladores usan Controles de lado del Servidor que generan demasiado HTML, mejor sería enviar solo los datos necesarios y pintarlos en el cliente. Pero cuidado, no usar HTML, XML ni JSON, si queremos reducir al máximo el ancho de banda solo debemos enviar los datos sin metadata, por ejemplo, separados por un caracter, inclusive se pueden enviar imágenes como Base64String.

·         Regla 3: Hacer Llamadas Asíncronas Ligeras
Es muy importante mantener siempre la disponibilidad de la aplicación, es decir, por ejemplo, que el usuario siempre pueda trabajar con la interface de usuario. Para esto podemos usar la programación asíncrona, en el caso de las llamadas desde el cliente al servidor generalmente se usa Ajax, para lo cual debemos tener en cuenta lo siguiente:
Ø  Usar XMlHttpRequest (XHR) para hacer llamadas asíncronas en forma nativa, ya que es un estándar de la W3C que actualmente es soportado por todos los navegadores. Los que usan jQuery Ajax, Microsoft Ajax, Ajax Control Toolkit, etc, están usando una librería que internamente usa XHR. Por ejemplo, los métodos de jQuery: $.get, $.post, $.json y $.ajax son llamadas a los métodos open y send de XHR.
Ø  Enviar y recibir datos como cadenas (Text) al hacer llamadas asíncronas, ya que solo ocupa un 7% de todo el HTML (100%), mientras las vistas parciales con HTML son el 50% aproximadamente y si se usa JSON sería el 25% aproximadamente. Es decir, creando un Serializador en el Servidor (código C# en .NET) se puede convertir objetos a cadenas y reducir el ancho de banda en casi un 93%, logrando mayor velocidad de carga de la pagina, aunque tengamos que pintar los controles HTML por JavaScript.
Ø  No escribir código en el inicio de la página, dejarlo en un método que se llame en forma asíncrona, debido a que la primera vez siempre se demora la pagina en cargar y mas el código a ejecutar seria más lento, en cambio, si enviamos la pagina sin ejecutar ningún código al inicio, dejamos que cargue en el navegador y recién hacemos la llamada en forma asíncrona (segundo plano) usando XHR y devolviendo cadenas con los datos que se pintaran como HTML usando JavaScript.
Comentarios
Esta tercera regla también es ignorada por que en muchos casos se hace lo siguiente:
Ø  Se usa jQuery como librería de JavaScript para hacer operaciones asíncronas. En realidad, no fuera malo si solo se seleccionara los métodos que se van a usar, pero casi todos no lo hacen y se trabaja con el archivo JS completo, es por eso, que mejor sería usar directamente una función que use XmlHttpRequest.
Ø  Actualmente, en ASP.NET MVC, la mayoría para trabajar en forma asíncrona usa vistas parciales que envían HTML o jQuery que envía JSON (con metadata) el cual es pintado en el cliente. Esta segunda forma es mejor que la primera, pero la más óptima es que se envíe solo los datos (sin metadata) y se pinte en el cliente.
Ø  Siempre se implementa Ajax en el regreso de la pagina (PostBack), por ejemplo, al dar clic a un botón de consulta o al grabar; pero es indispensable que también se haga en el inicio, ya que es aquí donde se demora más y se necesita que el usuario vea rápido la pagina web y no se quede en blanco el navegador.

·         Regla 4: Optimizar las operaciones con Bases de Datos
Esta regla implica trabajar en forma desconectada la explotación de datos y en forma conectada por lotes la actualización de datos, para mayor detalle seguir las siguientes directivas:
Ø  Las operaciones con datos como búsquedas o filtros, paginación, ordenación, exportación de datos a texto, Excel, etc, se pueden realizar solo en el cliente usando JavaScript, en vez de estar yendo al servidor para realizar tareas con datos que muchas veces No cambian constantemente. Por ejemplo, el ubigeo, al seleccionar el Departamento, filtrar las Provincias y al seleccionar la Provincia filtrar los Distritos; muchos se van hasta el Servidor de Base de Datos, otros hasta el Servidor Web, cuando fácilmente podría hacerse en el cliente.
Ø  Las operaciones de actualización de datos, como inserción, actualización y eliminación generalmente se hacen en forma conectada, pero de preferencia debe hacerse por lotes, es decir no por cada registro sino por un grupo de registros, por ejemplo los mostrados en una página.
Ø  Si hay que insertar o actualizar muchos registros, por ejemplo más de 100, es preferible realizar copias masivas si el origen de datos es SQL Server u Oracle Server, para lo cual se almacena los datos en una tabla y se envía con la clase BulkCopy de ADO.NET. Otra alternativa sería enviar una cadena separada por caracteres especiales y tener un Procedimiento Almacenado que las separe y las inserte o actualice en su tabla destino.
Comentarios
Esta cuarta regla también no se cumple por las siguientes razones:
Ø  La mayor parte de las consultas a todo tipo de datos, desde el sexo, estado civil, ubigeo, tipo de documentos comerciales, empleados, clientes, proveedores, etc.; se realizan en forma conectada, siendo para la mayor parte de casos innecesario ya que los datos no varían constantemente. Algunos guardan los datos en variables de Sesión en el Servidor Web, a veces en un TempData en MVC para no ir hasta la BD, pero otros, si van a consultar a la Base de Datos creando conexiones constantemente y saturando el ancho de banda de la red.
Ø  En el caso de las actualizaciones, la mayoría trabaja en forma individual, es decir, realiza los cambios en cada registro, en vez de hacerlo por lotes o para un grupo de registros consumiendo una sola conexión a la base de datos, sobre todo si es gran cantidad de registros que se quiere actualizar o insertar.

7.   Arquitectura de Desarrollo Web de Bajo Rendimiento (ADWBR)
Una Arquitectura de Desarrollo Web que produce un Bajo Rendimiento (Low Performance) es aquella que tiene las siguientes características:
·         Está Orientada al momento del Desarrollo o a facilitar la Construcción, por lo que usa intensivamente Librerías o Frameworks de terceros.
·         Se piensa que favorece al Desarrollador ya que al usar bloques de código pre-construido (Frameworks) el tiempo de desarrollo es menor que si se hace todo desde cero.
·         Cada página descarga muchos archivos en el cliente, porque usa muchas librerías de JavaScript, muchos archivos de CSS y muchas imágenes que se bajan de uno en uno o de dos en dos, dependiendo del navegador que se use.
·         Se descarga mucho contenido, por ejemplo todo el HTML con los datos a presentar, todas las funciones JavaScript se usen o no y todos los estilos se usen o no. Eso ocurre por usar Frameworks de terceros y no ser selectivo, hay cosas que no se usan pero todo viaja.
·         Usan llamadas asíncronas pesadas, ya que envían muchos datos de ida y de vuelta, algunos usan XML como formato de transporte y otros reducen el ancho de banda usando JSON, pero igual se puede mejorar mas.
·         Hacen operaciones No óptimas con Bases de Datos, ya que todo se hace en forma conectada usando Frameworks pesados como Entity Framework, cuando trabajan en forma desconectada usan DataSet y DataTables, y cuando actualizan gran cantidad de registros lo hacen en forma individual ejecutando muchos comandos.
Componentes de una Arquitectura de Desarrollo Web de Bajo Rendimiento

8.   Arquitectura de Desarrollo Web de Alto Rendimiento (ADWAR)
Una Arquitectura de Desarrollo Web que produce un Alto Rendimiento (High Performance) es aquella que tiene las siguientes características:
·         Está Orientada al momento del Despliegue o a facilitar la Ejecución, por lo que se hace todo desde cero y nativo.
·         Favorece al usuario final, ya que la aplicación web será muy rápida, pero también puede favorecer al desarrollador ya que no habrá problemas de soporte post producción.
·         Cada página descarga pocos archivos en el cliente, solo un HTML, un JavaScript, un CSS, y las Imágenes se envían en un solo Paquete o como un archivo Sprite.
·         Se descarga poco contenido, por ejemplo solo viaja los datos como cadenas sin HTML y por JavaScript se crea el HTML como cadena y se pinta una vez en el DOM, el archivo JavaScript solo tiene las funciones que se van a usar en la pagina, el archivo CSS solo los estilos usados por esa página y las Imágenes están optimizadas (comprimidas).
·         Usan llamadas asíncronas ligeras mediante XmlHttpRequest (XHR), enviando los datos como cadenas tanto en la ida como en la vuelta, esto permite ahorrar en más de 90% el ancho de banda logrando mayor velocidad.
·         Hacen operaciones óptimas con Bases de Datos, ya que se usa ADO.NET para el acceso a datos, las consultas se trabajan en forma desconectada con Listas de Objetos en el Servidor Web y en el Cliente con Matrices en JavaScript. Las actualizaciones se hacen por lotes y para gran cantidad de registros se usa BulkCopy o Cadenas en el Procedimiento Almacenado.
Componentes de una Arquitectura de Desarrollo Web de Alto Rendimiento

Comentario Final

Se que muchos no compartiran algunas ideas de este artículo, ya que esta muy arraigado los estándares de reusabilidad que son diferentes a los de performance que es lo que yo propongo, y el cual en los últimos meses me he encargado de difundir, Tengo una nueva arquitectura que estoy trabajando basada en la Performance.

Los interesados en conocer la parte práctica y la comparación de resultados entre la arquitectura tradicional y la arquitectura que propongo pueden asistir este Sabado 12 de Setiembre de 2:00 pm a 2:50 pm en el CEPS de la UNI, del cual dejo la relación de charlas: