domingo, 31 de julio de 2016

Entrenamiento - Capacitación a Empresas en Desarrollo Web ASP.NET MVC & JavaScript

Capacitación a Empresas en Desarrollo Web ASP.NET MVC & JavaScript

Hoy finalice mi último curso libre, porque ya no pienso dictar excepto a Empresas, pero me preguntaba porque si mi arquitectura de desarrollo web ligera y desconectada es tan buena no hay mucha demanda en el mercado y creo que la respuesta es que la mayoría de desarrolladores al no tener un punto de comparación no pueden ver las diferencias enormes en el tiempo de desarrollo de las aplicaciones ni el tiempo en ejecución de la aplicación.

Es por eso que he decidido dar una muestra gratis (sin costo) para hacer una visita a cualquier empresa que esté interesada en cambiar su esquema de trabajo actual consistente en tener muchos programadores que usan muchos Frameworks por todos lados (en el servidor y en cliente) y siempre se demoran en los proyectos y el resultado final (velocidad, seguridad, etc) deja mucho que desear y solo queda con conformarse ya que "ya se realizó la inversión" y a nadie le gusta perder y eligen que el monstruo concebido siga en producción.

La mecánica es bien simple, solo me envían un mail a Luis.duenash@gmail.com con los siguientes datos:
- Nombre de la Empresa
- Rubro
- Persona de Contacto
- Teléfono e Email del Contacto
- Fecha y Hora de la Exposición de 30 a 60 minutos con su equipo de desarrolladores
- Dirección del lugar de la Exposición

Si están convencidos de los resultados de la metodología, la arquitectura y las técnicas se programa la capacitación, sino no hay ningún compromiso.

En términos monetarios para un Gerente o Jefe, si se les capacita a los programadores para hacer el trabajo más eficiente y eficaz con pocos recursos en el menor tiempo, estas ganando mucho dinero y el costo (inversión) es mínimo comparado con lo que se van a ahorrar.

Uno de los valores agregados que doy a las empresas que me eligen para capacitarlos es que consigo (sin ningún costo) a desarrolladores que conocen mi metodología y que resultan ser los mejores en cada lugar donde se ubiquen.

El Libro del Día: C# 24-Hour Trainer

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

Titulo: C# 24-Hour Trainer (2nd Edition)
Autor: Rod Stephens
Editorial: Wrox
Nro Paginas: 597

Capítulos:
SECTION I THE VISUAL STUDIO IDE AND CONTROLS
LESSON 1 Getting Started with the Visual Studio IDE
LESSON 2 Creating Controls
LESSON 3 Making Controls Arrange Themselves
LESSON 4 Handling Events
LESSON 5 Making Menus
LESSON 6 Making Tool Strips and Status Strips
LESSON 7 Using RichTextBoxes
LESSON 8 Using Standard Dialogs
LESSON 9 Creating and Displaying New Forms
LESSON 10 Building Custom Dialogs
SECTION II VARIABLES AND CALCULATIONS
LESSON 11 Using Variables and Performing Calculations
LESSON 12 Debugging Code
LESSON 13 Understanding Scope
LESSON 14 Working with Strings
LESSON 15 Working with Dates and Times
LESSON 16 Using Arrays and Collections
LESSON 17 Using Enumerations and Structures
SECTION III PROGRAM STATEMENTS
LESSON 18 Making Choices
LESSON 19 Repeating Program Steps
LESSON 20 Reusing Code with Methods
LESSON 21 Handling Errors
LESSON 22 Preventing Bugs
SECTION IV CLASSES
LESSON 23 Defining Classes
LESSON 24 Initializing Objects
LESSON 25 Fine-Tuning Classes
LESSON 26 Overloading Operators
LESSON 27 Using Interfaces
LESSON 28 Making Generic Classes
SECTION V SYSTEM INTERACTIONST
LESSON 29 Using Files
LESSON 30 Printing
SECTION VI WINDOWS APPS
LESSON 31 Windows Store Apps
LESSON 32 Windows Phone Apps
SECTION VII SPECIALIZED TOPICS
LESSON 33 Localizing Programs
LESSON 34 Programming Databases, Part 1
LESSON 35 Programming Databases, Part 2
LESSON 36 LINQ to Objects
LESSON 37 LINQ to SQL

Descarga:
C#_24_Hour_Trainer

Entrenamiento - Fin del Taller de ASP.NET MVC & JavaScript

Fin del Taller de ASP.NET MVC & JavaScript

Este post es para agradecer a los participantes de mi último taller de ASP.NET MVC & JavaScript de los Domingos. Como no hay certificados, la mejor constancia que han culminado el entrenamiento en técnicas desconectadas usando JavaScript nativo es publicar sus nombres para que las Empresas conozcan al grupo de personas que está preparada con una visión diferente del desarrollo.

Gracias a todos ustedes por compartir momentos educativos cada fin de semana. La lista de participantes por orden alfabético es la siguiente:

01 Aranda Rosales, Jaime Jesús
02 Beteta, Antonio
03 Cabrera Otoya, Jimmy
04 Chávez Córdova, Billy Herbert
05 Ciudad, Brayan
06 Condor Castillo, Edgar
07 Gaspar Chumpitaz, Oscar Michael
08 Huamaní García, Eduardo Felipe
09 Llontop Caballero, Jhony Frank
10 Marquez Redhead, Jorge Manuel
11 Miraya Anamaría, Edgar
12 Moreno Gomez, Juan Carlos
13 Palacios, Mario
14 Paredes Urbano, Gary W.
15 Palomino Oliva, Alan Francesco
16 Rengifo Ocrospoma, Joseph
17 Reyes Espinoza, Ray
18 Reyes, Alex
19 Rivera Molina, Pool
20 Saavedra Mejia, Miguel
21 Schwarz Moreno, Edward
22 Silva, Madeleyne
23 Tasayco Trigozo, José
24 Tito Fernandez, Erick
25 Vallejo Aguilar, Fernando
26 Vera Morocho, Edinson
27 Zambrano Pérez, Rolando José

Suerte a todos ustedes y éxito para salir a conquistar el mercado que están muy bien preparados, quizás en un nivel que todavía tomará tiempo que otros exploren.

viernes, 29 de julio de 2016

El Libro del Día: Beginning Visual C# 2015 Programming

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

Titulo: Beginning Visual C# 2015 Programming
Autor: Benjamin Perkins, Jacob Vibe Hammer, Jon D. Reid
Editorial: Wrox
Nro Paginas: 842

Capítulos:
PART I: THE OOP LANGUAGE
CHAPTER 1: INTRODUCING C#
CHAPTER 2: WRITING A C# PROGRAM
CHAPTER 3: VARIABLES AND EXPRESSIONS
CHAPTER 4: FLOW CONTROL
CHAPTER 5: MORE ABOUT VARIABLES
CHAPTER 6: FUNCTIONS
CHAPTER 7: DEBUGGING AND ERROR HANDLING
CHAPTER 8: INTRODUCTION TO OBJECT-ORIENTED PROGRAMMING
CHAPTER 9: DEFINING CLASSES
CHAPTER 10: DEFINING CLASS MEMBERS
CHAPTER 11: COLLECTIONS, COMPARISONS,AND CONVERSIONS
CHAPTER 12: GENERICS
CHAPTER 13: ADDITIONAL C# TECHNIQUES
PART II: WINDOWS PROGRAMMING
CHAPTER 14: BASIC DESKTOP PROGRAMMING
CHAPTER 15: ADVANCED DESKTOP PROGRAMMING
PART III: CLOUD PROGRAMMING
CHAPTER 16: BASIC CLOUD PROGRAMMING
CHAPTER 17: ADVANCED CLOUD PROGRAMING AND DEPLOYMENT
PART IV: DATA ACCESS
CHAPTER 18: FILES
CHAPTER 19: XML AND JSON
CHAPTER 20: LINQ
CHAPTER 21: DATABASES
PART V: ADDITIONAL TECHNIQUES
CHAPTER 22: WINDOWS COMMUNICATION FOUNDATION
CHAPTER 23: UNIVERSAL APPS

