martes, 2 de junio de 2015

Personajes de la Computación - Dino Esposito

Personajes de la Computación - Dino Esposito

Dino Esposito es un Consultor, Arquitecto y Especialista en Desarrollo Microsoft. Es uno de los principales evangelistas de .NET de Italia, autor de varios libros, columnista del MSDN Magazine de la sección Cutting Edge y expositor en diferentes conferencias.

Actualmente trabaja como CTO de la empresa Crionet y su especialidad es la Arquitectura y las Aplicaciones Móviles, pero es nuestro personaje de la semana por su aporte a la difusión de ASP.NET del cual ha escrito numerosos libros y conferencias que a continuación comparto.


Libros

Microsoft Press 2003 - Applied XML Programming For Microsoft NET


Microsoft Press 2009 - Microsoft ASP.NET and AJAX. Architecting Web Applications


Microsoft Press 2010 - Programming Microsoft ASP .NET MVC


Microsoft Press 2011 - Programming Microsoft ASP.NET 4


Microsoft Press 2012 - Architecting Mobile Solutions For The Enterprise


Microsoft Press 2013 - Start Here Build Windows 8 Apps with HTML5 and JavaScript






Videos de Conferencias

BASTA Spring 2013 - How to Write Code That Others Can Read


Codemotion 2013 - Android for .NET Developers


DevDay 2013 - Mobile is over: Start Planning Multi-Device Web sites Today


Software Architect 2013 - The executive summary of Android development for the busy architect

DevWeek 2014 - What's new in ASP.NET MVC 5


DevWeek 2014 - A first look at ASP.NET Identity


Software Architect 2014 - DDD misconceptions


Next 2014 Moscow - Challenges, Pains and Points of Software Development Today


Next 2014 Moscow - ASP.NET vNext: What it means to you and what it means to Microsoft


Code Fest 2015 - CQRS: A More Effective Way of Writing the Same Applications


Code Fest 2015 - Challenges, Pains and Points of Software Development Today


Comentario Final

En este post he compartido 8 libros de Dino Esposito, desde el 2003 hasta el 2014, de XML, ASP.NET, MVC, Windows 8 y Arquitectura de Aplicaciones, además de 11 Videos de Conferencias dadas entre el 2013 y 2015.

Gracias Dino por compartir tu experiencia con la Comunidad de Desarrollo Microsoft.

El Libro del Día: Pro Single Page Application Development

El Libro del Día: 2015-06-02

Titulo: Pro Single Page Application Development
Autor: Gil Fink, Ido Flatow
Editorial: Apress
Nro Paginas: 307

Capítulos:
Part I: The Road to Single Page Application Development
Chapter 1: Introducing Single Page Applications
Chapter 2: JavaScript for SPAs
Chapter 3: Modular JavaScript Development
Chapter 4: SPA Concepts and Architecture
Part II: Building the Front End
Chapter 5: Getting Started with Backbone.js
Chapter 6: Creating a Single Page Application Step by Step
Part III: Building the Back End
Chapter 7: Creating a Back-End Service with ASP.NET Web API
Chapter 8: Implementing HTTP Concepts with ASP.NET Web API
Chapter 9: Communication Between Front and Back End
Part IV: Advanced SPA Topics
Chapter 10: JavaScript Unit Testing
Chapter 11: SPA Performance Tuning
Chapter 12: Search Engine Optimization for SPAs
Chapter 13: SPA Deployment

Descarga:
Pro_Single_Page_Application_Development

lunes, 1 de junio de 2015

El Demo del Día: Automatizar la Programación de Tareas de Windows en .NET

Automatizar la Programación de Tareas de Windows en .NET

Windows ofrece un servicio muy útil que permite ejecutar tareas programadas por fechas (Task Scheduler), este un gran complemento para ejecutar aplicaciones de consola como por ejemplo para actualización de aplicaciones y/o archivos, envío de notificaciones y/o mensajes de correos, backups, etc.

