domingo, 31 de agosto de 2014

El Libro del Día: Beginning WebGL for HTML5

El Libro del Día: 2014-08-31

Titulo: Beginning WebGL for HTML5
Autor: Brian Danchilla
Editorial: Apress
Nro Paginas: 348

Capítulos:
Chapter 1: Setting the Scene
Chapter 2: Shaders 101
Chapter 3: Textures and Lighting
Chapter 4: Increasing Realism
Chapter 5: Physics
Chapter 6: Fractals, Height Maps, and Particle Systems
Chapter 7: Three.js Framework
Chapter 8: Productivity Tools
Chapter 9: Debugging and Performance
Chapter 10: Effects, Tips, and Tricks
Afterword: The Future of WebGL
Appendix A: Essential HTML5 and JavaScript
Appendix B: Graphics Refresher
Appendix C: WebGL Spec. Odds and Ends
Appendix D: Additional Resources

Descarga:
Beginning_WebGL_HTML5

sábado, 30 de agosto de 2014

El Libro del Día: Pro HTML5 and CSS3 Design Patterns

El Libro del Día: 2014-08-30

Titulo: Pro HTML5 and CSS3 Design Patterns
Autor: Michael Bowers, Dionysios Synodinos, Victor Sumner
Editorial: Apress
Nro Paginas: 514

Capítulos:
Chapter 1: Design Patterns: Making CSS Easy
Chapter 2: HTML Design Patterns
Chapter 3: CSS Selectors and Inheritance
Chapter 4: Box Models
Chapter 5: Box Model Extents
Chapter 6: Box Model Properties
Chapter 7: Positioning Models
Chapter 8: Positioning: Indented, Offset, and Aligned
Chapter 9: Positioning: Advanced
Chapter 10: Styling Text
Chapter 11: Spacing Content
Chapter 12: Aligning Content
Chapter 13: Blocks
Chapter 14: Images
Chapter 15: Tables
Chapter 16: Table Column Layout
Chapter 17: Layouts
Chapter 18: Drop Caps
Chapter 19: Callouts and Quotes
Chapter 20: Alerts

Descarga:
Pro_HTML5_CSS3_DesignPatterns

viernes, 29 de agosto de 2014

El Libro del Día: Pro CSS3 Animation

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

Titulo: Pro CSS3 Animation
Autor: Dudley Storey
Editorial: Apress
Nro Paginas: 168

Capítulos:
Chapter 1: CSS3 Fundamentals
Chapter 2: CSS3 Transforms and Transitions
Chapter 3: CSS3 Transitions for Images
Chapter 4: CSS3 Transitions for UI Elements
Chapter 5: CSS3 Keyframe Animations
Chapter 6: CSS3 Keyframe Animations for Web Content
Chapter 7: Integrating CSS3 Animations with SVG and Filters
Chapter 8: Integrating CSS3 Animation with Responsive Web Design and JavaScript
Chapter 9: CSS3 3D Transforms, Transitions, and Animations
Chapter 10: Tools, Technologies, and the Future of CSS Animation

Descarga:
Pro_CSS3_Animation

jueves, 28 de agosto de 2014

El Libro del Día: Beginning CSS3

El Libro del Día: 2014-08-28

Titulo: Beginning CSS3
Autor: David Powers
Editorial: Apress
Nro Paginas: 547

Capítulos:
Part I: CSS Basics
Chapter 1: Introducing CSS The Language of Web Design
Chapter 2: Using Basic Selectors
Chapter 3: Specifying Sizes, Colors, and Files
Part II: Working with Text
Chapter 4: Styling Text
Chapter 5: Embedding Web Fonts
Part III: CSS Page Layout
Chapter 6: Understanding the CSS Box Model
Chapter 7: Floating Elements for Layout
Chapter 8: Adding Backgrounds
Chapter 9: Adding Borders and Drop Shadows
Chapter 10: Styling Lists and Navigation Menus
Chapter 11: Positioning Elements Precisely
Chapter 12: Cross-Browser Layout Techniques
Part IV: Advanced CSS Techniques
Chapter 13: Using Advanced Selectors
Chapter 14: Styling Tables
Chapter 15: Generated Content
Chapter 16: Creating a Print Style Sheet
Chapter 17: Targeting Styles with Media Queries
Chapter 18: Using CSS3 Multi-Column Layout
Chapter 19: Creating Gradients Without Images
Chapter 20: 2D Transforms and Transitions
Chapter 21: Animating with CSS Keyframes
Chapter 22: What Next?

Descarga:
Beginning_CSS3

miércoles, 27 de agosto de 2014

El Demo del Día: Descargar Archivos Asincronamente con WebClient

Descargar Archivos Asincronamente con WebClient

Requerimiento

Muchas veces los Administradores de Red bloquean las descargas de Archivos en los Navegadores y a veces necesitamos con urgencia bajar uno o mas archivos (de cualquier tipo). Si conocemos las direcciones de descarga podemos crear una aplicación que baje dichos archivos.

Características de la Aplicación Windows

1. Debe permitir bajar varios archivos desde URLs conocidas.
2. La descarga debe ser asíncrona sin bloquear el trabajo de la pantalla.
3. Se debe mostrar el progreso de la descarga en % y en forma gráfica con una barra de progreso.

Solución

Crearemos una aplicación Windows Forms en C# que use la clase WebClient del espacio de nombres "System.Net" que tiene un método asíncrono llamado "DownloadFileAsync". Además mostraremos el progreso en el evento: "DownloadProgressChanged" y actualizaremos el estado a Finalizado en el evento "DownloadFileCompleted".

Crear la Aplicación Windows Forms en C#

Crear un proyecto llamado "DescargarArchivos" en C# como una "Aplicación de Windows Forms".
Cambiar de nombre al formulario por: "frmDescarga", configurar su tamaño a 650 de ancho por 400 de alto, centrarlo y arrastrar 3 controles:
- Un TextBox llamado "txtURL"
- Un Button llamado "btnDescargar"
- Un ListView llamado "lvwProgreso"

El diseño del formulario debe quedar como se muestra a continuación:


Nota: El botón debe estar deshabilitado y solo se debe habilitar al ingresar una URL sobre el TextBox.

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

using System;
using System.Net;
using System.Net.Mime; //ContentDisposition
using System.IO;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;

namespace DescargarArchivos
{
    public partial class frmDescarga : Form
    {
        private string archivoFin="";

        public frmDescarga()
        {
            InitializeComponent();
        }

        private void configurarListView(object sender, EventArgs e)
        {
            lvwProgreso.FullRowSelect = true;
            lvwProgreso.GridLines = true;
            lvwProgreso.HotTracking = true;
            lvwProgreso.Columns.Add("Nombre Archivo", 200);
            lvwProgreso.Columns.Add("MB", 70, HorizontalAlignment.Center);
            lvwProgreso.Columns.Add("%", 40, HorizontalAlignment.Center);
            lvwProgreso.Columns.Add("Progreso", 200);
            lvwProgreso.Columns.Add("Estado", 80, HorizontalAlignment.Center);
            lvwProgreso.View = View.Details;
        }