Descarga:
Beginning_Visual_C#_2015_Programming

jueves, 28 de julio de 2016

Artículo - Silicon Valley

Silicon Valley

La misión principal de este blog es la cultura en computación, programación, sistemas y TI en general, es por eso que he elaborado este artículo sobre uno de los sitios más importantes del mundo donde se han desarrollado durante décadas muchas empresas (Start-ups) y muchos productos o servicios innovadores, a continuación un resumen sobre Silicon Valley, extraído de diferentes fuentes: Wikipedia, SiliconValley.com, GoodReads.com, YouTube, etc.

1. Ubicación e Importancia (fuente: Wikipedia)

Silicon Valley o Valle de Silicio es el nombre que recibe la zona sur del Área de la Bahía de San Francisco, en el norte de California, Estados Unidos.4 La región cuyo nombre proviene del Valle de Santa Clara, incluye la mitad sur de la Península de San Francisco, abarcando aproximadamente desde Menlo Park hasta San José y cuyo centro se situaría en Sunnyvale. Sin embargo, con el rápido aumento de la cantidad de puestos de trabajo relacionados con la tecnología en la zona metropolitana de San Francisco, las fronteras tradicionales de Silicon Valley se han expandido hacia el norte incluyendo el condado de San Mateo y la ciudad de San Francisco, como también partes del condado de Marin.

El Silicon Valley aloja muchas de las mayores corporaciones de tecnología del mundo y miles de pequeñas empresas en formación (start-ups). Originalmente la denominación se relacionaba con el gran número de innovadores y fabricantes de chips de silicio fabricados allí, pero definitivamente acabó haciendo referencia a todos los negocios de alta tecnología establecidos en la zona; en la actualidad es utilizado como un metónimo para el sector de alta tecnología de los Estados Unidos (a la manera de Hollywood para el cine estadounidense).

A pesar del desarrollo de otros centros económicos de alta tecnología en Estados Unidos y por el mundo, Silicon Valley continúa siendo el centro líder para la innovación y desarrollo de alta tecnología, recibiendo un tercio (1/3) del total de la inversión de capital de riesgo en Estados Unidos.

2. Historia (fuente: Wikipedia)

La ubicación de las industrias de alta tecnología en el valle se debió, en gran medida, a William Shockley y Frederick Terman.

Terman, profesor de la Universidad de Stanford, consideró que una vasta zona sin utilizar de propiedad de la universidad sería perfecta para el desarrollo inmobiliario e intelectual y estableció un programa para incentivar a los estudiantes graduados a quedarse allí, proveyéndoles de capital de riesgo. Uno de los principales éxitos en la historia del programa fue que logró convencer a dos graduados: William Hewlett y David Packard, quienes conformarían la empresa Hewlett-Packard, la cual se convertiría en una de las primeras firmas tecnológicas que no estaban directamente relacionadas con la NASA o la Marina estadounidense.

En 1951 el programa se amplió nuevamente, creando el "Parque Industrial de Stanford" (Stanford Industrial Park en inglés), que consistía en una serie de pequeños edificios industriales que eran alquilados a muy bajo coste a compañías técnicas. En 1954 se instituyó The Honors Cooperative Program, actualmente llamado coop, para permitirle a los empleados a tiempo completo de las compañías obtener títulos universitarios estudiando en un régimen de media jornada. Las primeras compañías firmaron acuerdos de cinco años en los cuales establecían que pagarían el doble de la matrícula por cada estudiante para cubrir los gastos. Hacia mediados de los 50 la estructura de lo que posteriormente permitiría la creación del "valle" se encontraba en una etapa ascendente gracias a los esfuerzos de Terman.

Fue en esta atmósfera en la que un antiguo californiano decidió mudarse allí. William Shockley, quien había abandonado Bell Labs en 1953 por un desacuerdo sobre la forma en que se había presentado el transistor al público, ya que debido a los intereses de patentes, se relegó su nombre a un segundo plano en favor de los coinventores John Bardeen y Walter Houser Brattain. Tras divorciarse de su mujer, volvió al Instituto de Tecnología californiano donde se graduó en Ciencias, pero se trasladó a Mountain View para crear la empresa Shockley Semiconductor como parte de Beckman Instruments y vivir más cerca de su madre.

A diferencia de otros investigadores que utilizaban germanio como material semiconductor, Shockley creía que el silicio era un mejor material para fabricar transistores. Shockley se propuso mejorar el transistor con un diseño de tres elementos (hoy se le conoce como el diodo Shockley) que obtendría éxito comercial, pero cuyo diseño era considerablemente más difícil de construir que el diseño convencional. A medida que el proyecto pasó por varias dificultades, Shockley se volvió cada vez más paranoico. Exigió que los empleados se sometieran a un detector de mentiras, anunció sus salarios públicamente y, en general, se enemistó con todo el mundo, y en 1957, Shockley decide finalizar el trabajo relacionado con el transistor de silicio, todos factores que ayudaron a que en 1957, ocho de los ingenieros más brillantes, que él mismo había contratado, lo abandonaran para formar la compañía Fairchild Semiconductor. Shockley los llamaba los "ocho traidores". Dos de los empleados del grupo original de Fairchild Semiconductor, Robert Noyce y Gordon Moore, a su vez luego fundarían Intel.

Durante los años siguientes este hecho se repetiría varias veces; a medida que los ingenieros perdían el control de las compañías que crearon al caer en manos de directivas exteriores, las abandonaban para formar sus propias empresas. AMD, Signetics, National Semiconductor e Intel surgieron como vástagos de Fairchild o, en otros casos, como vástagos de vástagos.

A comienzos de 1970, toda la zona estaba llena de compañías de semiconductores que abastecían a las compañías de computadores y estas dos, a su vez, a las compañías de programación y servicios. El espacio industrial era abundante y el alojamiento aún barato. El crecimiento se vio potenciado por el surgimiento de la industria de capitales de riesgo en Sand Hill Road que fundó Kleiner Perkins en 1972; la disponibilidad de estos capitales estalló tras el éxito de 1300 millones de dólares por la OPA (oferta pública de acciones) de Apple Computer en diciembre de 1980.

3. Ciudades de Silicon Valley (por principales empresas)

- Palo Alto: Hewlett-Packard, Xerox, Facebook, VMWare, Pinterest, Tesla Motors

- San José: eBay, PayPal, Adobe Systems Inc, Cisco Systems, Sunpower Corp.

- Mountain View: Google, Intuit, LinkedIn, Symantec Corp.

- San Francisco: Twitter, Zynga

- Sunnyvale: Juniper Networks, Yahoo

- Menlo Park: Facebook, Kleiner Perkins Caufield & Byers

- Redwood City: Electronic Arts, Oracle Corp.

- Cupertino: Apple Inc.

- Los Gatos: Netflix

- Santa Clara: Intel Corp.

- Otras Ciudades: Alviso, Atherton, Belmont, Burlingame, Campbell, Foster City, Fremont, Hillsborough, Los Altos, Millbrae, Monte Sereno, Milpitas, Newark, San Carlos, San Mateo, Saratoga, Union City, Woodside.

4. Empresas mas importantes de Silicon Valley (por año de fundación)

- Hewlett-Packard (HP) (1939): Empresa de tecnologías de la información fundada por Bill Hewlett y David Packard en 1939. Tiene 349,600 empleados y un beneficio neto de 7,070 millones de dólares.