Requerimiento

Se desea crear una aplicación que permita automatizar la programación de tareas para no hacerla manualmente a través de la aplicación de consola taskschd.msc. Sino tener una aplicación personalizada que permita listar las tareas, crear una nueva tarea y eliminar una tarea existente.

Solución

Crearemos una aplicación Windows Forms .NET en C# que use la clase TaskService de la librería manejada Microsoft.Win32.TaskScheduler.dll que la podemos descargar libremente de la siguiente dirección: Task Scheduler Managed Wrapper

Crear una Aplicación Windows Forms en C#

Abrir Visual Studio y crear una aplicación Windows Forms en C# llamada "ProgramacionTareas", cambiarle de nombre al formulario por "frmListaTareas" y realizar el diseño similar a la figura mostrada:


Nota: En el diseño hay un ListView llamado "lvwTarea", un menú contextual llamado "mnuTarea" con 2 opciones: mnuNuevaTarea y mnuEliminarTarea.

Hacer una referencia a la librería: "Microsoft.Win32.TaskScheduler.dll" y escribir el siguiente código en el formulario "frmListaTareas":

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using net=System.Threading.Tasks;
using Microsoft.Win32.TaskScheduler; //TaskService

namespace ProgramacionTareas
{
    public partial class frmListaTareas : Form
    {
        public frmListaTareas()
        {
            InitializeComponent();
        }

        private void configurarListView()
        {
            lvwTarea.Columns.Add("Nombre de la Tarea", 400);
            lvwTarea.Columns.Add("Folder", 300);
            lvwTarea.Columns.Add("Status", 100);
            lvwTarea.View = View.Details;          
            lvwTarea.MultiSelect = false;
            lvwTarea.GridLines = true;
            lvwTarea.FullRowSelect = true;
            lvwTarea.HotTracking = true;
        }

        private void listarTareas(object sender, EventArgs e)
        {
            configurarListView();
            IEnumerable<Task> tareas = null;
            net.TaskScheduler ui =
                net.TaskScheduler.FromCurrentSynchronizationContext();
            System.Threading.Tasks.Task.Run(() =>
            {
                TaskService prog = new TaskService();
                tareas = prog.AllTasks;
            }).ContinueWith(x => mostrarTareas(tareas),ui);
        }

        private void seleccionarTareas(ListViewItem fila,Task tarea,string estado)
        {
            if (estado.Equals("Running"))
            {
                fila.ForeColor = Color.White;
                fila.BackColor = Color.Red;
            }
            if (tarea.Folder.Name.Equals("DSOFT"))
            {
                fila.ForeColor = Color.Yellow;
                fila.BackColor = Color.Green;
            }
        }

        private void mostrarTareas(IEnumerable<Task> tareas)
        {
            ListViewItem fila;
            string estado;
            foreach (Task tarea in tareas)
            {
                estado = tarea.State.ToString();
                fila = lvwTarea.Items.Add(tarea.Name);
                fila.SubItems.Add(tarea.Folder.Name);
                fila.SubItems.Add(estado);
                seleccionarTareas(fila, tarea, estado);
            }
        }