        private void habilitarBotonDescargar(object sender, EventArgs e)
        {
            btnDescargar.Enabled = (!txtURL.Text.Equals(""));
        }

        private void iniciarDescarga(object sender, EventArgs e)
        {
            WebClient oCliente = new WebClient();
            Uri url = new Uri(txtURL.Text);
            string archivo = Path.GetFileName(url.AbsolutePath);
            ServicePointManager.DefaultConnectionLimit = 10;
            ListViewItem fila = lvwProgreso.Items.Add(archivo);
            fila.Name = archivo;
            fila.SubItems.Add("0");
            fila.SubItems.Add("0");
            fila.SubItems.Add("");
            fila.SubItems.Add("Iniciado");
            Rectangle rec = fila.SubItems[3].Bounds;
            ProgressBar pbr =new ProgressBar();
            pbr.Name = archivo;
            pbr.Parent = lvwProgreso;
            pbr.SetBounds(rec.X, rec.Y, rec.Width, rec.Height);
            pbr.Visible = true;
            txtURL.Clear();
            oCliente.DownloadProgressChanged +=
            new DownloadProgressChangedEventHandler(mostrarProgreso);
            oCliente.DownloadFileCompleted +=
            new AsyncCompletedEventHandler(finalizarDescarga);
            oCliente.DownloadFileAsync(url, archivo, archivo);
        }

        private void mostrarProgreso(object sender, DownloadProgressChangedEventArgs e)
        {
            int bytesRecibidos = (int)(e.BytesReceived / (1024 * 1024));
            int bytesTotales = (int)(e.TotalBytesToReceive / (1024 * 1024));
            string archivo = e.UserState.ToString();
            Control[] rpta = lvwProgreso.Controls.Find(archivo, false);
            if(rpta!=null&&rpta.Length > 0){
                ProgressBar pbr = (ProgressBar)rpta[0];
                lvwProgreso.Items[archivo].SubItems[1].Text = String.Format("{0} - {1}",
                bytesRecibidos, bytesTotales);
                lvwProgreso.Items[archivo].SubItems[2].Text = e.ProgressPercentage.ToString();
                pbr.Value = e.ProgressPercentage;
                lvwProgreso.Items[archivo].SubItems[4].Text = "Descargando";
            }
        }

        private void finalizarDescarga(object sender, AsyncCompletedEventArgs e)
        {
            archivoFin = e.UserState.ToString();
            MethodInvoker mi = new MethodInvoker(mostrarResultado);
            this.Invoke(mi);
        }

        private void mostrarResultado()
        {
            lvwProgreso.Items[archivoFin].SubItems[4].Text = "Finalizado";
        }
    }
}

Nota: Una de las dificultades de la aplicación fue como actualizar la Fila del ListView adecuada, ya que son varios archivos los que se descargan, para eso a cada barra y a cada ListViewItem se le dio como nombre el archivo que se descargaba y se uso como identificador para obtenerlos.

Otra dificultad que encontré fue que la clase WebClient no podía descargar varios a la vez, para lo cual se uso la propiedad "DefaultConnectionLimit" de la clase "ServicePointManager", en este caso configurada para bajar 10 archivos.

Probar la Aplicación de Descarga de Archivos

Grabar la aplicación, compilarla y ejecutarla con F5. Se mostrará una ventana como la siguiente:


Ingresar una dirección URL conteniendo un archivo y clic en el botón "Descargar", copiar varias direcciones e iniciar sus descarga, se irá mostrando el progreso de cada descarga y su estado, tal como se ve en la siguiente figura:


Cuando la descarga finaliza se completa la barra, se cambia el estado a finalizado y el archivo estará disponible para ejecutarse, por defecto en la carpeta donde se encuentra la aplicación (bin\debug).

Comentario Final

En este post vimos como bajar varios archivos simultáneamente usando WebClient sin bloquear la pantalla, es decir en forma asíncrona, mostrando el progreso. Espero les guste y se animen a hacer sus propios utilitarios y no bajarlos de otros.

Descarga:
Demo17_DescargarArchivos_WebClient

El Libro del Día: Expert C# 5.0

El Libro del Día: 2014-08-27

Titulo: Expert C# 5.0
Autor: Mohammad Rahman
Editorial: Apress
Nro Paginas: 609

Capítulos:
Chapter 1: Reintroducing C#:-A Detailed Look at the Language We All Know
Chapter 2: C# Objects in Memory
Chapter 3: Parameters
Chapter 4: Methods
Chapter 5: Automatic Property Declaration
Chapter 6: Enum
Chapter 7: Delegate
Chapter 8: Event
Chapter 9: Foreach and Iterator
Chapter 10: The String Data Type
Chapter 11: Collections Explained
Chapter 12: Linq in C#
Chapter 13: Exception Management
Chapter 14: Asynchrony
Chapter 15: Diagnostic Tools in .NET

Descarga:
Expert_C#_5.0

martes, 26 de agosto de 2014

El Libro del Día: Beginning C# 5.0 Databases

El Libro del Día: 2014-08-26

Titulo: Beginning C# 5.0 Databases (2nd Edition)
Autor: Vidya Vrat Agarwal
Editorial: Apress
Nro Paginas: 427

Capítulos:
Part I: Understanding Tools and Fundamentals Databases
Chapter 1: Getting and Understanding Your Tools
Chapter 2: Understanding Relational Databases
Chapter 3: Creating Database and Tables
Part II: Working with Database and XML
Chapter 4: Manipulating Database Data
Chapter 5: Querying Databases
Chapter 6: Using Stored Procedures
Chapter 7: Using XML
Chapter 8: Understanding Transactions
Part III: Working with Data Using ADO.NET
Chapter 9: Building Windows Forms Applications
Chapter 10: Introduction to ADO.NET
Chapter 11: Handling Exceptions
Chapter 12: Making Connections
Chapter 13: Executing ADO.NET Commands to Retrieve Data
Chapter 14: Using Data Readers
Part IV: Working with Advanced ADO.NET Related Features
Chapter 15: Using Data Sets and Data Adapters
Chapter 16: Using Data Controls with ASP.NET Applications
Chapter 17: Working with Text and Binary Data
Chapter 18: Using LINQ
Chapter 19: Using the ADO.NET Entity Framework
Chapter 20: Using the CLR in SQL Server

Descarga:
Beginning_C#_5.0_Databases

lunes, 25 de agosto de 2014

El Libro del Día: A Programmer's Guide to C# 5.0

El Libro del Día: 2014-08-25

Titulo: A Programmer's Guide to C# 5.0 (4th Edition)
Autor: Eric Gunnerson, Nick Wienholt
Editorial: Apress
Nro Paginas: 443