- Intel (1968): Compañia tecnológica de semiconductores fundada por Robert Noyce y Gordon Moore en 1968. Tiene 107,300 empleados y un beneficio neto de 11.4 billones de dólares.

- Kleiner Perkins Caufield & Byers (KPCB) (1972): Empresa de capital de riesgo fundada por Eugene Kleiner, Tom Perkins, Frank J. Caufield y Brook Byers en 1972. Tiene personas muy importantes como John Doerr, Raymond J. Lane y Bill Joy (Sun Microsystems).

- Microsoft (1975): Empresa de Software fundada por Bill Gates y Paul Allen en 1975. Tiene 118,584 empleados y un beneficio neto de 13,490 millones de dólares.

- Apple (1976): Empresa de equipos electrónicos y software fundada por Steve Jobs y Steve Wozniak en 1976. Tiene 80,000 empleados y un beneficio neto de 39,510 millones de dólares.

- Oracle (1977): Compañía de software que desarrolla bases de datos y herramientas de programación fundada por Larry Ellison, Ed Oates y Bob Miner en 1977. Tiene 105,000 empleados y un beneficio neto de 3,381 millones de dólares.

- Symantec (1982): Es una compañía de software de seguridad fundada por Gary Hendrix en 1982. En 1990 compra Peter Norton Computing. Tiene 21,500 empleados y un beneficio neto de 878 millones de dólares.

- Adobe Systems (1982): Empresa de Software de edición y video fundada por John Warnock y Charles Geschke en 1982. Tiene 14,154 empleados y un beneficio neto de 987 millones de dólares.

- Electronic Arts (1982): Empresa de Video Juegos fundada por Trip Hawkins en 1982. Tiene 9,370 empleados y un beneficio neto de 76 millones de dólares.

- Intuit (1983): Empresa de software empresarial fundada por Scott Cook y Tom Proulx en 1983.

- Cisco Systems (1984): Empresa de equipos de telecomunicaciones fundada por los esposos Leonard Bosack y Sandra Lerner en 1984. Tiene 74,000 empleados e ingresos de 47,100 millones de dólares.

- SunPower (1985): Compañia de energía solar que diseña y fabrica celdas fotovoltaicas de silicio cristalino de alta calidad, fundada por Richard Swanson en 1985.

- Yahoo (1994): Es una empresa global de medios o sofwtare para Internet fundada por Jerry Yang y David Filo en 1994. Tiene 11,000 empleados y un beneficio neto de 7,520 millones de dólares.

- eBay (1995): Empresa de comercio electrónico fundada por Pierre Omidyar en 1995. Tiene 34,600 empleados e ingresos netos de 1.72 billones de dólares.

- Juniper Networks (1996): Compañia de sistemas de redes y seguridad fundada en 1996. Es la competencia de Cisco sobre todo en Europa.

- Netflix (1997): Empresa de software de entretenimiento fundada por Reed Hastings y Marc Randolph en 1997. Tiene 2,189 empleados y un beneficio neto de 226 millones de dólares.

- Google (1998): Compañia de software para Internet fundada por Serguéi Brin y Larry Page en 1998. Actualmente es subsidiria de Alphabet Inc. la cual tiene 55,419 empleados y un beneficio neto de 14,444 millones de dólares.

- VMWare (1998): Es una empresa de software de virtualización fundada por Diane Greene en 1998. Es una filial de EMC Corporation que a su vez es propiedad de Dell Inc.

- Salesforce (1999): Compañía de computación en la nube fundada en Marc Benioff y Parker Harris en 1999. Tiene 19,000 empleados y ventas por 111 millones de dólares.

- LinkedIn (2002): Empresa de servicios de redes sociales fundada por Reid Hoffman y miembros del equipo de PayPal en el 2002. Este año fué adquirida por Microsoft por 26.2 billones de dólares. Tiene 9,732 empleados y 106 millones de usuarios.

- Tesla Motors (2003): Compañía que diseña, fabrica y vende coches eléctricos, fue fundada por Elon Musk, Martin Eberhard y JB Straubel en el 2003. Tiene 14,000 empleados e ingresos por 4076 millones de dólares.

- Facebook (2004): Empresa de servicios de redes sociales fundada por Mark Zuckerberg en el 2004. Tiene 12,691 empleados y un beneficio neto de 3,688 billones de dólares. Además tiene 1.65 billones de usuarios.

- SolarCity (2006): Empresa proveedor de servicios de energía fundada por Elon Musk en el 2006. Tiene 2,510 empleados.

- Twitter (2006): Compañía de servicios de microblogging fundada por Jack Dorsey, Noah Glass, Biz Stone y Evan Williams en el 2006. Tiene 3,638 empleados e ingresos por 2.21 billones de dólares. Además tiene 332 millones de usuarios.

- Zinga (2007): Empresa de Video Juegos y servicios de redes sociales fundado por Mark Pincus en 2007. Tiene 1,974 empleados e ingresos por 690,410 millones de dólares.

5. Personas mas importantes de Silicon Valley (por año de nacimiento)

- Larry Ellison (1944, USA): Fundador de Oracle Corp.

- T.J. Rodgers (1948, USA): Fundador de Cypress Semiconductor, varias patentes y premios.

- John Chambers (1949, USA): CEO Cisco Systems.

- Paul Otellini (1950, USA): Ex CEO Intel, Junta Directiva Google.

- John Doerr (1951, USA): Kleiner Perkins Caufield & Byers.

- Ron Conway (1951, USA): Inversor Angel en Google, Ask Jeeves, PayPal, etc.

- Eric Schmidt (1955, USA): CEO Google, Alphabet Inc.

- Vinod Khosla (1955, India): Fundador de Sun Microsystems.

- Bill Gates (1955, USA): Fundador de Microsoft.

- Meg Whitman (1956, USA): CEO HP, Ex CEO eBay.

- Mark Hurd (1957, USA): Co-CEO Oracle Corp. Ex CEO de NCR Corp. y HP.

- Tim Cook (1960, USA): CEO Apple Inc.

- Reed Hastings (1960, USA): Fundador de Netflix.

- Brian Krzanich (1960, USA): CEO Intel.

- Safra Ada Catz (1961, Israel): Co-CEO Oracle Corp.

- Devin Wenig (1966, USA): Presidente y CEO de eBay.

- Peter Thiel (1967, USA): Co-Fundador de PayPal. Socio de The Founders Fund (VC).

- Reid Hoffman (1967, USA): Fundador de LinkedIn, Trabajo en Paypal, Inversor en Facebook,
Zynga.

- Sheryl Sandberg (1969, USA): COO Facebook.

- Marc Andreessen (1971, USA): Fundador de Netscape Communications Corp, co-creador de Mosaic, diseñador de SSL.

- Elon Musk (1971, Sudafrica): PayPal, Tesla Motors, SpaceX, SolarCity, Hyperloop y OpenAI.

- Larry Page (1973, USA): Co-Fundador de Google.

- Sergey Brin (1973, Rusia): Co-Fundador de Google.

- Marissa Mayer (1975, USA): CEO Yahoo.

- Mark Zuckerberg (1984, USA): Fundador de Facebook.

6. Principales Universidades en Computación y TI en Silicon Valley (por año de fundación)

- Santa Clara University (1851)

- San José State University (1871)

- Stanford University (1885)

- College of San Mateo (1922)

- California State University, East Bay (CSUEB) (1957)

- University of California, Santa Cruz (1965)

- De Anza College (1967)

- International Technological University (ITU) (1994)

- Silicon Valley University (SVU) (1997)

7. Principales Libros sobre Sillicon Valley (extraido de goodreads) (por año de publicación)

