viernes, 23 de enero de 2015

El Libro del Día: Web Programming with Dart

El Libro del Día: 2015-01-23

Titulo: Web Programming with Dart
Autor: Moises Belchin, Patricia Juberias
Editorial: Apress
Nro Paginas: 446

Capítulos:
Chapter 1: Dart’s Flightpath So Far
Part I: Getting Started
Chapter 2: Setting up Dart Correctly
Part II: Dart Tools
Chapter 3: Making the Most of the Dart Editor
Chapter 4: Using Pub and dart2js to Compile Applications to JavaScript
Chapter 5: Application Launches
Chapter 6: Using the Dart Pub Package Manager
Chapter 7: Optimizing for Dart VM and Dartium
Chapter 8: Cleaning up with Dart Formatter
Chapter 9: Generating Dart Code Documentation
Chapter 10: Monitoring Your Applications with Observatory
Part III: The Dart Language: Basics
Chapter 11: The Dart Comment System
Chapter 12: Understanding Operators and Expressions
Chapter 13: Mastering Dart’s Variables and Data Types
Chapter 14: Flow Control Statements
Chapter 15: Working with Functions
Chapter 16: A Syntax Summary and Cheat Sheet
Part IV: The Dart Language: Advanced
Chapter 17: Processing Exceptions and Error Control
Chapter 18: Understanding Dart Classes
Chapter 19: Implicit Interfaces and Abstract Classes
Chapter 20: Implementing Generics and Typedefs
Chapter 21: Using Dart’s Libraries
Chapter 22: Leveraging Isolates for Concurrency and Multi-Processing
Chapter 23: Asynchronous Programming with Dart
Chapter 24: An Advanced Syntax Summary
Part V: Dart and Other Web Technologies
Chapter 25: Integrating Dart and HTML5
Chapter 26: Integrating Dart and CSS
Part VI: Dart and the Web Server
Chapter 27: Combining Web Services with Dart
Chapter 28: Dart on the Server Side
Part VII: Dart’s Future
Chapter 29: Implementing Design Patterns and Creating Web Components
Chapter 30: Developing a Dart App

Descarga:
Web_Programming_with_Dart

jueves, 22 de enero de 2015

El Libro del Día: Web Standards

El Libro del Día: 2015-01-22

Titulo: Web Standards
Autor: Leslie F. Sikos
Editorial: Apress
Nro Paginas: 510

Capítulos:
Part 1: Web Standards
Chapter 1: Introduction to Web Standards
Chapter 2: Internationalization
Chapter 3: Markup Languages: More Than HTML5
Chapter 4: Serving and Configuration
Chapter 5: Style Sheets
Chapter 6: Scripting and Applications
Chapter 7: Metadata and the Semantic Web
Chapter 8: Web Syndication
Chapter 9: Optimized Appearance
Chapter 10: Accessibility
Part 2: Developing with Standards
Chapter 11: Development Tools
Chapter 12: Putting It All Together
Chapter 13: Best Practices
Chapter 14: Validation
Chapter 15: Most Common Errors

Descarga:
Web_Standards

miércoles, 21 de enero de 2015

Entrenamiento - Cuarto Seminario de .NET (Creación de Controles en ASP.NET)

Cuarto Seminario de .NET: Creación de Librerías de Controles en ASP.NET

Un saludo cordial a todos los visitantes del Blog y anunciar que este Miércoles 28 de Enero tendremos el cuarto y último seminario de .NET, que en esta ocasión tratará sobre como crear Librerías de Controles en ASP.NET, tanto en WebForms como en MVC.

Muchos desarrolladores de WebForms solo crean Controles de Usuario (User Controls) que solo son reusables dentro de una aplicación web, pero si lo quieren usar en otras aplicaciones tienen que copiar el código fuente y eso no es reusabilidad, lo correcto es crear su Librería de Controles Web que contengan clases WebControls o CompositeControls.

Lo mismo sucede en MVC, si queremos trabajar con grillas, gráficos, reportes, Microsoft solo ofrece los controles HTML Helpers que son limitados, por lo cual, muchos programadores recurren a librerías de terceros como jQueryUI, KendoUI, Infragistics, DevExpress, etc. También veremos como podemos aumentar controles a los HTML Helpers de MVC.

Les dejo la propaganda a los interesados:



También publico una foto de la tercera charla sobre Reflection y Creación de Controles WinForms.