Capítulos:
Chapter 1: C# and the .NET Runtime and Libraries
Chapter 2: C# QuickStart and Developing in C#
Chapter 3: Classes 101
Chapter 4: Base Classes and Inheritance
Chapter 5: Exception Handling
Chapter 6: Member Accessibility and Overloading
Chapter 7: Other Class Details
Chapter 8: Structs (Value Types)
Chapter 9: Interfaces
Chapter 10: Versioning and Aliases
Chapter 11: Statements and Flow of Execution
Chapter 12: Variable Scoping and Definite Assignment
Chapter 13: Operators and Expressions
Chapter 14: Conversions
Chapter 15: Arrays
Chapter 16: Properties
Chapter 17: Generic Types
Chapter 18: Indexers, Enumerators, and Iterators
Chapter 19: Strings
Chapter 20: Enumerations
Chapter 21: Attributes
Chapter 22: Delegates, Anonymous Methods, and Lambdas
Chapter 23: Events
Chapter 24: Dynamic Typing
Chapter 25: User-Defined Conversions
Chapter 26: Operator Overloading
Chapter 27: Nullable Types
Chapter 28: Linq to Objects
Chapter 29: Linq to XML
Chapter 30: Linq to SQL
Chapter 31: Other Language Details
Chapter 32: Making Friends with the .NET Framework
Chapter 33: System.Array and the Collection Classes
Chapter 34: Threading
Chapter 35: Asynchronous and Parallel Programming
Chapter 36: Execution-Time Code Generation
Chapter 37: Interop
Chapter 38: .NET Base Class Library Overview
Chapter 39: Deeper into C#
Chapter 40: Logging and Debugging Techniques
Chapter 41: IDEs and Utilities

Descarga:
A_Programmers_Guide_C#_5.0

domingo, 24 de agosto de 2014

El Libro del Día: jQuery Cookbook

El Libro del Día: 2014-08-24

Titulo: jQuery Cookbook
Autor: jQuery Community Experts
Editorial: O'Reilly
Nro Paginas: 478

Capítulos:
1. jQuery Basics
2. Selecting Elements with jQuery
3. Beyond the Basics
4. jQuery Utilities
5. Faster, Simpler, More Fun
6. Dimensions
7. Effects
8. Events
9. Advanced Events
10. HTML Form Enhancements from Scratch
11. HTML Form Enhancements with Plugins
12. jQuery Plugins
13. Interface Components from Scratch
14. User Interfaces with jQuery UI
15. jQuery UI Theming
16. jQuery, Ajax, Data Formats: HTML, XML, JSON, JSONP
17. Using jQuery in Large Projects
18. Unit Testing

Descarga:
jQuery_Cookbook

sábado, 23 de agosto de 2014

El Libro del Día: jQuery Recipes

El Libro del Día: 2014-08-23

Titulo: jQuery Recipes
Autor: B.M. Harwani
Editorial: Apress
Nro Paginas: 455

Capítulos:
Chapter 1: jQuery Basics
Chapter 2: Arrays and Strings
Chapter 3: Event Handling
Chapter 4: Form Validation
Chapter 5: Page Navigation
Chapter 6: Visual Effects
Chapter 7: Dealing with Tables
Chapter 8: Ajax
Chapter 9: Using Plugins
Chapter 10: Using CSS

Descarga:
jQuery_Recipes

viernes, 22 de agosto de 2014

El Libro del Día: Beginning jQuery 2 for ASP.NET Developers

El Libro del Día: 2014-08-22

Titulo: Beginning jQuery 2 for ASP.NET Developers
Autor: Bipin Joshi
Editorial: Apress
Nro Paginas: 322

Capítulos:
Chapter 1: The JavaScript You Need to Know
Chapter 2: A First Look at jQuery
Chapter 3: ASP.NET Controls and jQuery Selectors
Chapter 4: Event Handling
Chapter 5: DOM Manipulation and Dynamic Content
Chapter 6: Traversal and Other Useful Methods
Chapter 7: Effects and Animations
Chapter 8: Ajax Techniques
Chapter 9: Creating and Using Plugins
Chapter 10: jQuery UI and jQuery Mobile
Chapter 11: Useful jQuery Recipes for ASP.NET Applications
Appendix: Learning Resources

Descarga:
Beginning_jQuery2_For_ASPNET_Developers

jueves, 21 de agosto de 2014

El Libro del Día: Professional SQL Server 2012 Internals and Troubleshooting

El Libro del Día: 2014-08-21

Titulo: Professional SQL Server 2012 Internals and Troubleshooting
Autor: Christian Bolton, Justin Langford, Glenn Berry, Gavin Payne, Amit Banerjee, Rob Farley
Editorial: Wrox
Nro Paginas: 580

Capítulos:
PART I INTERNALS
CHAPTER 1 SQL Server Architecture
CHAPTER 2 Demystifying Hardware
CHAPTER 3 Understanding Memory
CHAPTER 4 Storage Systems
CHAPTER 5 Query Processing and Execution
CHAPTER 6 Locking and Concurrency
CHAPTER 7 Latches and Spinlocks
CHAPTER 8 Knowing Tempdb
PART II T ROUBLESHOOTING TOOLS AND LESSONS
FROM THE FIELD
CHAPTER 9 Troubleshooting Methodology and Practices
CHAPTER 10 Viewing Server Performance with PerfMon and the PAL Tool
CHAPTER 11 Consolidating Data Capture with SQLdiag
CHAPTER 12 Bringing It All Together with SQL Nexus
CHAPTER 13 Diagnosing SQL Server 2012 Using Extended Events
CHAPTER 14 Enhancing Your Troubleshooting Toolset with PowerShell
CHAPTER 15 Delivering a SQL Server Health Check
CHAPTER 16 Delivering Manageability and Performance
CHAPTER 17 Running SQL Server in a Virtual Environment

Descarga:
Professional_SQLServer2012_Internals_Troubleshooting

miércoles, 20 de agosto de 2014

El Libro del Día: Visual Studio 2013 Cookbook

El Libro del Día: 2014-08-20

Titulo: Visual Studio 2013 Cookbook
Autor: Jeff Martin, Richard Banks
Editorial: Packt
Nro Paginas: 333

Capítulos:
Chapter 1: Discovering Visual Studio 2013
Chapter 2: Getting Started with Windows Store Applications
Chapter 3: Web Development – ASP.NET, HTML5, CSS, and JavaScript
Chapter 4: .NET Framework 4.5.1 Development
Chapter 5: Debugging Your .NET Application
Chapter 6: Asynchrony in .NET
Chapter 7: Unwrapping C++ Development
Chapter 8: Working with Team Foundation Server 2013
Chapter 9: Languages
Appendix: Visual Studio Medley

Descarga:
Visual_Studio_2013_Cookbook

martes, 19 de agosto de 2014

El Demo del Día: Preview de Imagen con FileReader al usar FileUpload

Preview de Imagen con FileReader al usar FileUpload