- Libro: Hackers: Heroes of the Computer Revolution
  Autor: Steven Levy
  Año: 1984

- Libro: Only the Paranoid Survive
  Autor: Andrew S. Grove
  Año: 1988

- Libro: Hard Drive: Bill Gates and the Making of the Microsoft Empire
  Autor: James Wallace
  Año: 1992

- Libro: The New New Thing: A Silicon Valley Story
  Autor: Michael Lewis
  Año: 1999

- Libro: Dealers of Lightning: Xerox PARC and the Dawn of the Computer Age
  Autor: Michael A. Hiltzik
  Año: 1999

- Libro: Softwar: An Intimate Portrait of Larry Ellison and Oracle
  Autor: Matthew Symonds
  Año: 2003

- Libro: Hackers & Painters: Big Ideas from the Computer Age
  Autor: Paul Graham
  Año: 2004

- Libro: Revolution in The Valley: The Insanely Great Story of How the Mac Was Made
  Autor: Andy Hertzfeld
  Año: 2004

- Libro: Bill & Dave: How Hewlett and Packard Built the World's Greatest Company
  Autor: Michael S. Malone
  Año: 2007

- Libro: The Accidental Billionaires: The Founding of Facebook, a Tale of Sex, Money,
  Genius and Betrayal.
  Autor: Ben Mezrich
  Año: 2009

- Libro: An Engineer's Guide to Silicon Valley Startups
  Autor: Piaw Na
  Año: 2010

- Libro: The Facebook Effect: The Inside Story of the Company That is Connecting the World
  Autor: David Kirkpatrick
  Año: 2010

- Libro: In the Plex: How Google Thinks, Works, and Shapes Our Lives
  Autor: Steven Levy
  Año: 2011

- Libro: I, Steve: Steve Jobs In His Own Words
  Autor: George Beahm
  Año: 2011

- Libro: Steve Jobs
  Autor: Walter Isaacson
  Año: 2011

- Libro: The Circle
  Autor: Dave Eggers
  Año: 2013

- Libro: Hatching Twitter: A True Story of Money, Power, Friendship, and Betrayal
  Autor: Nick Bilton
  Año: 2013

- Libro: Fearless Genius: The Digital Revolution in Silicon Valley 1985-2000
  Autor: Doug Menuez
  Año: 2014

- Libro: How Google Works
  Autor: Eric Schmidt
  Año: 2014

- Libro: Chaos Monkeys: Obscene Fortune and Random Failure in Silicon Valley
  Autor: Antonio Garcia Martinez
  Año: 2016

- Libro: Zero to One: Notes on Startups, or How to Build the Future
  Autor: Peter Thiel
  Año: 2016

8. Videos de Entrevistas a Personajes de Silicon Valley

- Steve Jobs and Bill Gates Face Off



- Mark Zuckerberg at Startup School 2013



- Copy of In Tech We Trust? A Debate with Peter Thiel and Marc Andreessen


- Peter Thiel: being contrarian & right, AI, Elon, drug reform, overrated trends & wealth polarization



- Devin Wenig, CEO eBay | Full interview | Code Conference 2016


- Elon Musk | Full interview | Code Conference 2016


- Google's push to improve Nexus phones | Sundar Pichai, CEO Google | Code Conference 2016


- Jeff Bezos vs. Peter Thiel and Donald Trump | Jeff Bezos, CEO Amazon | Code Conference 2016


- Philanthropy can be innovative | Bill Gates and Melinda Gates | Code Conference 2016



El Libro del Día: Essential C# 6.0

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

Titulo: Essential C# 6.0 (5th Edition)
Autor: Mark Michaelis, Eric Lippert
Editorial: Addison Wesley
Nro Paginas: 1046

Capítulos:
1 Introducing C#
2 Data Types
3 Operators and Control Flow
4 Methods and Parameters
5 Classes
6 Inheritance
7 Interfaces
8 Value Types
9 Well-Formed Types
10 Exception Handling
11 Generics
12 Delegates and Lambda Expressions
13 Events
14 Collection Interfaces with Standard Query Operators
15 LINQ with Query Expressions
16 Building Custom Collections
17 Reflection, Attributes, and Dynamic Programming
18 Multithreading
19 Thread Synchronization
20 Platform Interoperability and Unsafe Code
21 The Common Language Infrastructure
A Downloading and Installing the C# Compiler and CLI Platform
B Tic-Tac-Toe Source Code Listing
C Interfacing with Multithreading Patterns prior to the TPL and C# 6.0
D Timers Prior to the Async/Await Pattern of C# 5.0

Descarga:
Essential_C#_6.0

miércoles, 27 de julio de 2016

El Libro del Día: Professional C# 6 and .NET Core 1.0

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

Titulo: Professional C# 6 and .NET Core 1.0
Autor: Christian Nagel
Editorial: Wrox
Nro Paginas: 1532

Capítulos:
Part I: The C# Language
Chapter 1 .NET Application Architectures
Chapter 2 Core C#
Chapter 3 Objects and Types
Chapter 4 Inheritance
Chapter 5 Managed and Unmanaged Resources
Chapter 6 Generics
Chapter 7 Arrays and Tuples
Chapter 8 Operators and Casts
Chapter 9 Delegates, Lambdas, and Events
Chapter 10 Strings and Regular Expressions
Chapter 11 Collections
Chapter 12 Special Collections
Chapter 13 Language Integrated Query
Chapter 14 Errors and Exceptions
Chapter 15 Asynchronous Programming
Chapter 16 Reflection, Metadata, and Dynamic Programming
Part II: .NET Core and Windows Runtime
Chapter 17 Visual Studio 2015
Chapter 18 .NET Compiler Platform
Chapter 19 Testing
Chapter 20 Diagnostics and Application Insights
Chapter 21 Tasks and Parallel Programming
Chapter 22 Task Synchronization
Chapter 23 Files and Streams
Chapter 24 Security
Chapter 25 Networking
Chapter 26 Composition
Chapter 27 XML and JSON
Chapter 28 Localization
Part III: WINDOWS APPS
Chapter 29 Core XAML
Chapter 30 Styling XAML Apps
Chapter 31 Patterns with XAML Apps
Chapter 32 Windows Apps: User Interfaces
Chapter 33 Advanced Windows Apps
Chapter 34 Windows Desktop Applications with WPF
Chapter 35 Creating Documents with WPF
Chapter 36 Deploying Windows Apps
Part IV: Web App lications and Services
Chapter 37 ADO.NET
Chapter 38 Entity Framework Core
Chapter 39 Windows Services
Chapter 40 ASP.NET Core
Chapter 41 ASP.NET MVC
Chapter 42 ASP.NET Web API
Chapter 43 WebHooks and SignalR
Chapter 44 Windows Communication Foundation
Chapter 45 Deploying Websites and Services

Descarga:
Professional_C#_6_and_.NET_Core_1.0

martes, 26 de julio de 2016

El Libro del Día: More Effective C#

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

Titulo: More Effective C#
Autor: Bill Wagner
Editorial: Addison-Wesley
Nro Paginas: 309

Capítulos:
Chapter 1. Working with Generics
Chapter 2. Multithreading in C#
Chapter 3. C# Design Practices
Chapter 4. C# 3.0 Language Enhancements
Chapter 5. Working with LINQ
Chapter 6. Miscellaneous

Descarga:
More_Effective_C#

lunes, 25 de julio de 2016

Artículo: Temas a Aprender en un Lenguaje de Programación

Temas a Aprender en un Lenguaje de Programación

1. Introducción

Un Lenguaje de Programación es el medio por el cual los programadores dan ordenes al computador y sin importar que tipo de lenguaje estén usando todos ellos sirven para crear aplicaciones. En este artículo quiero compartir mi opinión sobre que temas deben aprenderse al momento de elegir un Lenguaje de Programación.