No se olviden confirmar su asistencia mediante un mail a Luis.duenash@gmail.com e informes@hte.com.pe.

Los dejo con una frase para que reflexionen: "La grandeza de un país se ve por la cantidad de gente culta que en el habita". Si queremos ser un país desarrollado o del primer mundo, necesitamos invertir mas tiempo en nuestra profesión y cultura; no solo hay que ir a trabajar y cumplir con lo que uno puede, sino, hay que hacer el mejor trabajo (como nadie lo haría) y para eso hay que invertir en nuestro conocimiento.

El Libro del Día: Realtime Web Apps

El Libro del Día: 2015-01-21

Titulo: Realtime Web Apps
Autor: Jason Lengstorf, Phil Leggetter
Editorial: Apress
Nro Paginas: 299

Capítulos:
Part I: Getting Familiar with the Required Technologies
Chapter 1: What Is Realtime
Chapter 2: The Tools
Chapter 3: Pusher
Part II: Planning the App
Chapter 4: Choosing Web Apps Over Native Apps
Chapter 5: Determining the App’s Functionality and Structure
Part III: Building the Basics
Chapter 6: Designing the App
Chapter 7: Creating HTML and CSS Markup
Chapter 8: Building the Back End: Part 1
Chapter 9: Building the Back-End: Part 2
Chapter 10: Implementing Realtime Events and jQuery Effects
Appendix A: OAuth

Descarga:
Realtime_Web_Apps

martes, 20 de enero de 2015

El Demo del Día: TreeView con CheckBox en ASP.NET MVC

TreeView con CheckBox en ASP.NET MVC

Introducción a ASP.NET MVC

El Modelo Vista Controlador es un Modelo o Patrón de Arquitectura de Desarrollo de Software que permite la separación de la lógica en 3 componentes:
- El Modelo: Contiene la lógica del dominio, como las entidades del negocio.
- La Vista: Representa la interface de usuario de la aplicación, por ejemplo las páginas y controles.
- El Controlador: Controla la interacción del usuario con la vista y la asocia a un modelo.

ASP.NET MVC es la implementación de Microsoft de este modelo o patrón como alternativa a los WebForms de ASP.NET, el cual presenta las siguientes ventajas:
- Facilita la administración de la complejidad al separar la lógica en 3 componentes.
- Reduce el HTML enviado al cliente al no usar el estado de vista (ViewState)
- Proporciona una mayor compatibilidad con el desarrollo basado en pruebas (TDD), etc.

A partir de ASP.NET MVC 3 podemos elegir crear las vistas usando 2 motores:
- WebForm: Es el mismo que se usa para crear los Sitios ASP.NET con WebForms, es decir para el código incrustado del servidor se usa: <%= %>, <%: %> o <%# %>.
- Razor: Es un nuevo motor creado especialmente para aplicaciones MVC y usa código incrustado del servidor mediante @.
Nota: Se recomienda usar Razor como motor de vista predeterminado, ya que su sintaxis es mas corta y maneja mejor el tema de codificación y de-codificación.

Para los que recién inician con ASP.NET MVC el inconveniente principal aparte de acostumbrarse al nuevo modelo, es la falta de variedad de controles para crear las vistas, ya que los controles que ofrece Microsoft son los Helpers (no son muchos) que se clasifican en 3:
- HTML Helpers: Form, Label, TextBox, CheckBox, ListBox, DropDownList, ActionLink, etc.
- AJAX Helpers: Form, ActionLink, RouteLink y Script.
- URL Helpers: Action, Content, Encode, HttpRouteUrl.

Quizás los controles que mas extrañen los programadores es los enlazados a datos como GridView, DataList, Repeater, ListView, TreeView, Chart, etc. Aunque si bien es cierto no vienen como Helpers se pueden implementar en forma personalizada, por ejemplo en este primer post de MVC trataremos sobre como crear un TreeView con CheckBox.

Requerimiento

Se desea mostrar una lista de empleados en forma jerárquica de acuerdo a su cargo, para lo cual cada empleado tiene un único jefe. La aplicación debe permitir seleccionar un empleado y automáticamente deberá seleccionarse todos sus dependientes.
Nota: La aplicación debe ser Web y estar en ASP.NET MVC4.

Solución