Requerimiento

Se desea enviar y grabar una imagen en el servidor desde una aplicación Web en ASP .NET, pero antes de enviarla se necesita mostrar el contenido de la imagen el el cliente (Preview).

Solución

Para este fin usaremos FileSystem API de HTML5, en especial la clase FileReader que permite leer un archivo en el cliente y devolver los datos en varios formatos, entre ellos como una URL.

Nota: En muchos sitios, esto lo hacen enviando la imagen al servidor y luego recién hacen el preview, pero si no es la imagen deseada, igual ya se fue hasta el servidor. Lo mejor es hacerlo en el cliente y evitar los envíos innecesarios al servidor web.

Crear la Aplicación Web en ASP .NET Web Form

Crear un "Nuevo Sitio web vacío de ASP .NET" en C# llamado "PreviewImagenFileUpload" y crear las siguientes carpetas:
- Archivos: Para almacenar las imágenes subidas al servidor.
- Paginas: Para contener la pagina de Registro de imágenes.
- Scripts: Para almacenar las rutinas de JavaScript No obstrusivo.

Diseñar la Pagina ASP .NET como un Formulario Web Form

Seleccionar la carpeta "Paginas" y agregar un Formulario Web Form llamado: "Registro.aspx" y escribir el siguiente código:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Registro.aspx.cs" Inherits="Paginas_Registro" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Registro de Fotos</title>
    <script src="../Scripts/Rutinas.js"></script>
    <script>cargarScriptPagina();</script>
</head>
<body style="background-color:aqua">
    <form id="frmRegistro" runat="server">
    <div style="text-align:center">
        <h1>Preview de Imagen con FileReader al usar FileUpload</h1>
        <h2>Registro de Fotos</h2>
        <h3>Selecciona la Foto a enviar:
            <asp:FileUpload ID="fupFoto" runat="server" />
        </h3>
        <img id="imgFoto" width="200" height="200" alt="" /><br />
        <asp:Button ID="btnEnviar" OnClick="btnEnviar_Click" Text="Enviar" runat="server" />
    </div>
    </form>
</body>
</html>

Nota: En la sección de Scripts se tiene que definir el archivo de JavaScript que tiene las Rutinas de validación y que realiza el Preview.

El diseño de la pagina se mostrará como en la siguiente figura:


Escribir código JavaScript No obstrusivo para Validar el envío y hacer el Preview

Seleccionar la carpeta "Scripts" y agregar un archivo de JavaScript llamado: "Rutinas.js" y escribir el siguiente código:

function cargarScriptPagina() {
    window.onload = function () {
        var frm = document.getElementById("frmRegistro");
        var fup = document.getElementById("fupFoto");
        frm.onsubmit = function () {
            if (fup.value == "") {
                alert("Selecciona un archivo de imagen");
                return false;
            }
            return(true);
        }
        fup.onchange = function (e) {
            var file = e.target.files[0];
            if (file != null) {
                var extension = file.name.substring(file.name.length - 4, file.name.length);
                if (!((extension == ".jpg") || (extension == ".png"))) {
                    alert("El archivo debe ser jpg o png");
                    return false;
                }
                var reader = new FileReader();
                if (reader != null) {
                    reader.onloadend = function () {
                        var img = document.getElementById("imgFoto");
                        img.src = reader.result;
                    };
                    reader.readAsDataURL(file);
                }
                else img.src = "No se puede mostrar la imagen";
            }
            else alert("No se puede mostrar la imagen");
        }
    }
}

Nota: En el evento "load" de la pagina se valida que se seleccione un archivo antes de enviar al servidor y cuando se selecciona un archivo se valida que sea una imagen jpg o png y se hace el preview usando la clase FileReader del FileSystem API.

Escribir código en el servidor para guardar la imagen en la carpeta Archivos

Escribir el siguiente código C# en la página:

using System;
using System.Collections.Generic;
using System.IO;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Paginas_Registro : System.Web.UI.Page
{
    protected void btnEnviar_Click(object sender, EventArgs e)
    {
        if (fupFoto.PostedFile.ContentLength > 0)
        {
            string archivo = Server.MapPath(String.Format("../Archivos/{0}",
                Path.GetFileName(fupFoto.PostedFile.FileName)));
            if (File.Exists(archivo)) File.Delete(archivo);
            fupFoto.PostedFile.SaveAs(archivo);
            ClientScript.RegisterStartupScript(this.GetType(), "Mensaje",
                "alert('La imagen fue grabada en el servidor');", true);
        }
    }
}

Nota: Se usa la propiedad "PostedFile" del control FileUpload para obtener el archivo enviado desde el cliente al servidor y lo grabamos en la carpeta Archivos usando su método "SaveAs".

Configurar el permiso de escritura al Usuario de IIS para escribir en la carpeta Archivos 

Ingresar al Explorador de Windows y seleccionar la carpeta "Archivos" de nuestro proyecto, luego clic derecho "Propiedades", seleccionar el Tab "Security" y luego clic en el botón "Edit" y luego botón "Add" para agregar al usuario de IIS, si ya existe solo seleccionarlo y luego marcar los checks para darle permiso de escritura y lectura, tal como se muestra en la siguiente figura:


Probar la Pagina Web

Guardar el Sitio Web, clic derecho a la Pagina "Registro.aspx" y seleccionar "Ver en el explorador".


Clic al botón "Enviar" sin seleccionar nada y aparecerá un mensaje de validación que indica que hay que seleccionar un archivo de imagen.

Ahora intenta seleccionar un archivo que no sea un jpg o png, por ejemplo un archivo de texto y se muestra otro mensaje de validación que indica que tiene que ser jpg o png.

Finalmente, selecciona un archivo de imagen png o jpg y clic en "Enviar" y se guarda en el servidor en la carpeta "Archivos" y se muestra un mensaje de confirmación.

Comentario Final

En este post, aprendimos como subir un archivo de imagen al servidor, pero mostrando la imagen antes de enviarla para saber si es la adecuada. Para realizar este preview lo hicimos en el cliente mediante la clase FileReader de HTML5.

Lo interesante es que funciona en la mayoría de Navegadores (Browsers), por lo menos lo probé en IE11 y Chrome 36.

Descarga:
Demo16_Preview_Imagen_FileUpload

El Libro del Día: SignalR Real-time Application Cookbook

El Libro del Día: 2014-08-19

Titulo: SignalR Real-time Application Cookbook
Autor: Roberto Vespa
Editorial: Packt
Nro Paginas: 292

Capítulos:
Chapter 1: Understanding the Basics
Chapter 2: Using Hubs
Chapter 3: Using the JavaScript Hubs Client API
Chapter 4: Using the .NET Hubs Client API
Chapter 5: Using a Persistent Connection
Chapter 6: Handling Connections
Chapter 7: Analyzing Advanced Scenarios
Chapter 8: Building Complex Applications
Appendix A: Creating Web Projects
Appendix B: Insights