He tratado de hacer una especie de Syllabus genérico para cualquier Lenguaje de Programación, por ejemplo los temas lo puedes ver en cualquier lenguaje del servidor como C# en .NET, PHP, Phyton, Ruby, C++, etc. Pero también la mayoría de temas se pueden ver en JavaScript.

Este breve artículo servirá para que tanto estudiantes y profesionales sepan los temas que son necesarios y los mas útiles que deben conocer, por lo que se ha divido en 3 partes con 4 capítulos cada una: Básica, Intermedia y Avanzada.

2. Temas o Tópicos a Aprender

Parte Básica

1. Estructuras de Datos
1.1. Simples: Numéricas, Cadenas, Lógicas, Fecha, etc.
1.2. Complejas: Arreglos, Listas, Pilas, Colas, Arboles, etc.
1.2. Objetos: Clases, Intefaces, Propiedades, Métodos, Eventos, etc.

2. Estructuras de Control de Flujo
2.1. Condicionales: if, switch, case, etc.
2.2. Repetitivas o de Bucle: for, while, do..while, etc.
2.3. Control de Errores: try..catch

3. Creando Interfaces de Usuario (IU)
3.1. Formularios
3.2. Controles de Entrada: TextBox, Radio, Check
3.3. Controles de Ejecución: Button, LinkButton
3.4. Controles de Imagen: Image, ImageButton
3.4. Controles de Listas: ListBox, ComboBox
3.5. Controles de Vistas: GridView, TreeView, ListView
3.6. Otros Controles: Calendarios, Banners, Visores, etc.

4. Manejo de Entrada y Salida
4.1. Información del Sistema: Directorios, Rutas y Archivos
4.2. Lectura y Escritura: Archivos Secuenciales y Aleatorios
4.3. Codificación de Datos: Codificar y Decodificar datos
4.4. Manejo de Expresiones Regulares

Parte Intermedia

5. Acceso a Base de Datos (Conectado)
5.1. Conectarse a una Base de Datos
5.2. Ejecutar Comandos SQL: Select, Insert, Update, Delete
5.3. Trabajar con Procedimentos Almacenados

6. Manejo de Datos (Desconectado)
6.1. Consultas: Filtros y Búsquedas
6.2. Ordenación: Ascendente y Descendente
6.3. Paginación: Por Filas y Por Columnas
6.4. Transferencia: Importación y Exportación

7. Presentación o Visualización de Datos
7.1. Vistas: Tablas, Cabecera Detalle, Jerárquicas y Tabla Cruzada
7.1. Reportes: Por Código y Por Herramientas
7.2. Gráficos: Por Código y Por Controles
7.3. Impresiones: Presentación Preliminar, Configurar Pagina, Imprimir

8. Pruebas de la Aplicación
8.1. Pruebas Unitarias: Funcionalidad
8.2. Pruebas de Rendimiento: Velocidad
8.3. Pruebas de Disponibilidad: Continuidad
8.4. Pruebas de Seguridad: Protección

Parte Avanzada

9. Programación de la Reusabilidad
9.1. Módulos o Librerías de Clases
9.2. Módulos o Librerías de Controles

10. Programación Asíncrona
10.1. Subprocesamiento: Threads y ThreadPool en una CPU
10.2. Programación Paralela: Tareas en Múltiples CPU

11. Programación de Redes y Distribuida
11.1. Sockets: TCP, UDP
11.2. Web: HTTP (Get, Post, Put, Delete)
11.3. Web Sockets: WS
11.4. Servicios: RPC, SOAP, REST (HTTP)
11.5. Correos: IMAP, POP3, SMTP
11.6. Mensajería: AMQP, MQTT, STOMP
11.7. Archivos: FTP
11.8. Señales: STUN, TURN, ICE, NAT

12. Criptografía o Cifrado de Datos
12.1. Cifrado Simétrico: AES, DES, RC2, Rijndael, Triple DES, etc.
12.2. Cifrado Asimétrico: DSA, ECDiffieHellman, ECDSA, RSA, etc.
12.3. Valores Hash: MD5, RIPEMD160, SHA1, SHA256, SHA512, etc.
12.4. Firmas Digitales y Tokens

3. Comentario Final

Parte Básica

Los Institutos y Universidades que enseñan como curso oficial o electivo en pre-grado un Lenguaje de Programación deberían cubrir la parte básica, pero pasan mucho tiempo en los 3 primeros temas y se olvidan del manejo de entrada y salida, sobre todo del manejo de archivos y después cuando los alumnos son profesionales y trabajan no pueden leer cualquier tipo de archivo, excepto el de Texto: TXT, XML, JSON, CSV, pero no un Binario (DOC, XLS, EXE, DLL, etc)  o uno Comprimido (XLSX, DOCX, PPTX, etc.)

También noto muchos problemas en los programadores en los temas de Codificación de Datos (Encoding), Decodificación de Datos (Decoding) y Búsqueda de Patrones de Texto (Expresiones Regulares). Con una buena base educativa no tendría porque haber ningún tipo de problemas al desarrollar una aplicación en cualquier lenguaje.

Parte Intermedia

La parte intermedia esta dirigida a los profesionales que trabajan desarrollando aplicaciones y necesitan conocer los temas de acceso a datos (conectado) y manejo de datos (desconectado), presentación de datos y pruebas. Aquí la falla está en que se da mucho énfasis a la programación conectada pero No se entiende que ésta es la causante de que en las empresas "Los Sistemas están Lentos" porque "La Red está Lenta" porque "las aplicaciones realizan muchas conexiones" (miles por día), por lo que es "Indispensable" saber el manejo "Desconectado" con los datos.

En cuanto a la presentación de datos la mayoría de programadores solo saben "Herramientas de Reportes", por ejemplo "Crystal Reports" o "Report Viewer" (Reporting Services) o para crear Gráficos usan "Controles", abren instancias de aplicaciones como Word y Excel. Todas estas técnicas descritas son ineficientes ya que consumen mucha memoria y son lentas, hay otras formas de hacer reportes "super rápidos", por ejemplo en .NET para Windows se usa PrintDocument y en Web solo basta con HTML y JavaScript.

En cuanto a las Pruebas, los instructores solo saben enseñar "Pruebas Unitarias" que es lo mínimo que debe pedirse de la aplicación: que cumpla con la funcionalidad pedida, pero hay temas más técnicos como son la Performance o Rendimiento, la Disponibilidad como la tolerancia a Fallas de Red y la Seguridad (privacidad de datos, ataques, robo de información, etc.) que No se toman en cuenta. Es por esto que a cada momento vemos en todas partes "Sistemas Lentos", "Sistemas Caídos por Falta de Red", "Ataques a Sitios Web", "Robo de Datos", etc.

Parte Avanzada

En esta última parte si que estamos peor (según mi experiencia de mas de 25 años como programador e instructor), ya que los 4 últimos temas es poco probable que se enseñe en una capacitación tradicional, excepto Web HTTP (REST) y Servicios SOAP (porque está de moda), pero temas como crear tu propia librería de clases y controles o tu propio módulo de clases y controles Nunca se ve, solo se les enseña a usar lo que ya está hecho sin  siquiera ser selectivo con lo que se usa (solo extraer lo necesario del código o control).

Otro problema de muchos programadores es que No saben el "ABC" de la programación asíncrona, muchos piensan que solo se puede implementar en la web con AJAX, jQuery o cualquier Framework popular, cuando en la web en el lado del cliente puede usarse XHR (nativo) y en el servidor Threads, ThreadPool, Delegados-CallBacks, Tasks, etc. Es mas importante que apliques asíncrono al servidor que al cliente porque la del cliente es para dar una mejor "Experiencia de Usuario" y la del servidor es para que "No se quede Colgado", y al final vas a dar la peor experiencia al usuario.