Para cubrir estos requerimientos se creará un TreeView con CheckBox para lo cual se realizará lo siguiente:
- El el Modelo se creará una Entidad llamada "beEmpleado".
- En el Controlador se creará un método "obtenerEmpleados" que llene una lista con los empleados.
- En el Controlador se creará un método de acción llamado "Lista" que devuelva una vista (ViewResult).
- En el Controlador se creará un método de acción llamado "Listar" que devuelva la lista en formato JSON (JsonResult).
- Desde la Vista "Lista", al cargar la página usando jQuery Ajax se llamará al método "Listar" que devuelve los datos como JavaScript Object Notation (JSON).
- Mediante JavaScript mostraremos los datos en una Tabla
- Mediante jQuery mostraremos los datos en un div creando una lista con viñetas (ul - li) conteniendo CheckBoxs.
- Usando jQuery se programará la selección jerárquica, es decir al marcar o desmarcar un empleado, debe expandirse a todos sus subordinados.
- Usando jQuery se programará el expandir o colapsar un nodo (empleado) del TreeView.

Crear una Aplicación Web de ASP.NET MVC4 en C#

Abrir el Visual Studio 2012 y seleccionar un nuevo proyecto de tipo: "Aplicación web de ASP.NET MVC4", tal como se muestra en la siguiente figura:


Se mostrará una ventana para seleccionar la plantilla de proyecto, similar a la mostrada en la siguiente figura:


Seleccionar la opción "Vacio" y como motor de vista "Razor" y "Aceptar". En la ventana del Explorador de Soluciones se verá la siguiente estructura de carpetas:


Nota: Apreciar como viene predefinida las carpetas para los Controladores, los Modelos y las Vistas.
Además viene una carpeta App_Start para configurar los inicios de la aplicación.

Crear un Modelo con la Entidad del Empleado

Clic derecho a la carpeta Models y seleccionar "Agregar" y luego "Clase", llamarle al archivo "beEmpleado.cs" y escribir el siguiente código:

namespace TreeView_CheckBox.Models
{
    public class beEmpleado
    {
        public int IdEmpleado { get; set; }
        public string Nombres { get; set; }
        public int IdJefe { get; set; }
    }
}

Crear un Controlador para el Empleado

Clic derecho a la carpeta Controllers y seleccionar "Agregar" y luego "Controlador" y se mostrará una ventana similar a la siguiente figura:


Llamarle al archivo "EmpleadoController.cs" y en opciones de plantillas dejarlo en plantilla vacia (Vaciar Controlador MVC). Luego escribir el siguiente código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TreeView_CheckBox.Models;

namespace TreeView_CheckBox.Controllers
{
    public class EmpleadoController : Controller
    {
        List<beEmpleado> lbeEmpleado;

        private void obtenerEmpleados()
        {
            lbeEmpleado = new List<beEmpleado>();
            lbeEmpleado.Add(new beEmpleado { IdEmpleado = 1, Nombres = "Luis Dueñas",
                                          IdJefe = 0 });
            lbeEmpleado.Add(new beEmpleado { IdEmpleado = 2, Nombres = "Arturo Castañeda",
                                          IdJefe = 1 });
            lbeEmpleado.Add(new beEmpleado { IdEmpleado = 3, Nombres = "Enrique Espinal",
                                          IdJefe = 1 });
            lbeEmpleado.Add(new beEmpleado { IdEmpleado = 4, Nombres = "Maria Rojas",
                                          IdJefe = 2 });
            lbeEmpleado.Add(new beEmpleado { IdEmpleado = 5, Nombres = "Juan Perez",
                                          IdJefe = 2 });
            lbeEmpleado.Add(new beEmpleado { IdEmpleado = 6, Nombres = "Rosa Toro",
                                          IdJefe = 3 });
            lbeEmpleado.Add(new beEmpleado { IdEmpleado = 7, Nombres = "Pedro Vasquez",
                                          IdJefe = 3 });
            lbeEmpleado.Add(new beEmpleado { IdEmpleado = 8, Nombres = "Cesar Ramirez",
                                          IdJefe = 5 });
            lbeEmpleado.Add(new beEmpleado { IdEmpleado = 9, Nombres = "Ana Rodriguez",
                                          IdJefe = 6 });
        }

        public ViewResult Lista()
        {
            return View();
        }

        public JsonResult Listar()
        {
            JsonResult rpta;
            obtenerEmpleados();
            rpta = Json(lbeEmpleado, JsonRequestBehavior.AllowGet);
            return rpta;
        }
    }
}

Crear una Hoja de Estilos para la Vista