Descarga:
SignalR_Realtime_Application_Cookbook

lunes, 18 de agosto de 2014

El Libro del Día: jQuery UI 1.10 The User Interface Library for jQuery

El Libro del Día: 2014-08-18

Titulo: jQuery UI 1.10 The User Interface Library for jQuery
Autor: Alex Libby, Dan Wellman
Editorial: Packt
Nro Paginas: 502

Capítulos:
Chapter 1: Introducing jQuery UI
Chapter 2: The CSS Framework and Other Utilities
Chapter 3: Using the Tabs Widget
Chapter 4: The Accordion Widget
Chapter 5: The Dialog
Chapter 6: The Slider and Progressbar Widgets
Chapter 7: The Datepicker Widget
Chapter 8: The Button and Autocomplete Widgets
Chapter 9: Creating Menus
Chapter 10: Working with Tooltips
Chapter 11: Drag and Drop
Chapter 12: The Resizable Component
Chapter 13: Selecting and Sorting with jQuery UI
Chapter 14: UI Effects
Appendix: Help and Support

Descarga:
jQueryUI_1.10_UserInterface_Library_jQuery

domingo, 17 de agosto de 2014

El Libro del Día: Using the HTML5 Filesystem API

El Libro del Día: 2014-08-17

Titulo: Using the HTML5 Filesystem API
Autor: Eric Bidelman
Editorial: O'Reilly, Google Press
Nro Paginas: 72

Capítulos:
1. Introduction
2. Storage and Quota
3. Getting Started
4. Working with Files
5. Working with Directories
6. Copying, Renaming, and Moving Entries
7. Using Files
8. The Synchronous API

Descarga:
Using_HTML5_Filesystem_API

sábado, 16 de agosto de 2014

El Libro del Día: The Definitive Guide to HTML5 WebSocket

El Libro del Día: 2014-08-16

Titulo: The Definitive Guide to HTML5 WebSocket
Autor: Vanessa Wang, Frank Salim, Peter Moskovits
Editorial: Apress
Nro Paginas: 200

Capítulos:
Chapter 1: Introduction to HTML5 WebSocket
Chapter 2: The WebSocket API
Chapter 3: The WebSocket Protocol
Chapter 4: Building Instant Messaging and Chat
over WebSocket with XMPP
Chapter 5: Using Messaging over WebSocket with STOMP
Chapter 6: VNC with the Remote Framebuffer Protocol
Chapter 7: WebSocket Security
Chapter 8: Deployment Considerations
Appendix A: Inspecting WebSocket Traffic
Appendix B: WebSocket Resources

Descarga:
The_Definitive_Guide_HTML5_WebSocket

viernes, 15 de agosto de 2014

El Libro del Día: The Definitive Guide to HTML5 Video

El Libro del Día: 2014-08-15

Titulo: The Definitive Guide to HTML5 Video
Autor: Silvia Pfeiffer
Editorial: Apress
Nro Paginas: 337

Capítulos:
Chapter 1: Introduction
Chapter 2: Audio and Video Elements
Chapter 3: CSS3 Styling
Chapter 4: JavaScript API
Chapter 5: HTML5 Media and SVG
Chapter 6: HTML5 Media and Canvas
Chapter 7: HTML5 Media and Web Workers
Chapter 8: HTML5 Audio API
Chapter 9: Media Accessibility and Internationalization
Chapter 10: Audio and Video Devices
Appendix: Summary and Outlook

Descarga:
The_Definitive_Guide_HTML5_Video

jueves, 14 de agosto de 2014

El Demo del Día: Plantilla Jerárquica con el Control Web Repeater

Plantilla Jerárquica con el Control Web Repeater

Requerimiento

Se desea mostrar una consulta jerárquica de productos por categoría en una grilla en ASP .NET. La consulta debe ser desconectada.

Solución

No existe un control Jerárquico que muestre varias columnas tipo TreeGrid. El control TreeView muestra solo un nodo y el control GridView no soporta jerarquía.
La solución es usar plantillas jerárquicas en cualquiera de los controles enlazados a datos: GridView, DataList o Repeater.
Nosotros elegimos el Repeater y crearemos una plantilla jerárquica, es decir un control Repeater con otro control Repeater dentro.

Nota: En este caso quitaremos el ViewState en los dos controles Repeater para disminuir el HTML enviado al cliente ya que los filtros se harán en el servidor pero se mostraran en el cliente con Javascript.

Crear el Procedimiento Almacenado en la Base de Datos de SQL Server

Create Procedure [dbo].[uspCategoriesProductsListar]
As
Select CategoryID,CategoryName From Categories
Select ProductID,ProductName,SupplierID,CategoryID,UnitPrice,UnitsInStock From Products

Crear una Librería de Clases con las Entidades del Negocio

Crear un proyecto de tipo Librería de Clases en C# llamado: "Northwind.Librerias.EntidadesNegocio" y modificar el código de la clase como sigue:

using System;
namespace Northwind.Librerias.EntidadesNegocio
{
    public class beCategoria
    {
        public int IdCategoria { get; set; }
        public string Nombre { get; set; }
    }
}

Agregar una nueva clase al proyecto y llamarla "beProducto":

using System;
namespace Northwind.Librerias.EntidadesNegocio
{
    public class beProducto
    {
        public int IdProducto { get; set; }
        public string Nombre { get; set; }
        public int IdProveedor { get; set; }
        public int IdCategoria { get; set; }
        public decimal PrecioUnitario { get; set; }
        public short Stock { get; set; }
    }
}

Agregar otra clase al proyecto y llamarla "beCategoriaProducto":

using System;
using System.Collections.Generic;
namespace Northwind.Librerias.EntidadesNegocio
{
    public class beCategoriaProducto
    {
        public List<beCategoria> ListaCategorias { get; set; }
        public List<beProducto> ListaProductos { get; set; }
    }
}

Crear una Librería de Acceso a Datos

Crear un proyecto de tipo Librería de Clases en C# llamado: "Northwind.Librerias.AccesoDatos", primero hacer una referencia a la Librería de Entidades del Negocio y luego modificar el código de la clase como sigue:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using Northwind.Librerias.EntidadesNegocio;