En cuanto al tema de la programación de redes o distribuida, la mayoría desconoce el poder de los Sockets y Web Sockets para hacer comunicación bidireccional en tiempo real y solo saben la peor (Servicios SOAP: Unidireccional). También es necesario aprender a manejar archivos con FTP, correos con SMTP, colas con STOMP, Señales con STUN, etc.

Finalmente, el tema de la Seguridad es muy importante y parte de esta es el cifrado de datos como claves, contenido, archivos, etc. Es necesario conocer los 4 tipos de tareas criptográficas mas comunes: cifrado simétrico y cifrado asimétrico (bidireccionales), valores hash (unidireccionales) y Firmas Digitales.

En General

En General, el Comentario Final es que si queremos mejorar nuestro nivel sea que somos estudiantes o profesionales debemos saber cuales son los temas mas importantes en nuestra formación, siento que en todos los niveles de la educación: pre-grado (para estudiantes) y especialización (para profesionales) los temas que se enseñan no son los mas importantes para el trabajo. Se da mucho énfasis en patrones y reusabilidad ("Construye Fácil") pero no en lo mas importante: en Producción que sea "Veloz", "Seguro" y "Siempre Disponible".

Mi aporte en estos últimos años ha sido cambiar esa mentalidad de "lo fácil" (reusabilidad) por lo "fácil mas lo eficiente" (performance y si se puede reusabilidad), aunque me hubiese gustado llegar a mas gente (aunque sea en mi país), es por eso, que a través de este Blog y mi Canal de YouTube trato de compensar este déficit.

Espero que con este artículo logre contribuir a que los centros de enseñanza de Lenguajes o Herramientas de Programación tomen en cuenta los temas que son necesarios enseñar para tener mejores profesionales que nunca tengan problemas al momento de trabajar o si los tienen que los resuelvan de la mejor manera y lo mas rápido posible.

viernes, 22 de julio de 2016

El Libro del Día: Apache Cordova in Action

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

Titulo: Apache Cordova in Action
Autor: Raymond Camden
Editorial: Manning
Nro Paginas: 250

Capítulos:
PART 1 GETTING STARTED WITH APACHE CORDOVA
1. What is Cordova?
2. Installing Cordova and the Android SDK
PART 2 CORE CONCEPTS
3. Creating Cordova projects
4. Using plugins to access device features
5. Mobile design and user experience
6. Considerations when building mobile apps
7. Tools for debugging Cordova and other hybrid apps
8. Creating custom plugins
9. Packing options for Cordova projects
10. Using PhoneGap Tools
PART 3 APPLICATION RELEASE
11. Submitting your app
12. Building an RSS reader app with Ionic

Descarga:
Apache_Cordova_in_Action

miércoles, 20 de julio de 2016

El Demo del Día: Leer Archivos de Excel 2007 usando Archivos XML

Leer Archivos de Excel 2007 usando Archivos XML

Este Demo es muy interesante ya que nos permite leer archivos Excel 2007 sin necesidad de tener instalado ni Office (para Automatización COM) ni los Componentes de Acceso a Datos de Office (para OLEDB), ya que solo debemos tener instalado .NET Framework para ejecutar la aplicación (el cual ya viene instalado en la mayoría de Windows).

En el Demo al Descomprimir el archivo de Excel No se crean archivos en disco sino se guardan en memoria usando una lista de objetos XmlDocument ya que se van a leer varios nodos de cada archivo XML. Es por eso que la velocidad es superior a las otras 2 técnicas, sobre todo con gran cantidad de datos.

1. Formatos Office Open XML

Quizás la mayoría no se ha dado cuenta que los archivos de Office a partir de la versión 2007 cumplen con el estándar Open XML que quiere decir que cada archivo es un comprimido (zip) que contiene archivos XML con Metadatos y datos.

Antes los archivos de Office (versión 2003 e inferiores) eran archivos binarios definidos por Microsoft, pero a partir de la versión 2007 son archivos XML comprimidos en una extensión que termina en X (Xml) o M (Macros), por ejemplo:

- En Word: Documentos (docx), Documentos con Macros (docm), Plantillas (dotx), Plantillas con Macros (dotm).

- En Excel: Libros (xlsx), Libros con Macros (xlsm), Plantillas (xltx), Plantillas con Macros (xltm).

- En PowerPoint: Presentaciones (pptx), Presentaciones con Macros (pptm), Plantillas (potx), Plantillas con Macros (potm).

- Otros: XML Paper Specification (XPS), Open XPS (OXPS), etc.

Como experimento solo basta cambiar la extensión de cualquiera de estos archivos a rar y descomprimirlos para ver que contienen archivox XML, por ejemplo, en el caso de uno de mis archivos de Excel 2007:

- Carpeta _rels: archivo .rels

- Carpeta docProps: archivos app.xml y core.xml

- Carpeta xl:
  -) SubCarpeta _rels: archivo workbook.xml.rels
  -) SubCarpeta theme: archivo theme1.xml
  -) SubCarpeta worksheets: sheet1.xml, sheet2.xml, ...
  -) Archivo sharedStrings.xml
  -) Archivo styles.xml
  -) Archivo workbook.xml

- Archivo [Content_Types].xml

2. Crear una Aplicación Windows Forms en C#

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

Diseño del Formulario "frmVisorExcel"

En el diseño hay una etiqueta (lblArchivo), un cuadro de texto (txtArchivo), 2 botones (btnAbrir y btnNuevo) y un control Tab (tabExcel) sin ninguna página ya que estas se crean en tiempo de ejecución en función al número de hojas.

3. Escribir el Código de la Aplicación en C#

Abrir el formulario "frmVisorExcel" y escribir el siguiente código:
using System;
using System.Text;
using System.Data;
using System.IO;
using System.IO.Compression;
using System.Xml;
using System.Windows.Forms;
using System.Collections.Generic;

namespace Excel_Leer_XML
{
    public partial class frmVisorExcel : Form
    {
        public frmVisorExcel()
        {
            InitializeComponent();
        }

