El Libro del Día: 2016-01-11
Titulo: Learning JavaScript (3rd Edition)
Autor: Ethan Brown
Editorial: O'Reilly
Nro Paginas: 347
Capítulos:
1. Your First Application
2. JavaScript Development Tools
3. Literal, Variables, Constants, and DataTypes
4. Control Flow
5. Expressions and Operators
6. Functions
7. Scope
8. Arrays and Array Processor
9. Objects and Object Oriented Programming
10. Maps and Sets
11. Exceptions and Error Handling
12. Iterators and Generators
13. Functions, and the Power of Abstract Thinking
14. Asynchronous Programming
15. Date and Time
16. Math
17. Regular Expressions
18. JavaScript in the Browser
19. jQuery
20. Node
21. Object Property Configuration and Proxies
22. Additional Resources
A. Reserved Words
B. Operator Precedence
Descarga:
Learning_JavaScript
Blog de Luis Dueñas dedicado a la difusión del Desarrollo en Microsoft .NET, Visual Studio, WinForms, WebForms, MVC, ASP .NET, jQuery, AJAX, HTML5, JavaScript, Móviles, etc. Encontrarás Libros, Demos, Artículos Técnicos, Entrenamiento.
lunes, 11 de enero de 2016
El Libro del Día: Learning JavaScript
Etiquetas:
Arrays,
Asynchronous,
DataTypes,
Ethan Brown,
Exceptions,
Expressions,
Functions,
Iterators,
Javascript,
jQuery,
Learning,
Libros,
Maps,
Node,
O'Reilly,
OOP,
Operators,
Scope,
Sets,
Variables
viernes, 8 de enero de 2016
El Libro del Día: JavaScript Concurrency
El Libro del Día: 2016-01-08
Titulo: JavaScript Concurrency
Autor: Adam Boduch
Editorial: Packt
Nro Paginas: 293
Capítulos:
Chapter 1: Why JavaScript Concurrency
Chapter 2: The JavaScript Execution Model
Chapter 3: Synchronizing with Promises
Chapter 4: Lazy Evaluation with Generators
Chapter 5: Working with Workers
Chapter 6: Practical Parallelism
Chapter 7: Abstracting Concurrency
Chapter 8: Evented IO with NodeJS
Chapter 9: Advanced NodeJS Concurrency
Chapter 10: Building a Concurrent Application
Descarga:
JavaScript_Concurrency
Titulo: JavaScript Concurrency
Autor: Adam Boduch
Editorial: Packt
Nro Paginas: 293
Capítulos:
Chapter 1: Why JavaScript Concurrency
Chapter 2: The JavaScript Execution Model
Chapter 3: Synchronizing with Promises
Chapter 4: Lazy Evaluation with Generators
Chapter 5: Working with Workers
Chapter 6: Practical Parallelism
Chapter 7: Abstracting Concurrency
Chapter 8: Evented IO with NodeJS
Chapter 9: Advanced NodeJS Concurrency
Chapter 10: Building a Concurrent Application
Descarga:
JavaScript_Concurrency
Etiquetas:
Abstracting,
Adam Boduch,
Advanced,
Application,
Concurrency,
Evaluation,
Evented,
Execution,
Generators,
IO,
Javascript,
Lazy,
Libros,
Model,
NodeJS,
Packt,
Parallelism,
Promises,
Synchronizing,
Workers
miércoles, 6 de enero de 2016
Entrenamiento - Vacantes para el Curso de Desarrollo Web de los Domingos
Vacantes para el Curso de Desarrollo Web de los Domingos
Estimados alumnos, este Domingo 10 de Enero iniciamos el segundo mes del curso de Desarrollo Web Desconectado Total usando JavaScript, HTML5 y CSS3 (80% de código cliente y 20% código servidor aproximadamente).
Hay 10 nuevas vacantes para cubrir el total de la capacidad y los interesados solo deben un mail de confirmación a Luis.duenash@gmail.com con su Nombre Completo y si ha sido ex-alumno o no. El costo del curso es de 200 soles por 4 sesiones de 6 horas, es decir 24 horas.
El horario son los Domingos de 8:00 am a 2:00 pm y se realiza en el cono Norte, la dirección exacta será enviada por mail a los confirmados. Los interesados tener en cuenta el lugar y que no es curso tradicional, no se dará certificados, diplomas, recibos, etc.
Los que asisten a mis cursos y talleres saben que cada semana tenemos temas muy interesantes que tratamos que serán la base del desarrollo web moderno: desconectado total y nativo, dando énfasis a las APIs de JavaScript y creando código óptimo.
Muchos han estado preguntando sobre cursos y les he dicho que ya no dicto regularmente, excepto este curso de los Domingos, y los que alguna vez ya llevaron conmigo los temas son totalmente distintos, además hay mucha teoría sobre cómo funciona Internet, el Navegador, .NET Framework, etc.
Recuerden que solo se registrará a los 10 primeros y de preferencia a ex-alumnos. Aprovechen que el costo del curso es muy bajo comparado con lo que se cobra en la mayoría de centros de capacitación por no aprender nada que solucione los problemas de la computación.
Sea lo que sea que te enseñen: C#, LINQ, Entity Framework, CodeFirst, AngularJS, KnockoutJS, jQuery, AJAX, Ember.JS, etc. te darás cuenta que los problemas de lentitud seguirán, y si apuestas por el Hardware aumentando mas disco, CPU, memoria, etc, tampoco dará resultados.
La solución completa es la que vemos en estos talleres y muchos alumnos ya están poniendo en práctica esta nueva forma de programar que es rápida en desarrollo y mas rápida en ejecución. Los visitantes de mi Blog y de mi canal de YouTube tienen que tener en cuenta que la mayoría de los Demos y Videos no son posteados, solo está accesible para los que siguen el curso.
Saludos
Estimados alumnos, este Domingo 10 de Enero iniciamos el segundo mes del curso de Desarrollo Web Desconectado Total usando JavaScript, HTML5 y CSS3 (80% de código cliente y 20% código servidor aproximadamente).
Hay 10 nuevas vacantes para cubrir el total de la capacidad y los interesados solo deben un mail de confirmación a Luis.duenash@gmail.com con su Nombre Completo y si ha sido ex-alumno o no. El costo del curso es de 200 soles por 4 sesiones de 6 horas, es decir 24 horas.
El horario son los Domingos de 8:00 am a 2:00 pm y se realiza en el cono Norte, la dirección exacta será enviada por mail a los confirmados. Los interesados tener en cuenta el lugar y que no es curso tradicional, no se dará certificados, diplomas, recibos, etc.
Los que asisten a mis cursos y talleres saben que cada semana tenemos temas muy interesantes que tratamos que serán la base del desarrollo web moderno: desconectado total y nativo, dando énfasis a las APIs de JavaScript y creando código óptimo.
Muchos han estado preguntando sobre cursos y les he dicho que ya no dicto regularmente, excepto este curso de los Domingos, y los que alguna vez ya llevaron conmigo los temas son totalmente distintos, además hay mucha teoría sobre cómo funciona Internet, el Navegador, .NET Framework, etc.
Recuerden que solo se registrará a los 10 primeros y de preferencia a ex-alumnos. Aprovechen que el costo del curso es muy bajo comparado con lo que se cobra en la mayoría de centros de capacitación por no aprender nada que solucione los problemas de la computación.
Sea lo que sea que te enseñen: C#, LINQ, Entity Framework, CodeFirst, AngularJS, KnockoutJS, jQuery, AJAX, Ember.JS, etc. te darás cuenta que los problemas de lentitud seguirán, y si apuestas por el Hardware aumentando mas disco, CPU, memoria, etc, tampoco dará resultados.
La solución completa es la que vemos en estos talleres y muchos alumnos ya están poniendo en práctica esta nueva forma de programar que es rápida en desarrollo y mas rápida en ejecución. Los visitantes de mi Blog y de mi canal de YouTube tienen que tener en cuenta que la mayoría de los Demos y Videos no son posteados, solo está accesible para los que siguen el curso.
Saludos
Etiquetas:
ADO.NET,
AJAX,
AngularJS,
APIs,
ASP.NET,
C#,
CodeFirst,
CSS3,
Cursos,
Desconectado,
Ember,
Entrenamiento,
HTML5,
Javascript,
jQuery,
Knockout,
Lduenas,
LINQ,
MVC,
Web Forms
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.
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.
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
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.
Etiquetas:
Alemania,
Australia,
Brasil,
China,
Computación,
CSS,
HTML,
Java,
Javascript,
Lduenas,
Lenguajes de Programación,
México,
PHP,
Python,
Ranking,
Sistemas,
Software,
UK,
Universidades,
USA
martes, 22 de diciembre de 2015
El Demo del Día: Aplicación de Simple Página (SPA) en ASP.NET MVC
Aplicación de Simple Página (SPA) en ASP.NET MVC
Después de mucho tiempo vamos a presentar un nuevo Demo, esta vez comparando una Aplicación de Múltiples Páginas (MPA) con una Aplicación de Simple Página (SPA), pero sin usar ningún Framework SPA como AngularJS, Knockout, Ember, Meteor, Kendo UI, etc.
Introducción a una SPA
El modelo por defecto en ASP.NET sea WebForms o MVC es MPA, quiere decir que nuestro sitio web se compone de varias páginas las cuales se solicitan desde el cliente una a una y cada una descarga sus archivos necesarios: HTML, JavaScript, CSS, Imágenes, Fuentes, etc.
En cambio si nuestro sitio solo tuviera una simple página solo se cargaría una sola vez todos los archivos.
Ventajas de una SPA
La gran ventaja de una Aplicación de Simple Página (SPA) es que evita conectarse varias veces al servidor para solicitar cada página, es decir, favorece el trabajo desconectado, ya que al haber una sola página se pueda cargar todos los datos necesarios al inicio, así como los JavaScripts y las hojas de estilo.
Trabajar con una sola página ayuda a la Performance, ya que evita conexiones innecesarias al servidor web.
Usos de una SPA
Generalmente, los sitios web móviles usan este modelo, ya que solo se carga una página y se va presentando secciones (llamadas cartas o barajas) de ésta, muchos de los Frameworks para Aplicaciones Web Móviles trabajan de esta forma, por ejemplo jQuery Mobile, Bootstrap, etc.
Pero si nuestra Aplicación Web no tiene demasiadas páginas ni datos que cargar, también podemos usar este modelo, ahorrando conexiones al servidor, es decir, trabajando en forma desconectada.
Características de una SPA
Existen muchas características de una SPA:
- La principal es que la aplicación solo tenga una página.
- Aunque no es exclusividad de una SPA, actualmente el Diseño Web debe ser Adaptativo (Responsive Web Design).
- Otra característica importante (que también no es exclusividad de SPA) es que debe hacer llamadas Asíncronas JavaScript HTTP: AJAX (Xml), AJAJ (JSON) o AJAS (Strings).
Ejemplo de Comparación entre MPA y SPA en ASP.NET MVC
A continuación vamos a presentar un ejemplo donde comparamos una Aplicación sobre Pedidos que tiene los 2 modelos:
- MPA: Compuesto por un Controlador llamado MPA que tiene 4 métodos de acción y 4 vistas, llamadas Login, Categoria, Producto y Pedido. La navegación entre cada una implica ir al servidor y esperar su respuesta, para lo cual a propósito se ha puesto un tiempo de espera. Este modelo usa 4 archivos de JavaScript, uno para cada página.
- SPA: Compuesto por un Controlador llamado SPA que tiene solo un método de acción y una vista llamada Pedido. Por otra parte solo hay un archivo de JavaScript llamado Todo.js que realiza la navegación entre páginas (divs) y que no viaja al servidor sino solo se hace en el cliente.
Crear una Aplicación ASP.NET MVC 4 en C#
- Abrir Visual Studio 2012 y crear un proyecto de tipo "Aplicación web de ASP.NET MVC4" y asignarle como nombre: "SinglePageApplication".
- Seleccionar la opción "Vacio" y como motor de vista "Razor" y "Aceptar".
Crear el Controlador MPA
- Clic derecho a la carpeta Controllers y seleccionar "Agregar" y luego "Controlador".
- Ingresar como nombre "MPAController" y luego escribir el siguiente código:
using System;
using System.Web;
using System.Web.Mvc;
namespace SinglePageApplication.Controllers
{
public class MPAController : Controller
{
public ActionResult Login()
{
return View();
}
public ActionResult Categoria()
{
//Simular que esta conectandose a la BD para traer las Categorias
System.Threading.Thread.Sleep(2000);
return View();
}
public ActionResult Producto()
{
//Simular que esta conectandose a la BD para traer los Productos x Categoria
System.Threading.Thread.Sleep(4000);
return View();
}
public ActionResult Pedido()
{
//Simular que esta leyendo del TempData los Pedidos
System.Threading.Thread.Sleep(1000);
return View();
}
}
}
Crear una Hoja de Estilo para todas las vistas
- Crear una carpeta para los archivos CSS llamado: "Estilos".
- Crear una hoja de estilo llamada "ACME.css" dentro de la carpeta Estilos y escribir el siguiente código:
body {
background-color:aqua;
width:100%;
}
.Titulo {
background-color:blue;
color:white;
font-family:Arial;
font-size:xx-large;
text-align:center;
}
.Subtitulo {
background-color:white;
color:blue;
font-family:Arial;
font-size:x-large;
text-align:center;
}
table {
width:100%;
}
.FilaCabecera {
background-color:lightgray;
color:black;
}
.FilaDatos {
background-color:white;
color:black;
}
.Pagina {
display:none;
}
- Ir al controlador MPA, clic derecho sobre el nombre del método "Login" y crear una vista con el mismo nombre que tenga el siguiente código HTML:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Login</title>
<link href="~/Estilos/ACME.css" rel="stylesheet" />
</head>
<body>
<div id="divLogin">
<div id="divCabeceraLogin">
<div id="divTituloLogin" class="Titulo">
<span id="spnTitulo">Aplicación de Múltiples Paginas (MPA)</span>
</div>
<div id="divSubtituloLogin" class="Subtitulo">
<span id="spnSubtituloLogin">Login del Sistema</span>
</div>
</div>
<div id="divCuerpoLogin">
<div id="divEtiquetaUsuario">
<span id="spnUsuario">Usuario: </span>
</div>
<div id="divTextoUsuario">
<input id="txtUsuario" type="text" />
</div>
<div id="divEtiquetaClave">
<span id="spnClave">Clave: </span>
</div>
<div id="divTextoClave">
<input id="txtClave" type="password" />
</div>
<div id="divBotonesLogin">
<input id="btnAceptar" type="button" value="Aceptar" />
</div>
</div>
<div id="divPieLogin">
<div id="divUbicacion" class="Subtitulo">
<span id="spnUbicacion">Lima - Perú</span>
</div>
</div>
</div>
<script src="~/Scripts/Login.js"></script>
</body>
</html>
- Ir al controlador MPA, clic derecho sobre el nombre del método "Categoria" y crear una vista con el mismo nombre que tenga el siguiente código HTML:
- Crear una carpeta para los archivos js llamado: "Scripts"
- Crear una archivo de JavaScript llamado "Login.js" dentro de la carpeta Scripts y escribir el siguiente código:
window.onload = function () {
var btnAceptar = document.getElementById("btnAceptar");
btnAceptar.onclick = function () {
var txtUsuario = document.getElementById("txtUsuario");
if (txtUsuario.value == "") {
alert("Ingresa el Usuario");
txtUsuario.focus();
return false;
}
var txtClave = document.getElementById("txtClave");
if (txtClave.value == "") {
alert("Ingresa la Clave");
txtClave.focus();
return false;
}
if (txtUsuario.value == "Luis" && txtClave.value == "123") {
window.location.href = "MPA/Categoria";
}
else {
alert("Login invalido");
}
}
}
- Crear una archivo de JavaScript llamado "Categoria.js" dentro de la carpeta Scripts y escribir el siguiente código:
window.onload = function () {
alert("Cargando Categorias");
}
- Crear una archivo de JavaScript llamado "Producto.js" dentro de la carpeta Scripts y escribir el siguiente código:
window.onload = function () {
alert("Cargando Productos");
}
- Crear una archivo de JavaScript llamado "Pedido.js" dentro de la carpeta Scripts y escribir el siguiente código:
window.onload = function () {
alert("Cargando Pedidos");
}
Configurar el Inicio del MPA
- Ir a la carpeta "App_Start" y abrir el archivo "RouteConfig.css" y cambiar el nombre del controlador y la acción que inicia.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace SinglePageApplication
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "MPA", action = "Login", id = UrlParameter.Optional }
);
}
}
}
- Ir al controlador SPA, clic derecho sobre el nombre del método "Pedido" y crear una vista con el mismo nombre que tenga el siguiente código HTML:
- Crear una archivo de JavaScript llamado "Todo.js" dentro de la carpeta Scripts y escribir el siguiente código:
Después de mucho tiempo vamos a presentar un nuevo Demo, esta vez comparando una Aplicación de Múltiples Páginas (MPA) con una Aplicación de Simple Página (SPA), pero sin usar ningún Framework SPA como AngularJS, Knockout, Ember, Meteor, Kendo UI, etc.
Introducción a una SPA
El modelo por defecto en ASP.NET sea WebForms o MVC es MPA, quiere decir que nuestro sitio web se compone de varias páginas las cuales se solicitan desde el cliente una a una y cada una descarga sus archivos necesarios: HTML, JavaScript, CSS, Imágenes, Fuentes, etc.
En cambio si nuestro sitio solo tuviera una simple página solo se cargaría una sola vez todos los archivos.
Ventajas de una SPA
La gran ventaja de una Aplicación de Simple Página (SPA) es que evita conectarse varias veces al servidor para solicitar cada página, es decir, favorece el trabajo desconectado, ya que al haber una sola página se pueda cargar todos los datos necesarios al inicio, así como los JavaScripts y las hojas de estilo.
Trabajar con una sola página ayuda a la Performance, ya que evita conexiones innecesarias al servidor web.
Usos de una SPA
Generalmente, los sitios web móviles usan este modelo, ya que solo se carga una página y se va presentando secciones (llamadas cartas o barajas) de ésta, muchos de los Frameworks para Aplicaciones Web Móviles trabajan de esta forma, por ejemplo jQuery Mobile, Bootstrap, etc.
Pero si nuestra Aplicación Web no tiene demasiadas páginas ni datos que cargar, también podemos usar este modelo, ahorrando conexiones al servidor, es decir, trabajando en forma desconectada.
Características de una SPA
Existen muchas características de una SPA:
- La principal es que la aplicación solo tenga una página.
- Aunque no es exclusividad de una SPA, actualmente el Diseño Web debe ser Adaptativo (Responsive Web Design).
- Otra característica importante (que también no es exclusividad de SPA) es que debe hacer llamadas Asíncronas JavaScript HTTP: AJAX (Xml), AJAJ (JSON) o AJAS (Strings).
Ejemplo de Comparación entre MPA y SPA en ASP.NET MVC
A continuación vamos a presentar un ejemplo donde comparamos una Aplicación sobre Pedidos que tiene los 2 modelos:
- MPA: Compuesto por un Controlador llamado MPA que tiene 4 métodos de acción y 4 vistas, llamadas Login, Categoria, Producto y Pedido. La navegación entre cada una implica ir al servidor y esperar su respuesta, para lo cual a propósito se ha puesto un tiempo de espera. Este modelo usa 4 archivos de JavaScript, uno para cada página.
- SPA: Compuesto por un Controlador llamado SPA que tiene solo un método de acción y una vista llamada Pedido. Por otra parte solo hay un archivo de JavaScript llamado Todo.js que realiza la navegación entre páginas (divs) y que no viaja al servidor sino solo se hace en el cliente.
Crear una Aplicación ASP.NET MVC 4 en C#
- Abrir Visual Studio 2012 y crear un proyecto de tipo "Aplicación web de ASP.NET MVC4" y asignarle como nombre: "SinglePageApplication".
- Seleccionar la opción "Vacio" y como motor de vista "Razor" y "Aceptar".
Crear el Controlador MPA
- Clic derecho a la carpeta Controllers y seleccionar "Agregar" y luego "Controlador".
- Ingresar como nombre "MPAController" y luego escribir el siguiente código:
using System;
using System.Web;
using System.Web.Mvc;
namespace SinglePageApplication.Controllers
{
public class MPAController : Controller
{
public ActionResult Login()
{
return View();
}
public ActionResult Categoria()
{
//Simular que esta conectandose a la BD para traer las Categorias
System.Threading.Thread.Sleep(2000);
return View();
}
public ActionResult Producto()
{
//Simular que esta conectandose a la BD para traer los Productos x Categoria
System.Threading.Thread.Sleep(4000);
return View();
}
public ActionResult Pedido()
{
//Simular que esta leyendo del TempData los Pedidos
System.Threading.Thread.Sleep(1000);
return View();
}
}
}
Crear una Hoja de Estilo para todas las vistas
- Crear una carpeta para los archivos CSS llamado: "Estilos".
- Crear una hoja de estilo llamada "ACME.css" dentro de la carpeta Estilos y escribir el siguiente código:
body {
background-color:aqua;
width:100%;
}
.Titulo {
background-color:blue;
color:white;
font-family:Arial;
font-size:xx-large;
text-align:center;
}
.Subtitulo {
background-color:white;
color:blue;
font-family:Arial;
font-size:x-large;
text-align:center;
}
table {
width:100%;
}
.FilaCabecera {
background-color:lightgray;
color:black;
}
.FilaDatos {
background-color:white;
color:black;
}
.Pagina {
display:none;
}
Crear las Vistas para MPA
- Ir al controlador MPA, clic derecho sobre el nombre del método "Login" y crear una vista con el mismo nombre que tenga el siguiente código HTML:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Login</title>
<link href="~/Estilos/ACME.css" rel="stylesheet" />
</head>
<body>
<div id="divLogin">
<div id="divCabeceraLogin">
<div id="divTituloLogin" class="Titulo">
<span id="spnTitulo">Aplicación de Múltiples Paginas (MPA)</span>
</div>
<div id="divSubtituloLogin" class="Subtitulo">
<span id="spnSubtituloLogin">Login del Sistema</span>
</div>
</div>
<div id="divCuerpoLogin">
<div id="divEtiquetaUsuario">
<span id="spnUsuario">Usuario: </span>
</div>
<div id="divTextoUsuario">
<input id="txtUsuario" type="text" />
</div>
<div id="divEtiquetaClave">
<span id="spnClave">Clave: </span>
</div>
<div id="divTextoClave">
<input id="txtClave" type="password" />
</div>
<div id="divBotonesLogin">
<input id="btnAceptar" type="button" value="Aceptar" />
</div>
</div>
<div id="divPieLogin">
<div id="divUbicacion" class="Subtitulo">
<span id="spnUbicacion">Lima - Perú</span>
</div>
</div>
</div>
<script src="~/Scripts/Login.js"></script>
</body>
</html>
- Ir al controlador MPA, clic derecho sobre el nombre del método "Categoria" y crear una vista con el mismo nombre que tenga el siguiente código HTML:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Categoria</title>
<link href="~/Estilos/ACME.css" rel="stylesheet" />
</head>
<body>
<div id="divCategoria">
<div id="divCabeceraCategoria">
<div id="divSubtituloCategoria" class="Subtitulo">
<span id="spnSubtituloCategoria">Selecciona una Categoria</span>
</div>
</div>
<div id="divListaCategoria">
<span id="spnListaCategoria">Aqui se debe mostrar un lista de Categorias</span>
</div>
<div id="divPieCategoria">
<div id="divNavegarCategoria" class="Subtitulo">
<a id="aCatProd" href="~/MPA/Producto">Productos</a>
</div>
</div>
</div>
<script src="~/Scripts/Categoria.js"></script>
</body>
</html>
- Ir al controlador MPA, clic derecho sobre el nombre del método "Producto" y crear una vista con el mismo nombre que tenga el siguiente código HTML:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Producto</title>
<link href="~/Estilos/ACME.css" rel="stylesheet" />
</head>
<body>
<div id="divProducto">
<div id="divCabeceraProducto">
<div id="divSubtituloProducto" class="Subtitulo">
<span id="spnSubtituloProducto">Agrega Productos a tu Pedido</span>
</div>
</div>
<div id="divListaProducto">
<span id="spnListaProducto">Aqui se debe mostrar un lista de Productos</span>
</div>
<div id="divPieProducto">
<div id="divNavegarProducto" class="Subtitulo">
<a id="aProdPed" href="~/MPA/Pedido">Pedidos</a>
<a id="aProdCat" href="~/MPA/Categoria">Regresar</a>
</div>
</div>
</div>
<script src="~/Scripts/Producto.js"></script>
</body>
</html>
- Ir al controlador MPA, clic derecho sobre el nombre del método "Pedido" y crear una vista con el mismo nombre que tenga el siguiente código HTML:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Pedido</title>
<link href="~/Estilos/ACME.css" rel="stylesheet" />
</head>
<body>
<div id="divPedido">
<div id="divCabeceraPedido">
<div id="divSubtituloPedido" class="Subtitulo">
<span id="spnSubtituloPedido">Agrega Productos a tu Pedido</span>
</div>
</div>
<div id="divListaPedido">
<span id="spnListaPedido">Aqui se debe mostrar un lista de Pedidos</span>
</div>
<div id="divPiePedido">
<div id="divNavegarPedido" class="Subtitulo">
<a id="aPedCat" href="~/MPA/Categoria">Regresar</a>
</div>
</div>
</div>
<script src="~/Scripts/Pedido.js"></script>
</body>
</html>
Crear los JavaSripts para MPA
- Crear una carpeta para los archivos js llamado: "Scripts"
- Crear una archivo de JavaScript llamado "Login.js" dentro de la carpeta Scripts y escribir el siguiente código:
window.onload = function () {
var btnAceptar = document.getElementById("btnAceptar");
btnAceptar.onclick = function () {
var txtUsuario = document.getElementById("txtUsuario");
if (txtUsuario.value == "") {
alert("Ingresa el Usuario");
txtUsuario.focus();
return false;
}
var txtClave = document.getElementById("txtClave");
if (txtClave.value == "") {
alert("Ingresa la Clave");
txtClave.focus();
return false;
}
if (txtUsuario.value == "Luis" && txtClave.value == "123") {
window.location.href = "MPA/Categoria";
}
else {
alert("Login invalido");
}
}
}
- Crear una archivo de JavaScript llamado "Categoria.js" dentro de la carpeta Scripts y escribir el siguiente código:
alert("Cargando Categorias");
}
- Crear una archivo de JavaScript llamado "Producto.js" dentro de la carpeta Scripts y escribir el siguiente código:
window.onload = function () {
alert("Cargando Productos");
}
- Crear una archivo de JavaScript llamado "Pedido.js" dentro de la carpeta Scripts y escribir el siguiente código:
window.onload = function () {
alert("Cargando Pedidos");
}
Configurar el Inicio del MPA
- Ir a la carpeta "App_Start" y abrir el archivo "RouteConfig.css" y cambiar el nombre del controlador y la acción que inicia.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace SinglePageApplication
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "MPA", action = "Login", id = UrlParameter.Optional }
);
}
}
}
Probar y Ejecutar la Aplicación de Múltiples Páginas (MPA)
- Grabar y ejecutar la aplicación pulsando F5 y se mostrará una ventana similar a la siguiente figura:
- Ingresar como usuario "Luis" y como clave "123" y "Aceptar", observando que se demora en cargar la segunda página de Categoria, similar a la siguiente figura:
- Clic al enlace de Productos y después de esperar un momento se mostrará la página de Producto, similar a la siguiente figura:
- Clic al enlace de Pedidos y después de esperar un momento se mostrará la página de Pedido, similar a la siguiente figura:
- Si deseas en cualquier página puedes seleccionar el enlace "Regresar".
Nota: En todos los enlaces al dar clic se irá al servidor para cargar la página ya que el modelo es MPA.
Crear el Controlador SPA
- Clic derecho a la carpeta Controllers y seleccionar "Agregar" y luego "Controlador".
- Ingresar como nombre "SPAController" y luego escribir el siguiente código:
- Clic derecho a la carpeta Controllers y seleccionar "Agregar" y luego "Controlador".
- Ingresar como nombre "SPAController" y luego escribir el siguiente código:
using System;
using System.Web;
using System.Web.Mvc;
namespace SinglePageApplication.Controllers
{
public class SPAController : Controller
{
public ActionResult Pedido()
{
return View();
}
}
}
Crear la Vista para SPA
- Ir al controlador SPA, clic derecho sobre el nombre del método "Pedido" y crear una vista con el mismo nombre que tenga el siguiente código HTML:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Pedido</title>
<link href="~/Estilos/ACME.css" rel="stylesheet" />
</head>
<body>
<div id="divTodo">
<div id="divLogin" class="Pagina">
<div id="divCabeceraLogin">
<div id="divTituloLogin" class="Titulo">
<span id="spnTitulo">Aplicación de Simple Pagina (SPA)</span>
</div>
<div id="divSubtituloLogin" class="Subtitulo">
<span id="spnSubtituloLogin">Login del Sistema</span>
</div>
</div>
<div id="divCuerpoLogin">
<div id="divEtiquetaUsuario">
<span id="spnUsuario">Usuario: </span>
</div>
<div id="divTextoUsuario">
<input id="txtUsuario" type="text" />
</div>
<div id="divEtiquetaClave">
<span id="spnClave">Clave: </span>
</div>
<div id="divTextoClave">
<input id="txtClave" type="password" />
</div>
<div id="divBotonesLogin">
<input id="btnAceptar" type="button" value="Aceptar" />
</div>
</div>
<div id="divPieLogin">
<div id="divUbicacion" class="Subtitulo">
<span id="spnUbicacion">Lima - Perú</span>
</div>
</div>
</div>
<div id="divCategoria" class="Pagina">
<div id="divCabeceraCategoria">
<div id="divSubtituloCategoria" class="Subtitulo">
<span id="spnSubtituloCategoria">Selecciona una Categoria</span>
</div>
</div>
<div id="divListaCategoria">
<span id="spnListaCategoria">Aqui se debe mostrar un lista de Categorias</span>
</div>
<div id="divPieCategoria">
<div id="divNavegarCategoria" class="Subtitulo">
<a id="aCatProd" href="#" data-url="divProducto">Productos</a>
</div>
</div>
</div>
<div id="divProducto" class="Pagina">
<div id="divCabeceraProducto">
<div id="divSubtituloProducto" class="Subtitulo">
<span id="spnSubtituloProducto">Agrega Productos a tu Pedido</span>
</div>
</div>
<div id="divListaProducto">
<span id="spnListaProducto">Aqui se debe mostrar un lista de Productos</span>
</div>
<div id="divPieProducto">
<div id="divNavegarProducto" class="Subtitulo">
<a id="aProdPed" href="#" data-url="divPedido">Pedidos</a>
<a id="aProdCat" href="#" data-url="divCategoria">Regresar</a>
</div>
</div>
</div>
<div id="divPedido" class="Pagina">
<div id="divCabeceraPedido">
<div id="divSubtituloPedido" class="Subtitulo">
<span id="spnSubtituloPedido">Agrega Productos a tu Pedido</span>
</div>
</div>
<div id="divListaPedido">
<span id="spnListaPedido">Aqui se debe mostrar un lista de Pedidos</span>
</div>
<div id="divPiePedido">
<div id="divNavegarPedido" class="Subtitulo">
<a id="aPedCat" href="#" data-url="divCategoria">Regresar</a>
</div>
</div>
</div>
</div>
<script src="~/Scripts/Todo.js"></script>
</body>
</html>
Crear el JavaSript para SPA
- Crear una archivo de JavaScript llamado "Todo.js" dentro de la carpeta Scripts y escribir el siguiente código:
window.onload = function () {
//Mostrar la primera pagina
var divLogin = document.getElementById("divLogin");
if (divLogin) {
divLogin.style.display = "inline";
scriptLogin();
}
//Programar toda la navegación
var enlaces = document.getElementsByTagName("a");
if (enlaces != null && enlaces.length > 0) {
var n = enlaces.length;
var enlace;
var pagina;
var script;
for (var i = 0; i < n; i++) {
enlace = enlaces[i];
enlace.onclick = function () {
ocultarPaginas();
var id = this.getAttribute("data-url");
pagina = document.getElementById(id);
if (pagina != null) {
pagina.style.display = "inline";
script = id.replace("div", "script");
window[script]();
}
}
}
}
}
function ocultarPaginas() {
var paginas = document.getElementsByClassName("Pagina");
if (paginas != null && paginas.length > 0) {
var n = paginas.length;
var pagina;
for (var i = 0; i < n; i++) {
pagina = paginas[i];
pagina.style.display = "none";
}
}
}
function scriptLogin() {
var btnAceptar = document.getElementById("btnAceptar");
btnAceptar.onclick = function () {
var txtUsuario = document.getElementById("txtUsuario");
if (txtUsuario.value == "") {
alert("Ingresa el Usuario");
txtUsuario.focus();
return false;
}
var txtClave = document.getElementById("txtClave");
if (txtClave.value == "") {
alert("Ingresa la Clave");
txtClave.focus();
return false;
}
if (txtUsuario.value == "Luis" && txtClave.value == "123") {
var divCategoria = document.getElementById("divCategoria");
if (divCategoria) {
ocultarPaginas();
divCategoria.style.display = "inline";
scriptCategoria();
}
}
else {
alert("Login invalido");
}
}
}
function scriptCategoria() {
alert("Cargando Categorias");
}
function scriptProducto() {
alert("Cargando Productos");
}
function scriptPedido() {
alert("Cargando Pedidos");
}
Nota: En el evento load de la ventana se muestra solo el primer div (Login) y el resto esta oculto por el estilo de la clase Pagina. Además se obtiene todos los enlaces y se programa para que se navegue al div que especifique el atributo "data-url" ejecutando su script asociado que debe tener el prefijo script seguido del nombre usando: window[script]().
Configurar el Inicio del SPA
- Ir a la carpeta "App_Start" y abrir el archivo "RouteConfig.css" y cambiar el nombre del controlador y la acción que inicia.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace SinglePageApplication
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "SPA", action = "Pedido", id = UrlParameter.Optional }
);
}
}
}
- Ir a la carpeta "App_Start" y abrir el archivo "RouteConfig.css" y cambiar el nombre del controlador y la acción que inicia.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace SinglePageApplication
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "SPA", action = "Pedido", id = UrlParameter.Optional }
);
}
}
}
Probar y Ejecutar la Aplicación de Simple Página (SPA)
- Grabar y ejecutar la aplicación pulsando F5 y se mostrará una ventana similar a la siguiente figura:
- Ingresar como usuario "Luis" y como clave "123" y "Aceptar", observando que no se demora en cargar nada la segunda página de Categoria ya que es un div, similar a la siguiente figura:
- Clic al enlace de Productos e inmediatamente se mostrará la página de Producto ya que es un div, similar a la siguiente figura:
- Clic al enlace de Pedidos y e inmediatamente se mostrará la página de Pedido que también es un div, similar a la siguiente figura:
- Si deseas en cualquier página puedes seleccionar el enlace "Regresar"y navegará a la sección especificada.
Nota: En todos los enlaces al dar clic se ocultarán todos los divs y se mostrará uno solo ya que el modelo es SPA, es decir, no se va al servidor sino solo se muestra en el cliente.
Comentario Final
En este post un poco largo hemos querido mostrar como se puede crear sin ningún Framework de JavaScript una Aplicación de Simple Pagina (SPA) tan solo usando divs y un poco de JavaScript, lo cual es muy útil para trabajar en forma desconectada en aplicaciones pequeñas, por ejemplo, las aplicaciones web móviles.
Las personas que desean crear una SPA en MVC usando Frameworks, encontrarán muchos Blogs y Sitios Web, ya que para esto existe mucha información, tanto oficial como no oficial, por ejemplo les alcanzo un enlace del MSDN:
ASP.NET MVC 5: A .NET Developer Primer for SPA
Finalmente, como siempre hemos querido demostrar como hacerlo nosotros mismos sin necesidad de descargar nada, ni en el servidor ni en el cliente, ya que esto aumenta el tamaño de la aplicación perjudicando el ancho de banda, es decir, la performance.
Descarga del Código
SinglePageApplication
Comentario Final
En este post un poco largo hemos querido mostrar como se puede crear sin ningún Framework de JavaScript una Aplicación de Simple Pagina (SPA) tan solo usando divs y un poco de JavaScript, lo cual es muy útil para trabajar en forma desconectada en aplicaciones pequeñas, por ejemplo, las aplicaciones web móviles.
Las personas que desean crear una SPA en MVC usando Frameworks, encontrarán muchos Blogs y Sitios Web, ya que para esto existe mucha información, tanto oficial como no oficial, por ejemplo les alcanzo un enlace del MSDN:
ASP.NET MVC 5: A .NET Developer Primer for SPA
Finalmente, como siempre hemos querido demostrar como hacerlo nosotros mismos sin necesidad de descargar nada, ni en el servidor ni en el cliente, ya que esto aumenta el tamaño de la aplicación perjudicando el ancho de banda, es decir, la performance.
Descarga del Código
SinglePageApplication
jueves, 17 de diciembre de 2015
El Libro del Día: Beginning Oracle Database 12c Administration
El Libro del Día: 2015-12-17
Titulo: Beginning Oracle Database 12c Administration
Autor: Ignatius Fernandez
Editorial: Apress
Nro Paginas: 370
Capítulos:
Part I: Database Concepts
Chapter 1: Relational Database Management Systems
Chapter 2: SQL and PL/SQL by Example
Chapter 3: Oracle Architecture
Part II: Database Implementation
Chapter 4: Planning
Part III: Database Support
Chapter 9: Taking Control
Chapter 10: Monitoring
Chapter 11: Fixing Problems
Chapter 12: Backups
Chapter 13: Recovery
Chapter 14: Database Maintenance
Chapter 15: The Big Picture and the Ten Deliverables
Part IV: Database Tuning
Chapter 16: Database Tuning
Chapter 17: SQL Tuning
Descarga:
Beginning_Oracle_Database_12c_Administration
Titulo: Beginning Oracle Database 12c Administration
Autor: Ignatius Fernandez
Editorial: Apress
Nro Paginas: 370
Capítulos:
Part I: Database Concepts
Chapter 1: Relational Database Management Systems
Chapter 2: SQL and PL/SQL by Example
Chapter 3: Oracle Architecture
Part II: Database Implementation
Chapter 4: Planning
Part III: Database Support
Chapter 9: Taking Control
Chapter 10: Monitoring
Chapter 11: Fixing Problems
Chapter 12: Backups
Chapter 13: Recovery
Chapter 14: Database Maintenance
Chapter 15: The Big Picture and the Ten Deliverables
Part IV: Database Tuning
Chapter 16: Database Tuning
Chapter 17: SQL Tuning
Descarga:
Beginning_Oracle_Database_12c_Administration
Etiquetas:
Administration,
Apress,
Architecture,
Backups,
Beginning,
Concepts,
Ignatius Fernandez,
Implementation,
Libros,
Maintenance,
Monitoring,
Oracle Database,
PL/SQL,
Planning,
Recovery,
Relational,
SQL,
Support,
Tuning
martes, 15 de diciembre de 2015
El Libro del Día: Introducing SQL Server
El Libro del Día: 2015-12-15
Titulo: Introducing SQL Server
Autor: Mike McQuillan
Editorial: Apress
Nro Paginas: 397
Capítulos:
Chapter 1: What Is SQL Server
Chapter 2: Obtaining and Installing SQL Server
Chapter 3: Database Basics
Chapter 4: Tables
Chapter 5: Putting Good Tables Together
Chapter 6: Automating Deployment with SQLCMD
Chapter 7: NULLs and Table Constraints
Chapter 8: DML (or Inserts, Updates, and Deletes)
Chapter 9: Bulk Inserting Data
Chapter 10: Creating Data Import Scripts
Chapter 11: The SELECT Statement
Chapter 12: Joining Tables
Chapter 13: Views
Chapter 14: Indexes
Chapter 15: Transactions
Chapter 16: Functions
Chapter 17: Table-Valued Functions
Chapter 18: Stored Procedures Part 1
Chapter 19: Stored Procedures Part 2
Chapter 20: Bits and Pieces
Appendix A: SQL Data Types
Appendix B: Glossary
Appendix C: Common SQL Server System Objects
Appendix D: Exercises
Descarga:
Introducing_SQL_Server
Titulo: Introducing SQL Server
Autor: Mike McQuillan
Editorial: Apress
Nro Paginas: 397
Capítulos:
Chapter 1: What Is SQL Server
Chapter 2: Obtaining and Installing SQL Server
Chapter 3: Database Basics
Chapter 4: Tables
Chapter 5: Putting Good Tables Together
Chapter 6: Automating Deployment with SQLCMD
Chapter 7: NULLs and Table Constraints
Chapter 8: DML (or Inserts, Updates, and Deletes)
Chapter 9: Bulk Inserting Data
Chapter 10: Creating Data Import Scripts
Chapter 11: The SELECT Statement
Chapter 12: Joining Tables
Chapter 13: Views
Chapter 14: Indexes
Chapter 15: Transactions
Chapter 16: Functions
Chapter 17: Table-Valued Functions
Chapter 18: Stored Procedures Part 1
Chapter 19: Stored Procedures Part 2
Chapter 20: Bits and Pieces
Appendix A: SQL Data Types
Appendix B: Glossary
Appendix C: Common SQL Server System Objects
Appendix D: Exercises
Descarga:
Introducing_SQL_Server
Etiquetas:
Apress,
Bulk Inserting,
Constraints,
Data Types,
Deployment,
DML,
Functions,
Indexes,
Installing,
Introducing,
Joining,
Libros,
Mike McQuillan,
Scripts,
SQL Server,
SQLCMD,
Stored Procedures,
Tables,
Transactions,
Views
Suscribirse a:
Entradas (Atom)