namespace Northwind.Librerias.AccesoDatos
{
    public class daCategoriaProducto
    {
        public beCategoriaProducto obtenerListas(SqlConnection con)
        {
            beCategoriaProducto obeCategoriaProducto = new beCategoriaProducto();
            List<beCategoria> lbeCategoria = null;
            List<beProducto> lbeProducto = null;

            SqlCommand cmd = new SqlCommand("uspCategoriesProductsListar", con);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlDataReader drd = cmd.ExecuteReader(); //Varios Selects
            if (drd != null)
            {
                //Llenar las Categorias
                lbeCategoria = new List<beCategoria>();
                int posIdCat = drd.GetOrdinal("CategoryID");
                int posNomCat = drd.GetOrdinal("CategoryName");
                beCategoria obeCategoria;
                while (drd.Read())
                {
                    obeCategoria = new beCategoria();
                    obeCategoria.IdCategoria = drd.GetInt32(posIdCat);
                    obeCategoria.Nombre = drd.GetString(posNomCat);
                    lbeCategoria.Add(obeCategoria);
                }
                //Avanzar al siguiente Select
                if (drd.NextResult())
                {
                    //Llenar los Productos
                    lbeProducto = new List<beProducto>();
                    int posIdProducto = drd.GetOrdinal("ProductID");
                    int posNombre = drd.GetOrdinal("ProductName");
                    int posIdProveedor = drd.GetOrdinal("SupplierID");
                    int posIdCategoria = drd.GetOrdinal("CategoryID");
                    int posPrecioUnitario = drd.GetOrdinal("UnitPrice");
                    int posStock = drd.GetOrdinal("UnitsInStock");
                    beProducto obeProducto;
                    while (drd.Read())
                    {
                        obeProducto = new beProducto();
                        obeProducto.IdProducto = drd.GetInt32(posIdProducto);
                        obeProducto.Nombre = drd.GetString(posNombre);
                        obeProducto.IdProveedor = drd.GetInt32(posIdProveedor);
                        obeProducto.IdCategoria = drd.GetInt32(posIdCategoria);
                        obeProducto.PrecioUnitario = drd.GetDecimal(posPrecioUnitario);
                        obeProducto.Stock = drd.GetInt16(posStock);
                        lbeProducto.Add(obeProducto);
                    }
                }
                drd.Close();
                obeCategoriaProducto.ListaCategorias = lbeCategoria;
                obeCategoriaProducto.ListaProductos = lbeProducto;
            }
            return (obeCategoriaProducto);
        }
    }
}

Crear una Librería de Reglas del Negocio

Crear un proyecto de tipo Librería de Clases en C# llamado: "Northwind.Librerias.ReglasNegocio", hacer una referencia a la Librería de Entidades del Negocio, a la Librería de Acceso a Datos y a System.Configuration y luego modificar el código de la clase como sigue:

using System;
using System.Configuration; //ConfigurationManager
namespace Northwind.Librerias.ReglasNegocio
{
    public class brGeneral
    {
        //Propiedad
        public string Conexion { get; set; }

        //Constructor
        public brGeneral()
        {
            Conexion = ConfigurationManager.ConnectionStrings["conNW"].ConnectionString;
        }
    }
}

Agregar otra clase llamada: "brCategoriaProducto:" y escribir el siguiente código:

using System;
using System.Collections.Generic; //List
using System.Data.SqlClient; //SqlConnection
using Northwind.Librerias.EntidadesNegocio; //beCategoriaProducto
using Northwind.Librerias.AccesoDatos; //daCategoriaProducto

namespace Northwind.Librerias.ReglasNegocio
{
    public class brCategoriaProducto:brGeneral
    {
        public beCategoriaProducto obtenerListas()
        {
            beCategoriaProducto obeCategoriaProducto = null;
            using (SqlConnection con = new SqlConnection(Conexion))
            {
                try
                {
                    con.Open();
                    daCategoriaProducto odaCategoriaProducto = new daCategoriaProducto();
                    obeCategoriaProducto = odaCategoriaProducto.obtenerListas(con);
                }
                catch (SqlException ex)
                {
                    //Capturar el error y grabar un Log
                }
            } //con.Close(); con.Dispose(); con = null;
            return (obeCategoriaProducto);
        }
    }
}

Nota: La clase "brCategoriaProducto" hereda de la clase "brGeneral" la cadena de conexión para no pasarla como parámetro en cada método de la clase o en el constructor de cada clase se hace una sola vez.

Crear la Aplicación Web en ASP .NET Web Form

Crear un "Nuevo Sitio web vacío de ASP .NET" en C# llamado "Demo15" y crear las siguientes carpetas:
- Estilos: Para el archivo de hoja de estilo (CSS).
- Imagenes: Conteniendo 2 archivos: Contraer.png y Expandir.png
- Paginas: Para contener la pagina de lista de empleados.

Crear el Archivo de Hoja de Estilo (CSS)

Seleccionar la carpeta "Estilos" y agregar un archivo de hoja de estilos con el nombre de: "ACME.css" y modificar el código como sigue:

body {
    background-color:aqua;
}
.Titulo {
    background-color:black;
    color:white;
    text-transform:uppercase;
    font-size:xx-large;
    font-weight:bold;
}
.Subtitulo {
    background-color:white;
    color:blue;
    text-transform:capitalize;
    font-size:x-large;
    font-weight:bold;
}

Crear la Pagina ASP .NET como un Formulario Web Form