Primero crear una carpeta llamada "Content", luego clic derecho "Agregar" y luego "Hoja de estilos" y como nombre llamarle "ACME.css" y escribir el siguiente código:

body {
    background-color:lightgray;
}
.Titulo {
    background-color:black;
    color:white;
    font-size:x-large;
    text-transform:uppercase;
}
.Subtitulo {
    background-color:white;
    color:black;
    font-size:large;
    text-transform:capitalize;
}
.AnchoTotal {
    width:100%;
}
.FilaCabecera {
    background-color:gray;
    color:white;
}
.FilaDatos {
    background-color:white;
    color:blue;
}

Crear la Vista para mostrar los datos

Ir al controlador y ubicarse sobre el método "Lista" (acción), clic derecho y seleccionar "Agregar vista", aparecerá un diálogo como se muestra en la siguiente figura:


Desmarcar todas las casillas (checkboxs) y agregar la vista llamada "Lista", luego escribir el siguiente código:

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Lista</title>
    <link href="~/Content/ACME.css" rel="stylesheet" />
    <link href="~/Content/TreeView.css" rel="stylesheet" />
</head>
<body>
    <div>
        <table class="AnchoTotal">
            <tr class="Titulo">
                <td colspan="2">TreeView con CheckBox en ASP.NET MVC usando
                                             JSON, jQuery y Ajax</td>
            </tr>
            <tr class="Subtitulo">
                <td colspan="2">Lista de Empleados</td>
            </tr>
            <tr>
                <td style="width:50%">
                    <table class="AnchoTotal">
                        <thead>
                            <tr class="FilaCabecera">
                                <td style="width:100px">Id Emp</td>                        
                                <td style="width:300px">Nombres</td>
                                <td style="width:100px">Id Jefe</td>
                            </tr>
                        </thead>
                        <tbody id="tblEmpleado">
                        </tbody>
                    </table>
                </td>
                <td style="width:50%; vertical-align:top">
                    <div id="divEmpleado">
                        <ul id="ulEmpleado"></ul>
                    </div>
                </td>
            </tr>
        </table>
    </div>
    <script src="~/Scripts/jquery-1.8.2.min.js"></script>
    <script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
    <script src="~/Scripts/Rutinas.js"></script>
    <script>cargarLista();</script>
</body>
</html>

Crear el archivo JavaScript con el código cliente para el TreeView

Antes que nada crear una carpeta llamada "Scripts" y arrastrar del explorador de Windows los archivos de jQuery: "jquery-1.8.2.min.js" y "jquery.unobtrusive-ajax.min.js", luego agregar un archivo de JavaScript llamado "Rutinas.js" y escribir el siguiente código:

function cargarLista() {
    $.ajax(
        {
            url: "Empleado/Listar/",
            type: "post",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: exito,
            error: error
        });
}

function mostrarTabla(rpta) {
    var tabla = "";
    for (i = 0; i < rpta.length; i++) {
        tabla += "<tr class='FilaDatos'><td>" + rpta[i].IdEmpleado + "</td><td>" +
            rpta[i].Nombres + "</td><td>" + rpta[i].IdJefe + "</td></tr>";
    }
    var tbl = document.getElementById("tblEmpleado");
    tbl.innerHTML = tabla;
}

function mostrarTreeCheck(rpta) {
    var ul = $("#ulEmpleado");
    for (var i = 0; i < rpta.length; i++) {
        var li = "<li data-id='" + rpta[i].IdEmpleado + "'><input type='checkbox' />
                      <span style='cursor:pointer'>" + rpta[i].Nombres + "</span></li>";
        var padre;
        if (rpta[i].IdJefe == "0") padre = ul;
        else {
            var $elem = ul.find("li[data-id='" + rpta[i].IdJefe + "']");
            if ($elem.find("ul").length == 0) $elem.append("<ul>");
            padre = $elem.find("ul:first");
        }
        padre.append(li);
    }
}

function seleccionarTreeCheck() {
    $(function () {
        $("input[type='checkbox']").change(function () {
            $(this).siblings('ul')
                   .find("input[type='checkbox']")
                   .prop('checked', this.checked);
        });
    });
}

function expandirColapsarTreeCheck() {
    $(function () {
        $('#ulEmpleado').find('span').click(function (e) {
            $(this).parent().children('ul').toggle();
        });
    });
}

function exito(rpta) {
    mostrarTabla(rpta);
    mostrarTreeCheck(rpta);
    seleccionarTreeCheck();
    expandirColapsarTreeCheck();
}