        private void abrirExcel(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Title = "Selecciona el archivo de Excel a abrir";
            ofd.Filter = "Archivo de Excel 2007|*.xlsx";
            ofd.InitialDirectory = @"C:\Data\NET\Practicas\Archivos\Excel";
            if (ofd.ShowDialog().Equals(DialogResult.OK))
            {
                string archivo = ofd.FileName;
                txtArchivo.Text = archivo;
                tabExcel.Controls.Clear();
                List<XmlDocument> docs = new List<XmlDocument>();
                List<string> nombres = new List<string>();
                List<string> valores = new List<string>();
                //Descomprimir el archivo Excel y guardar solo los archivos xml necesarios
                //en una Lista de objetos de tipo XmlDocument
                using (var archivoExcel = File.OpenRead(archivo))
                using (var zip = new ZipArchive(archivoExcel, ZipArchiveMode.Read))
                {                  
                    XmlDocument doc;
                    foreach (var archivoXml in zip.Entries)
                    {
                        if (archivoXml.Name == "workbook.xml" ||
                             archivoXml.Name == "sharedStrings.xml" ||
                             archivoXml.Name.StartsWith("sheet") &&
                             Path.GetExtension(archivoXml.Name)==".xml")
                        {
                            using (Stream stream = archivoXml.Open())
                            {
                                doc = new XmlDocument();
                                doc.Load(stream);
                                docs.Add(doc);
                                nombres.Add(archivoXml.Name);
                            }
                        }
                    }
                }
                if (docs.Count > 0)
                {
                    //Leer el archivo xml donde se guardan los datos de tipo cadena
                    int pos = nombres.IndexOf("sharedStrings.xml");
                    if (pos > -1)
                    {
                        XmlDocument xdStrings = docs[pos];
                        XmlElement nodoRaizStrings = xdStrings.DocumentElement;
                        XmlNodeList nodosValores = nodoRaizStrings.ChildNodes;
                        if (nodosValores != null)
                        {
                            foreach (XmlNode nodoValor in nodosValores)
                            {
                                valores.Add(nodoValor.FirstChild.FirstChild.Value);
                            }
                        }
                    }
                    //Leer el archivo xml workbook donde se guardan la lista de hojas
                    pos = nombres.IndexOf("workbook.xml");
                    if (pos > -1)
                    {
                        XmlDocument xdLibro = docs[pos];
                        XmlElement nodoRaizHojas = xdLibro.DocumentElement;
                        XmlNodeList nodosHojas = nodoRaizHojas.GetElementsByTagName("sheet");
                        string id, hoja;
                        if (nodosHojas != null)
                        {
                            foreach (XmlNode nodoHoja in nodosHojas)
                            {
                                id = nodoHoja.Attributes["sheetId"].Value;
                                hoja = nodoHoja.Attributes["name"].Value;
                                //Leer cada archivo xml con la hoja
                                pos = nombres.IndexOf("sheet" + id + ".xml");
                                if (pos > -1)
                                {
                                    XmlDocument xdHoja = docs[pos];
                                    XmlElement nodoRaizHoja = xdHoja.DocumentElement;
                                    XmlNodeList nodosFilas =
                                    nodoRaizHoja.GetElementsByTagName("row");
                                    DataTable tabla = new DataTable();
                                    DataRow fila = null;
                                    int indice;
                                    string celda, valor;
                                    XmlAttribute tipoString;
                                    int cf = 0; //contador de filas
                                    int cc = 0; //contador de columnas
                                    string nombreCol; //nombre de la columna: A, B, C, ...
                                    if (nodosFilas != null)
                                    {
                                        foreach (XmlNode nodoFila in nodosFilas)
                                        {
                                            XmlNodeList nodoCeldas = nodoFila.ChildNodes;
                                            if (nodoCeldas != null)
                                            {
                                                cc = 0;
                                                foreach (XmlNode nodoCelda in nodoCeldas)
                                                {                              
                                                    celda = nodoCelda.Attributes["r"].Value;
                                                    tipoString = nodoCelda.Attributes["t"];                              
                                                    valor = "";
                                                    if (tipoString != null)
                                                    {
                                                        if (valores != null && valores.Count > 0)
                                                        {
                                                            indice = int.Parse(nodoCelda.FirstChild.
                                                            FirstChild.Value);
                                                            valor = valores[indice];
                                                        }
                                                    }
                                                    else
                                                    {
                                                        if(nodoCelda.FirstChild!=null &&  nodoCelda.FirstChild.
                                                        FirstChild!=null)
                                                          valor = nodoCelda.FirstChild.FirstChild.Value;
                                                    }
                                                    if (cf == 0)
                                                    {
                                                        nombreCol = ((char)(65+cc)).ToString();
                                                        tabla.Columns.Add(nombreCol);
                                                    }
                                                    if (cc == 0)
                                                    {
                                                        fila = tabla.NewRow();
                                                    }
                                                    if (cc < tabla.Columns.Count)
                                                    {
                                                        fila[cc] = valor;
                                                    }
                                                    cc++;
                                                }
                                            }
                                            tabla.Rows.Add(fila);                      
                                            cf++;
                                        }
                                        DataGridView dgv = new DataGridView();
                                        dgv.Dock = DockStyle.Fill;
                                        dgv.ReadOnly = true;
                                        dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
                                        dgv.AllowUserToAddRows = false;
                                        dgv.DataSource = tabla;
                                        dgv.CellFormatting += new
                                        DataGridViewCellFormattingEventHandler(cambiarCabeceraFilas);
                                        TabPage pagina = new TabPage();
                                        pagina.Text = hoja;
                                        pagina.Controls.Add(dgv);
                                        tabExcel.Controls.Add(pagina);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        private void cambiarCabeceraFilas(object sender, DataGridViewCellFormattingEventArgs e)
        {
            DataGridView dgvHoja = (DataGridView)sender;
            if (e.RowIndex > -1 && e.ColumnIndex == 0)
            dgvHoja.Rows[e.RowIndex].HeaderCell.Value = (e.RowIndex + 1).ToString();
        }

        private void nuevaLectura(object sender, EventArgs e)
        {
            txtArchivo.Clear();
            tabExcel.Controls.Clear();
        }
    }
}

Nota: El método "abrirExcel" estaasociado al evento click del botón "btnAbrir" y el método "nuevaLectura" esta asociado al evento click del botón "btnNuevo".

4. Ejecutar y Probar la Aplicación Windows Forms

Grabar la aplicación y pulsar F5 para ejecutarla, luego clic al botón "..." y se mostrará el diálogo de abrir mostrando los archivos de Excel 2007 (xlsx), tal como se muestra en la siguiente figura:

Dialogo de Abrir archivos de Excel

Seleccionar un archivo del diálogo y se cargarán todas las hojas del libro, mostrándose en una página del control Tab una grilla, tal como se muestra en la siguiente figura:

Primer Tab con la primera Hoja

Nota: Observar que la grilla muestra en las cabeceras de columnas las letras: A, B, C, D, etc. y en la cabecera de las filas los números: 1, 2, 3, 4, etc. Además en este Demo el orden de las hojas si es el verdadero (en el Demo anterior de OLEDB era como se leía primero).

Como en mi caso abrí un archivo con 2 hojas, la primera que tiene Frameworks de JavaScript y la segunda con algunos Videos de JavaScript, tal como se muestra en la siguiente figura:

Segundo Tab con la segunda Hoja

Si se desea se puede abrir cualquier otro archivo dando click nuevamente al botón "...", tal como se muestra en la siguiente figura:

Archivo Excel con solo una Hoja

En este último caso se abrió un archivo con solo una Hoja de Productos.

5. Comentario Final

En este Demo hemos visto como Leer todas las hojas de un libro de Excel 2007 usando archivos XML, para lo cual primero descomprimimos en memoria el archivo usando la clase "ZipArchive" y usando la colección de "Entries" obtuvimos solo los archivos xml necesarios: workbook.xml, sharedStrings.xml y todos los sheets.xml.

Primero se procedió a leer el archivo "sharedStrings.xml" donde se guardan los datos de tipo cadena y luego se procedió a leer el archivo "workbook.xml" donde se guardan la lista de hojas, finalmente para cada hoja se procedió a leer su archivo xml con los datos de la hoja, los cuales se almacenaron en un DataTable y se mostró en una grilla dentro de un tabPage en el tabControl.

Esta aplicación solo es una demostración y no incluye el formato, fórmulas, gráficos y demás objetos que también pueden leerse del archivo Excel xlsx, pero es un buen punto de partida para todos aquéllos que quieran entender "como funcionan las cosas", en este caso saber el contenido del archivo excel.

El que desea saber todo sobre la especificación de Excel 2007 les comparto el documento que lo encuentran también en la web de Microsoft Protocols junto con los demás formatos:
Especificación de Excel Open XML (XLSX)

Espero que les guste el Demo que es una primicia ya que no creo que lo encuentren en ningún lugar, sobre todo explicado, además si "entendieron" la técnica también la pueden usar para Aplicaciones Web y solo en el Cliente sin ir al Servidor, podemos usar JavaScript para descomprimir el archivo Excel y leer los archivos XML para mostrar su contenido. Esto lo haré en otro post, siempre y cuando valoren los demos, les den Like y los compartan en sus redes sociales (claro esta incluyendo al autor: Luis Dueñas).

6. Descarga la Aplicación Windows

2016_07_20_Demo_Excel_Leer_XML

martes, 19 de julio de 2016

El Demo del Día: Leer Archivos de Excel 2007 usando OLEDB

Leer Archivos de Excel 2007 usando OLEDB

Vamos a retomar nuevamente los Demos, con algo muy solicitado que es leer Archivos de Excel 2007 (XSLX), esta forma de lectura la usaba hace muchos años, pero ahora la comparto para los que no han llevado un curso conmigo.

1. Técnicas para Leer Archivos de Excel

Para leer un archivo de Excel con todas sus hojas hay varias formas que describo brevemente a continuación:

- Automatización ActiveX o COM

Consiste en abrir una instancia de Excel desde otra aplicación (en este caso en .NET) y obtener el valor de cada celda o de un rango de celda por cada hoja. Esta forma es la mas usada y es la de peor rendimiento y requiere tener instalado el Excel. Esta forma es la mas antigua cuando todavía no existía ADO.

- Usando OLEDB

Consiste en usar el proveedor de OLEDB en ADO.NET para conectarse a un archivo de Excel 12.0 (XSLX) para lo cual es necesario tener instalado "Microsoft Access Database Engine 2010 Redistributable" el cual puede descargarse de la siguiente dirección:
https://www.microsoft.com/en-us/download/details.aspx?id=13255
En esta página habrán 2 ejecutables:
- AccessDatabaseEngine.exe (25.3 MB) para equipos con S.O. de 32 bits
- AccessDatabaseEngine_X64.exe (27.3 MB) para equipos con S.O. de 64 bits
Esta forma es la que veremos en este Demo.

- Usando Archivos

Es la forma mas óptima y consiste en descomprimir el archivo XLSX y leer los XML donde se encuentran definidos los datos y las hojas. Esto se puede hacer de forma nativa o usando Librerías de Terceros como SpreedSheet (DevExpress), NPOI, EPPlus, ExcelDataReader, etc.
En el siguiente Demo que subiré trataré como leer Excel en forma nativa usando archivos XML.

2. Crear una Aplicación Windows Forms en C#

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

En el diseño hay una etiqueta (lblArchivo), un cuadro de texto (txtArchivo), 2 botones (btnAbrir y btnNuevo) y un control Tab (tabExcel) sin ninguna página ya que estas se crean en tiempo de ejecución en función al número de hojas.

3. Escribir el Código de la Aplicación en C#

Abrir el formulario "frmVisorExcel" y escribir el siguiente código:

using System;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;

namespace Excel_Leer_OLEDB
{
    public partial class frmVisorExcel : Form
    {
        public frmVisorExcel()
        {
            InitializeComponent();
        }

        private void abrirExcel(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Title = "Selecciona el archivo de Excel a abrir";
            ofd.Filter = "Archivo de Excel 2007|*.xlsx";
            ofd.InitialDirectory = @"C:\Data\NET\Practicas\Archivos\Excel";
            if (ofd.ShowDialog().Equals(DialogResult.OK))
            {
                string archivo = ofd.FileName;
                txtArchivo.Text = archivo;
                tabExcel.Controls.Clear();
                using (OleDbConnection con = new OleDbConnection
                ("provider=Microsoft.Ace.oledb.12.0;data source=" + archivo + ";
                 extended properties=Excel 12.0"))
                {
                    try
                    {
                        con.Open();
                        DataTable tblHojas = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
                        new object[] { null, null, null, "TABLE" });
                        foreach (DataRow fila in tblHojas.Rows)
                        {
                            if (fila["TABLE_NAME"].ToString().EndsWith("$"))
                            {
                                string nombreHoja = fila["TABLE_NAME"].ToString();
                                DataTable tblHoja = new DataTable();
                                using (OleDbDataAdapter dap = new OleDbDataAdapter
                                ("Select * From [" + nombreHoja + "]", con))
                                {
                                    dap.Fill(tblHoja);
                                }
                                DataGridView dgv = new DataGridView();
                                dgv.Dock = DockStyle.Fill;
                                dgv.ReadOnly = true;
                                dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
                                dgv.AllowUserToAddRows = false;
                                dgv.DataSource = tblHoja;
                                TabPage pagina = new TabPage();
                                pagina.Text = nombreHoja.Replace("$","");
                                pagina.Controls.Add(dgv);
                                tabExcel.Controls.Add(pagina);
                            }
                        }                      
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message,"Error al leer el Excel");
                    }
                }
            }
        }

        private void nuevaLectura(object sender, EventArgs e)
        {
            txtArchivo.Clear();
            tabExcel.Controls.Clear();
        }
    }
}

Nota: El método "abrirExcel" estaasociado al evento click del botón "btnAbrir" y el método "nuevaLectura" esta asociado al evento click del botón "btnNuevo".

4. Ejecutar y Probar la Aplicación Windows Forms

Grabar la aplicación y pulsar F5 para ejecutarla, luego clic al botón "..." y se mostrará el diálogo de abrir mostrando los archivos de Excel 2007 (xlsx), tal como se muestra en la siguiente figura:

Dialogo de Abrir archivos de Excel

Seleccionar un archivo del diálogo y se cargarán todas las hojas del libro, mostrándose en una página del control Tab una grilla, tal como se muestra en la siguiente figura:

Primer Tab con la primera Hoja

En mi caso abrí un archivo con 2 hojas, la primera que tiene Personajes de JavaScript y la segunda con algunos términos de programación, tal como se muestra en la siguiente figura:

Segundo Tab con la segunda Hoja

Si se desea se puede abrir cualquier otro archivo dando click nuevamente al botón "...", tal como se muestra en la siguiente figura:

Archivo Excel con solo una Hoja

En este último caso se abrió un archivo con solo una Hoja de Productos.

5. Comentario Final

En este Demo hemos visto como Leer todas las hojas de un libro de Excel 2007 usando OLEDB, para lo cual se uso el método "GetOleDbSchemaTable()" con la restricción de tablas para obtener todos los nombres de tablas pero solo mostramos las que terminan en $, que son las Hojas de Excel.

Se uso un "OleDbDataAdapter" para ejecutar el comando Select para obtener los datos de la hoja en un "DataTable" y luego se creó dinámicamente una grilla, un tabPage y se agregó la grilla al tabPage y el tabPage al tabControl para que se vea los datos de cada hoja.

El que desea conservar todos los datos para después trabajarlos y luego guardarlos en una base de datos, en ves de usar un DataTable local (en el DataAdapter) debe usar un DataSet global (a nivel de clase).

Espero que les sea útil este Demo y en estos días publicaré una técnica más rápida que es leer archivos xml dentro del paquete (xlsx) la cual es más rápida aunque mas laboriosa y que algunos usan sin darse cuenta al usar librerías de lectura de archivos Excel.

6. Descarga la Aplicación Windows

2016_07_19_Demo_Excel_Leer_OLEDB

El Libro del Día: Beginning NFC

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

Titulo: Beginning NFC
Autor: Tom Igoe, Don Coleman, Brian Jepson
Editorial: O'Reilly
Nro Paginas: 245

Capítulos:
1. Introduction
2. NFC and RFID
3. Getting Started with PhoneGap and the PhoneGap-NFC Library
4. Introducing NDEF
5. Listening for NDEF Messages
6. An NFC Application in Practice
7. Introduction to Arduino and NFC
8. Peer-to-Peer Exchange
9. NFC on Embedded Systems
A. NFC Specification Codes

Descarga:
Beginning_NFC