Seleccionar la carpeta "Paginas" y agregar un Formulario Web Form llamado: "CategoriaProductos.aspx", para empezar a diseñar la pagina hay que hacer referencia a las Librerías de Negocio (que copia todas sus dependencias).

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CategoriaProductos.aspx.cs" Inherits="Paginas_CategoriaProducto" %>
<%@ Import Namespace="Northwind.Librerias.EntidadesNegocio" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <link href="../Estilos/ACME.css" rel="stylesheet" type="text/css" />
    <script>
        function mostrarProductos(img, indice) {
            var fila = document.getElementById("fila" + indice);
            if (img.title == "Expandir") {
                fila.style.display = "table-row";
                img.src = "../Imagenes/Contraer.png";
                img.title = "Contraer";
            }
            else {
                fila.style.display = "none";
                img.src = "../Imagenes/Expandir.png";
                img.title = "Expandir";
            }
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table style="width:100%">
            <tr>
                <td class="Titulo">Plantillas Jerarquicas en el Repeater</td>
            </tr>
            <tr>
                <td class="Subtitulo">Consulta de Productos x Categoria</td>
            </tr>
            <tr>
                <td>
                    <asp:Repeater ID="rpCategoria" EnableViewState="false" runat="server">
                        <HeaderTemplate>
                            <table style="width:100%">
                                <tr style="background-color:blue;color:white">
                                    <td style="width:10%">Código</td>
                                    <td style="width:90%">Nombre de la Categoria</td>
                                </tr>
                        </HeaderTemplate>
                        <ItemTemplate>
                            <tr style="background-color:white;color:blue">
                                <td>
                                    <img id="imgSimbolo" alt="" title="Expandir"
                                       src="../Imagenes/Expandir.png"
                                        width="20" height="20" style="cursor:pointer"
                                        onclick="mostrarProductos(this,<%#Container.ItemIndex%>);"/>
                                    &nbsp;&nbsp;
                                    <%#((beCategoria)Container.DataItem).IdCategoria%>
                                </td>
                                <td>
                                    <%#((beCategoria)Container.DataItem).Nombre%>
                                </td>
                            </tr>
                            <tr id="fila<%#Container.ItemIndex%>" style="display:none">
                                <td></td>
                                <td>
                                    <asp:Repeater ID="rpProducto" DataSource="<%#filtrarProductos
                                      (((beCategoria)Container.DataItem).IdCategoria)%>"
                                      EnableViewState="false" runat="server">
                                         <HeaderTemplate>
                                            <table style="width:100%">
                                                <tr style="background-color:red;color:white">
                                                    <td style="width:20%">Código</td>
                                                    <td style="width:40%">Nombre del Producto</td>
                                                    <td style="width:20%">Precio</td>
                                                    <td style="width:20%">Stock</td>
                                                </tr>
                                        </HeaderTemplate>
                                        <ItemTemplate>
                                            <tr style="background-color:white;color:red">
                                                <td><%#((beProducto)Container.DataItem).IdProducto%></td>
                                                <td><%#((beProducto)Container.DataItem).Nombre%></td>
                                                <td><%#((beProducto)Container.DataItem).
                                                          PrecioUnitario.ToString("n2")%></td>
                                                <td><%#((beProducto)Container.DataItem).Stock%></td>
                                            </tr>
                                        </ItemTemplate>
                                        <FooterTemplate>
                                            </table>
                                        </FooterTemplate>
                                    </asp:Repeater>
                                </td>
                            </tr>
                        </ItemTemplate>
                        <FooterTemplate>
                            </table>
                        </FooterTemplate>
                    </asp:Repeater>
                </td>
            </tr>
        </table>
    </div>
    </form>
</body>
</html>

Nota: Inicialmente los controles Repeaters de productos creados por cada categoría están ocultos (display:none), pero por código Javascript lo mostramos usando: display:"table-row". No usamos display:inline ya que no se vería bien en algunos navegadores, en cambio, usando "table-row" se muestra sin problemas en todos los navegadores.

El diseño de la pagina se mostrará como en la siguiente figura:


Escribir el siguiente código C# en la página:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Northwind.Librerias.EntidadesNegocio;
using Northwind.Librerias.ReglasNegocio;

public partial class Paginas_CategoriaProducto : System.Web.UI.Page
{
    private List<beProducto> lbeProducto;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            brCategoriaProducto obrCategoriaProducto = new brCategoriaProducto();
            beCategoriaProducto obeCategoriaProducto = obrCategoriaProducto.obtenerListas();
            lbeProducto = obeCategoriaProducto.ListaProductos;
            rpCategoria.DataSource = obeCategoriaProducto.ListaCategorias;
            rpCategoria.DataBind();
        }
    }

    protected List<beProducto> filtrarProductos(int idCategoria)
    {
        return (lbeProducto.FindAll(x => x.IdCategoria.Equals(idCategoria)));
    }
}

Nota: En el evento load se carga las 2 listas de categorías y productos, luego se enlaza las categorías al primer control Repeater y el segundo se enlaza a una función "filtrarProductos" que solo selecciona las productos de cada categoría.

Modificar el Archivo Web.Config para especificar la cadena de conexión a Northwind

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="conNW" providerName="SQLServer" connectionString="uid=UsuarioNW;pwd=123456;
      data source=DSOFT\Sqlexpress; database=Northwind"/>
  </connectionStrings>
    <system.web>
      <compilation debug="true" targetFramework="4.5" />
      <httpRuntime targetFramework="4.5" />
    </system.web>
</configuration>

Probar la Pagina Web

Guardar el Sitio Web, clic derecho a la Pagina "CategoriaProductos.aspx" y seleccionar "Ver en el explorador".


Desplegar cada código de categoría dando clic a la imagen de Expandir (+) y se mostrarán los productos de dicha categoría y para ocultarla usar la imagen de Contraer (-).

Comentario Final

En este post hemos visto como crear una presentación jerárquica usando plantillas en el control Repeater. Hemos trabajado solo con 2 niveles pero podría ser de varios niveles. Como comentario final, si aprendemos bien a usar plantillas de datos (Data Templates) en cualquier control web (enlazado a datos) podemos darle la apariencia que deseemos, sin necesidad de tener un control especifico para cada funcionalidad.

Espero les sirva y será hasta la siguiente semana que veremos como trabajar con el GridView: Paginar, Ordenar, Filtrar en las cabeceras, Pies, etc.

Descarga:
Demo15_Plantilla_Jerarquica_Repeater




El Libro del Día: Pro Silverlight 5 in C#

El Libro del Día: 2014-08-14

Titulo: Pro Silverlight 5 in C# (4th Edition)
Autor: Matthew MacDonald
Editorial: Apress
Nro Paginas: 970

Capítulos:
Chapter 1: Introducing Silverlight
Chapter 2: XAML
Chapter 3: Layout
Chapter 4: Dependency Properties and Routed Events
Chapter 5: Elements
Chapter 6: The Application Model
Chapter 7: Navigation
Chapter 8: Shapes and Transforms
Chapter 9: Brushes, Bitmaps, and Printing
Chapter 10: Animation Basics
Chapter 11: Advanced Animation
Chapter 12: Sound, Video, and Deep Zoom
Chapter 13: Silverlight 3D
Chapter 14: Styles and Behaviors
Chapter 15: Control Templates
Chapter 16: Multithreading
Chapter 17: Browser Integration
Chapter 18: Out-of-Browser Applications
Chapter 19: ASP.NET Web Services
Chapter 20: Data Binding
Chapter 21: Data Controls
Chapter 22: File Access
Chapter 23: Networking

Descarga:
Pro_Silverlight_5_C#

miércoles, 13 de agosto de 2014

El Libro del Día: WebRTC Blueprints

El Libro del Día: 2014-08-13

Titulo: WebRTC Blueprints
Autor: Andrii Sergiienko
Editorial: Packt
Nro Paginas: 176

Capítulos:
Chapter 1: Developing a WebRTC Application
Chapter 2: Using the WebRTC Data API
Chapter 3: The Media Streaming and Screen Casting Services
Chapter 4: Security and Authentication
Chapter 5: Mobile Platforms

Descarga:
WebRTC_Blueprints

martes, 12 de agosto de 2014

El Libro del Día: Learning Responsive Web Design

El Libro del Día: 2014-08-12

Titulo: Learning Responsive Web Design
Autor: Clarissa Peterson
Editorial: O'Reilly
Nro Paginas: 412

Capítulos:
Part I FOUNDAT IONS OF RESPONSIVE DESIGN
Chapter 1 What Is Responsive Design?
Chapter 2 Responsive Content
Part II CREAT ING RESPONSIVE WEBSITES
Chapter 3 HTML for Responsive Sites
Chapter 4 CSS for Responsive Sites
Chapter 5 Media Queries
Chapter 6 Images
Part III WORKING RESPONSIVELY
Chapter 7 Responsive Workflow
Chapter 8 Mobile and Beyond
Part IV DESIGNING RESPONSIVE WEBSITES
Chapter 9 Typography
Chapter 10 Navigation and Header Layout
Chapter 11 Performance