        private void crearNuevaTarea(object sender, EventArgs e)
        {
            frmNuevaTarea frm = new frmNuevaTarea();
            if (frm.ShowDialog().Equals(DialogResult.OK))
            {
                TaskService programador = new TaskService();
                Trigger evento = Trigger.CreateTrigger(TaskTriggerType.Daily);
                evento.StartBoundary = frm.dtpFechaInicio.Value.AddMinutes(1);
                evento.EndBoundary = frm.dtpFechaFin.Value;
                ExecAction accion = new ExecAction();
                accion.Path = frm.txtPrograma.Text;
                Task tarea = programador.AddTask
                    (@"\DSOFT\" + frm.txtNombre.Text, evento, accion);
                if (tarea != null)
                {
                    string estado = tarea.State.ToString();
                    ListViewItem fila = lvwTarea.Items.Add(tarea.Name);
                    fila.SubItems.Add(tarea.Folder.Name);
                    fila.SubItems.Add(estado);
                    seleccionarTareas(fila, tarea, estado);
                }
            }
        }

        private void eliminarTarea(object sender, EventArgs e)
        {
            if (lvwTarea.SelectedItems != null && lvwTarea.SelectedItems.Count > 0)
            {              
                ListViewItem fila =lvwTarea.SelectedItems[0];
                string nombreCarpeta = fila.SubItems[1].Text;
                TaskService programador = new TaskService();
                TaskFolder carpeta = programador.GetFolder(nombreCarpeta);
                if (carpeta != null)
                {
                    string nombreTarea = fila.SubItems[0].Text;
                    Task tarea = programador.GetTask
                        (String.Format(@"\{0}\{1}", nombreCarpeta, nombreTarea));
                    if (tarea != null)
                    {
                        if (tarea.State.Equals(TaskState.Running)) tarea.Stop();
                        try
                        {
                            carpeta.DeleteTask(nombreTarea, true);
                            fila.Remove();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "No se pudo eliminar la tarea");
                        }
                    }
                }
            }
        }
    }
}

Nota: Para el ejemplo, se ha creado en el Task Scheduler de Windows una carpeta llamada "DSOFT"

Agregar otro formulario al proyecto y ponerle como nombre "frmNuevaTarea" y diseñarlo similar a como se ve en la siguiente figura:


Nota: En el diseño hay 2 TextBoxs llamados txtNombre y txtPrograma, además 2 DateTimePicker llamados: dtpFechaInicio y dtpFechaFin, finalmente 3 botones: "btnAbrirPrograma", "btnAceptar" y "btnCancelar". El botón "btnAceptar" tiene configurado la propiedad DialogResult en OK y el botón "btnCancelar" tiene configurado la propiedad DialogResult en Cancel.

Escribir el siguiente código en el formulario "frmNuevaTarea":

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ProgramacionTareas
{
    public partial class frmNuevaTarea : Form
    {
        public frmNuevaTarea()
        {
            InitializeComponent();
        }

        private void mostrarDialogoAbrirPrograma(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Title = "Selecciona el Programa a Abrir";
            ofd.Filter = "Archivos de programas|*.exe";
            if (ofd.ShowDialog().Equals(DialogResult.OK))
            {
                txtPrograma.Text = ofd.FileName;
            }
        }
    }
}

Ejecutar y Probar la Aplicación Windows Forms

Antes de ejecutar la aplicación, para poder comprobar el listado de tareas, la creación de una nueva tarea y la eliminación de una tarea existente hay que abrir el Task Scheduler, para esto pulsar Ctrl + R y escribir el siguiente comando: taskschd.msc

Se mostrará la consola del Task Scheduler similar al mostrado en la siguiente figura:


Nota: Crear una carpeta personalizada para guardar nuestras tareas programadas llamada "DSOFT" y crear un par de tareas básicas dentro de esta carpeta.

Grabar la aplicación y pulsar F5 para ejecutarla, inmediatamente se listaran las tareas programadas similar a la siguiente figura:


En la ventana las tareas de la carpeta personalizada creada "DSOFT" se mostrarán con fondo verde y color amarillo y las tareas que están ejecutándose se mostrarán con fondo rojo y color blanco.

Dar clic derecho sobre la lista (ListView) y aparecerá un menú contextual con 2 opciones, seleccionar la primera opción: "Nueva Tarea" y aparecerá el siguiente cuadro de diálogo:


Llenar los datos de la nueva tarea: nombre, fecha de inicio, fecha de fin y seleccionar el programa a ejecutar, clic al botón "Aceptar" y la tarea se agregará al final de la lista, similar a la siguiente figura:


Comprobar que la tarea aparece en la consola del Task Scheduler de Windows (clic derecho y refrescar), además se ha programado para que después de un minuto del "Aceptar" se ejecute.

Clic derecho a la tarea creada recientemente y seleccionar la opción: "Eliminar Tarea", e inmediatamente se eliminará la tarea, también comprobarlo en la consola del Task Scheduler de Windows (clic derecho y refrescar).

Comentario

En este post hemos aprendido como crear nuestro propio Administrador de Tareas Programadas usando la clase TaskService de la librería manejada: Microsoft.Win32.TaskScheduler.dll.

Esto es de mucha utilidad cuando a veces nos restringen el acceso a las Herramientas de Windows y necesitamos crear una Nueva Tarea para ejecutar una aplicación, sobre todo para programas en Batch.

Descarga del Código
DemoDia_ProgramacionTareas

El Libro del Día: Socket.IO Real-time Web Application Development

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

Titulo: Socket.IO Real-time Web Application Development
Autor: Rohit Rai
Editorial: Packt
Nro Paginas: 140

Capítulos:
Chapter 1: Going Real Time on the Web
Chapter 2: Getting Started with Node.js
Chapter 3: Let's Chat
Chapter 4: Making It More Fun
Chapter 5: The Socket.IO Protocol
Chapter 6: Deploying and Scaling
Appendix A: Socket.IO Quick Reference
Appendix B: Socket.IO Backends

Descarga:
SocketIO_RealTime_Web_Application_Development

jueves, 28 de mayo de 2015

El Libro del Día: Functional Programming in JavaScript

El Libro del Día: 2015-05-28

Titulo: Functional Programming in JavaScript
Autor: Dan Mantyla
Editorial: Packt
Nro Paginas: 172

Capítulos:
Chapter 1: The Powers of JavaScript's Functional Side a Demonstration
Chapter 2: Fundamentals of Functional Programming
Chapter 3: Setting Up the Functional Programming Environment
Chapter 4: Implementing Functional Programming Techniques in JavaScript
Chapter 5: Category Theory
Chapter 6: Advanced Topics and Pitfalls in JavaScript
Chapter 7: Functional and Object oriented Programming in JavaScript
Appendix A: Common Functions for Functional Programming in JavaScript
Appendix B: Glossary of Terms

Descarga:
Functional_Programming_in_JavaScript

miércoles, 27 de mayo de 2015

Videos - DevWeek Conference 2014

Videos del DevWeek Conference 2014

Comparto las charlas de .NET dadas en la Conferencia DevWeek 2014, con muy buenos expositores.

Cryptography 101 Using the .NET Framework - Robert Boedigheimer


What's new in ASP.NET MVC 5 - Dino Esposito


ASP.NET MVC Tips, Tricks and Hidden Gems - Shay Friedman


Developing cross-platform mobile applications with C# and Xamarin - Mark Smith


18 ways your brand new ASP.NET MVC project can be better - Michael Kennedy


Battle of the frameworks ASP.NET vs Node.js - Yaniv Rodenski & Ido Flatow


What's new in Visual Studio 2013 - Giles Davies



El Libro del Día: AngularJS Testing Cookbook

El Libro del Día: 2015-05-27

Titulo: AngularJS Testing Cookbook
Autor: Simon Bailey
Editorial: Packt
Nro Paginas: 180

Capítulos:
Chapter 1: Setup and Configuration
Chapter 2: Getting Started with Testing and AngularJS
Chapter 3: How to Test Navigation and Routing
Chapter 4: Testing Controllers
Chapter 5: Testing User Interaction and Directives
Chapter 6: Using Spies to Test Events
Chapter 7: Testing Filters
Chapter 8: Service and Factory Testing with Mocks and Spies
Chapter 9: A Brief Look at Testing Animations

Descarga:
AngularJS_Testing_Cookbook