function error(rpta) {
    alert(rpta.statusText);
}

Configurar el inicio y ejecutar la aplicación web

Para probar la aplicación web debemos configurar el inicio para lo cual nos vamos a la carpeta "App_Start" y abrimos el archivo "RouteConfig.cs" cambiando el nombre del controlador y la acción tal como se muestra en el siguiente código:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace JS01_TreeView_CheckBox
{
    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 = "Empleado", action = "Lista", id = UrlParameter.Optional }
            );
        }
    }
}

Finalmente, grabar y pulsar F5 para ejecutar la aplicación, mostrándose el resultado similar a la siguiente figura:


Seleccionar el primer empleado y ver como se marcan todos los empleados, tal como se muestra en la siguiente figura:


Dar clic sobre el segundo empleado y notar como se colapsa (oculta) sus subordinados, también colapsar el tercer empleado y el resultado será similar a la siguiente figura:


Comentario Final

En este post, un poco grande, hemos querido iniciar los Demos dedicados a ASP.NET MVC, empezando por la creación de un control TreeView con CheckBox que seleccione en forma jerárquica y expanda y colapse sus elementos.

Un camino hubiera sido usar Librerías de Controles de terceros como jQueryUI, Telerik KendoUI, Infragistics, DevExpress, etc. Pero como siempre el objetivo de este blog es enseñar a hacerlo uno mismo, para lo cual usamos JSON, JavaScript, jQuery y Ajax.

Espero les guste y si es así lo pueden re-postear en sus redes sociales: Google+, Facebook, Twitter, etc.

Descarga
2015_01_20_DemoDia_TreeView_CheckBox

El Libro del Día: Pro JavaScript Development

El Libro del Día: 2015-01-20

Titulo: Pro JavaScript Development
Autor: Den Odell
Editorial: Apress
Nro Paginas: 454

Capítulos:
Chapter 1: Object-Oriented JavaScript
Chapter 2: Documenting JavaScript
Chapter 3: Writing High-Quality JavaScript
Chapter 4: Boosting JavaScript Performance
Chapter 5: Design Patterns: Creational
Chapter 6: Design Patterns: Structural
Chapter 7: Design Patterns: Behavioral
Chapter 8: Design Patterns: Architectural
Chapter 9: Managing Code File Dependencies
Chapter 10: Mobile JavaScript Development
Chapter 11: Building Games with Canvas API
Chapter 12: Using WebRTC for Video Chat
Chapter 13: Using Client-Side Templates
Chapter 14: The Node.js Application Platform
Chapter 15: Build Tools and Automation
Chapter 16: Browser Developer Tools

Descarga:
Pro_JavaScript_Development

lunes, 19 de enero de 2015

El Libro del Día: Building JavaScript Games

El Libro del Día: 2015-01-19

Titulo: Building JavaScript Games
Autor: Arjan Egges
Editorial: Apress
Nro Paginas: 422

Capítulos:
Part I: Getting Started
Chapter 1: Programming
Chapter 2: Game Programming Basics
Chapter 3: Creating a Game World
Chapter 4: Game Assets
Part II: Creating Colorful Games
Chapter 5: Knowing What the Player Is Doing
Chapter 6: Reacting to Player Input
Chapter 7: Basic Game Objects
Chapter 8: Game Object Types
Chapter 9: Colors and Collisions
Chapter 10: Limited Lives
Chapter 11: Organizing Game Objects
Chapter 12: Finishing the Painter Game
Part III: Jewel Jam
Chapter 13: Adapting to Different Devices
Chapter 14: Game Objects in a Structure
Chapter 15: Gameplay Programming
Chapter 16: Game States
Chapter 17: Finishing the Jewel Jam Game
Part IV: Penguin Pairs
Chapter 18: Sprite Sheets
Chapter 19: Menus and Settings
Chapter 20: Game State Management
Chapter 21: Storing and Recalling Game Data
Chapter 22: Pairing the Penguins
Chapter 23: Finishing the Penguin Pairs Game
Part V: Tick Tick
Chapter 24: The Main Game Structure
Chapter 25: Animation
Chapter 26: Game Physics
Chapter 27: Intelligent Enemies
Chapter 28: Adding Player Interaction
Chapter 29: Finishing the Tick Tick Game
Part VI: Into the Great Wide Open
Chapter 30: Producing Games
Chapter 31: Publishing Games

Descarga:
Building_JavaScript_Games