Descarga:
Learning_Responsive_Web_Design

lunes, 11 de agosto de 2014

El Libro del Día: HTML5 and CSS3 Responsive Web Design Cookbook

El Libro del Día: 2014-08-11

Titulo: HTML5 and CSS3 Responsive Web Design Cookbook
Autor: Benjamin LaGrone
Editorial: Packt
Nro Paginas: 204

Capítulos:
Chapter 1: Responsive Elements and Media
Chapter 2: Responsive Typography
Chapter 3: Responsive Layout
Chapter 4: Using Responsive Frameworks
Chapter 5: Making Mobile-first Web Applications
Chapter 6: Optimizing Responsive Content
Chapter 7: Unobtrusive JavaScript

Descarga:
HTML5_CSS3_Responsive_Web_Design_Cookbook

domingo, 10 de agosto de 2014

El Libro del Día: Jump Start Responsive Web Design

El Libro del Día: 2014-08-10

Titulo: Jump Start Responsive Web Design
Autor: Craig Sharkie, Andrew Fisher
Editorial: SitePoint
Nro Paginas: 161

Capítulos:
Chapter 1 Becoming Responsive
Chapter 2 Fluid Grids
Chapter 3 Adaptive Images
Chapter 4 Understanding Media Queries
Chapter 5 Responsive Content
Chapter 6 Responsive Boilerplate

Descarga:
JumpStart_Responsive_Web_Design

sábado, 9 de agosto de 2014

El Libro del Día: Professional Visual Studio 2013

El Libro del Día: 2014-08-09

Titulo: Professional Visual Studio 2013
Autor: Bruce Johnson
Editorial: Wrox
Nro Paginas: 1102

Capítulos:
Part I - Integrated Development Environment
Chapter 1 A Quick Tour
Chapter 2 The Solution Explorer, Toolbox, and Properties
Chapter 3 Options and Customizations
Chapter 4 The Visual Studio Workspace
Chapter 5 Find and Replace and Help
Part II - Getting Started
Chapter 6 Solutions, Projects, and Items
Chapter 7 IntelliSense and Bookmarks
Chapter 8 Code Snippets and Refactoring
Chapter 9 Server Explorer
Chapter 10 Modeling with the Class Designer
Part III - Digging Deeper
Chapter 11 Unit Testing
Chapter 12 Documentation with XML Comments
Chapter 13 Code Consistency Tools
Chapter 14 Code Generation with T4
Chapter 15 Project and Item Templates
Chapter 16 Language-Specific Features
Part IV - Rich Client Applications
Chapter 17 Windows Forms Applications
Chapter 18 Windows Presentation Foundation (WPF)
Chapter 19 Office Business Applications
Chapter 20 Windows Store Applications
Part V - Web Applications
Chapter 21 ASP.NET Web Forms
Chapter 22 ASP.NET MVC
Chapter 23 Silverlight
Chapter 24 Dynamic Data
Chapter 25 SharePoint
Chapter 26 Windows Azure
Part VI - Data
Chapter 27 Visual Database Tools
Chapter 28 DataSets and DataBinding
Chapter 29 Language Integrated Queries (LINQ)
Chapter 30 The ADO.NET Entity Framework
Chapter 31 Reporting
Part VII - Application Services
Chapter 32 Windows Communication Foundation (WCF)
Chapter 33 Windows Workflow Foundation (WF)
Chapter 34 Client Application Services
Chapter 35 Synchronization Services
Chapter 36 WCF RIA Services
Part VIII Configuration and Resources
Chapter 37 Configuration Files
Chapter 38 Connection Strings
Chapter 39 Resource Files
Part IX - Debugging
Chapter 40 Using the Debugging Windows
Chapter 41 Debugging with Breakpoints
Chapter 42 DataTips, Debug Proxies, and Visualizers
Chapter 43 Debugging Web Applications
Chapter 44 Advanced Debugging Techniques
Part X - Build and Deployment
Chapter 45 Upgrading with Visual Studio 2013
Chapter 46 Build Customization
Chapter 47 Assembly Versioning and Signing
Chapter 48 Obfuscation, Application Monitoring, and Management
Chapter 49 Packaging and Deployment
Chapter 50 Web Application Deployment
Part XI - Customizing and Extending Visual Studio
Chapter 51 The Automation Model
Chapter 52 Add-Ins
Chapter 53 Managed Extensibility Framework (MEF)
Part XII - Visual Studio Ultimate
Chapter 54 Visual Studio Ultimate for Architects
Chapter 55 Visual Studio Ultimate for Developers
Chapter 56 Visual Studio Ultimate for Testers
Chapter 57 Team Foundation Server

Descarga:
Professional_VisualStudio_2013

viernes, 8 de agosto de 2014

El Libro del Día: Pro ASP.NET 4.5 in VB

El Libro del Día: 2014-08-08

Titulo: Pro ASP.NET 4.5 in VB (5th Edition)
Autor: Dan Mabbutt, Adam Freeman, Matthew MacDonald
Editorial: Apress
Nro Paginas: 1192

Capítulos:
Part 1: Getting Started
Chapter 1: Your First ASP.NET Application
Chapter 2: Putting ASP.NET in Context
Chapter 3: Essential VB Language Features
Chapter 4: Using jQuery
Chapter 5: Essential Development Tools
Chapter 6: SportsStore: A Real Application
Chapter 7: SportsStore: Navigation and Cart
Chapter 8: SportsStore: Completing the Cart
Chapter 9: SportsStore: Administration
Chapter 10: SportsStore: Deployment
Chapter 11: Testable Web Apps
Part 2: The Core ASP.NET Platform
Chapter 12: Working with Web Forms
Chapter 13: Lifecycles and Context
Chapter 14: Modules
Chapter 15: Handlers
Chapter 16: Page and Control Lifecycle Events
Chapter 17: Managing Request Execution
Chapter 18: Managing State Data
Chapter 19: Caching
Chapter 20: Caching Output
Chapter 21: Handling Errors
Chapter 22: Managing Paths
Chapter 23: URL Routing
Chapter 24: Advanced URL Routing
Chapter 25: Authentication and Authorization
Chapter 26: Membership and OpenAuth
Chapter 27: ASP.NET Configuration
Chapter 28: Asynchronous Request Handling
Part 3: Forms and Controls
Chapter 29: Working with Controls
Chapter 30: Forms and Request Validation
Chapter 31: Creating Custom Controls
Chapter 32: Stateful Controls
Chapter 33: Server-Side HTML Elements
Chapter 34: Model Binding
Chapter 35: Data Binding
Chapter 36: Basic Data Controls
Chapter 37: Complex Data Controls
Chapter 38: Other ASP.NET Controls
Part 4: Client-Side Development
Chapter 39: Managing Scripts and Styles
Chapter 40: Ajax and Web Services
Chapter 41: Client-Side Validation

Descarga:
Pro_ASPNET_4.5_VB