sábado, 21 de noviembre de 2009

C# desde cero - Primera Sesion para Descargar

Como bien saben, hemos estado impartiendo un curso de C# desde cero, en la comunidad DotNetGuerrero, el cual, hasta el día de hoy me ha dado tiempo de subir, entonces les dejo el link para descarga, para todos aquellos que no estuvieron presentes en la sesion:

http://cid-c4b2574a51c8f3c2.skydrive.live.com/browse.aspx/Curso%20C%5E3%20desde%20cero?lc=2058

En cada sesión subiré el video y la presentacion en formato Power Point, así como los códigos fuentes de los ejemplos que vayamos haciendo...

Nota: Estaré subiendo a esa misma carpeta, las demas sesiones del curso, conforme vayamos avanzando..

Y recuerden que si aun no se han inscrito, pueden mandar un correo a 'soporte@dotnetguerrero.net' con el Asunto: 'inscripcion al curso C# online', y en el cuerpo del mensaje su nombre y su lugar de residencia, aun estan a tiempo, solo hemos hecho 1 de las 14 sesiones que dura el curso.

viernes, 13 de noviembre de 2009

Curso de 'C# desde cero' online

Como sabrán, hemos estado creando y consolidando una comunidad de .NET en mi ciudad, llamada. DotNetGuerrero, la cual tiene como objetivo compartir y hacer crecer a través de esos conocimientos la calidad del desarrollo y elevar el mismo en nuestro estado y ciudad.

Nuestro primer gran evento es este Curso de 'C# desde cero', y les explico como va la cosa...
Cuando andamos queriendo aprender a programar, buscamos siempre una plataforma, o buscamos la mejor, y la que mejor nos convenga y convenza, si tu eres de los que quiere hacer programas, pero se encuentra con... qué sigue aquí?, cómo hago esto?, o bien vienes de una tecnología como Java, pues a veces no encuentras cómo funcionan las cosas con .NET.

Este curso servirá para aprender .NET de una manera algo nativa.. con C#, en este curso trataremos de enseñar cómo funciona .NET, así como las operaciones básicas que se pueden hacer en C#, al estilo de C++ y de Java.

Esto quiere decir que veremos estruturas, arreglos, ciclos, clases y objetos, sobrecarga, herencia, polimorfismo, etc., casi todo aquello que te enseñan en la universidad, pero con C++ (en mi caso Borland c++), pues vamos a ver todo eso pero con C#.

Esto es un punto de partida, despues estarás interesados en aprender mas... ADO.NET, ASP.NET, WinForms, WCF, WPF, etc., y claro que estaremos ahí para llevarte junto con otras comunidades, el mejor contenido de aprendizaje.

Sin más les digo que pueden registrarse online, enviando un correo a 'soporte@dotnetguerrero.net' con su nombre y su lugar de residencia, y nosotros le enviaremos los datos para poder acceder a este curso.

El curso iniciará el 17 de Noviembre a las 17:00 hrs. (-6 GTM hora de México), se impartirán los días Martes y Jueves con 14 sesiones, a lo largo de 7 semanas, cada sesión durará 1 hora y media aproximadamente.

miércoles, 28 de octubre de 2009

El error del IVA en programas de computo

Desde 1980, al parecer ser, según este articulo, se aplica Oficialmente el impuesto denominado IVA en México, el cual esta bien sabido por la mayoría de Mexicanos es del 15% (y del 10% en regiones fronterizas, segun tengo entendido) y se aplica a bienes y servicios (enajenación de bienes, servicios independientes, importacion de bienes y servicios, otorguen uso o goce de bienes, etc., etc.).

Bueno, y se preguntarán, a qué viene al caso en un blog de programación...

Pues bien, publico esto porque recientemente nuestros queridos representantes políticos (estoy siendo sarcástico) estan por aprobar una ley de ingresos en México, que entre otras cosas pretende aumentar el porcentaje del 15, al 16% del IVA (y 3% al sector comunicaciones, etc.), aun en estos momentos, no se aprueba dicha ley, pero no se van a tardar mucho (creo yo).
En fin, el contenido total y los detalles específicos no estarán a discusión en este post.

El punto es que muchos programas de cómputo circulando por el país (puntos de ventas para abarrotes, centros comerciales, zapaterías, boutique's, ferreterías, farmacias, así como sistemas para restaurants, hoteles, bares, discotecas, etc., etc.) deben haber implementado un sistema que considerara los productos o servicios que graban iva (la gran mayoría), para poder determinar en una factura, cuáles productos son lo que se les aplica el iva y por qué cantidad.

He aqui el problema, si tu como yo, hiciste por ejemplo un pequeño 'sistemita', de punto de venta o similar, aplicaste invariablemente el cálculo de dicho impuesto, la pregunta aquí es... ¿Cómo?

Podría ser que en el producto o servicio hayas puesto un campo 'IVA' de tipo boleano, especificando si el producto graba o no el IVA, o si tal vez pusiste un campo 'ValorIVA', donde especificaste el porcentaje del IVA (en la gran mayoría llevaría 15, por su puesto), o si simplemente omitiste el punto.

De cualquier manera tengo 2 noticias:

1. Tendrás que actualizar el sistema si es que se aprueba dicha ley, modificando el código para aquellos que pensaron que nunca pasaría eso jeje (como el error del milenio, no creyeron que algunas computadoras llegaran al 2000), o bien, si pensaste acertadamente, solo tendras que cambiar algun archivo de configuracion (o cualquier forma dinpamica de hacerlo sin tocar el código fuente) sin tener que compilar y distribuir nuevamente el software.

2. Noticias buenas para los desarrolladores, y es que la gran mayoría cobrarán por dicha modificación a las organizaciones cliente que fueron las que compraron el sistema, o ya sea que tengan algun convenio o contrato, pues lo harán conforme lo establecido, pero la gran mayoría, les aseguro que costará un dinero mas a los bolsillos de empresarios (que al final, decae en los costos a los consumidores finales, como yo, jeje).

Espero y esto sirva para que de ahora en adelante, siempre pensemos en cambio..., en la mágina frase.. que pasaría si... (les aseguro que aplicando dicho cuestionamiento a cada módulo de su sistema, podrán obtener una mas clara vision y poder así preparar a su software para el futuro)

Me despido, dejando algunos links de interes:

Ley del Impuesto al IVA Vigente

Leyes Federales Vigentes

Noticias: Aprobacion de Ley de Ingresos en la Camara de Diputados

domingo, 18 de octubre de 2009

Qué es Windows Server 2008 Foundation

En tiempos de crisis... mientras unos lloran, otros venden pañuelos!!

Con esta frase quiero iniciar este post para dar a conocer (si es que aun no se habían enterado) de una propuesta de Microsoft, junto con otras compañías fabricantes, para ofertar inovación tecnológica a la Pequeña y Mediana Empresa (PYME) a un bajo costo (comparado con otras versiones) su Sistema Operativo de Servidor... Me enteré de esto gracias a un evento que realizó una importante empresa de venta de equipo de cómputo aquí en mi ciudad Chilpancingo, Gro., MEX, ya que en una conferencia del equipo de HP (del cual escuché la frase del pincipio) presentaron sus servidores (también baratos) y dieron a conocer este SO...

Windows Server 2008 Foundation 2008 R2

Este Sistema Operativo esta pensado para las PYME's y sólo está disponible en algunos países (inicialmente 40, incluyendo a México por supuesto) y su costo es realmente bajo. El objetivo primordial es llegar a esas empresas pequeñas que necesiten una solución viable a sus necesidades a un bajo costo, y por supuesto sin perder la funcionalidad de un SO de Servidor, claro está que tiene algunas restricciones, entre las que destacan:

  • Sólo esta disponible a través de los fabricantes de equipos originales (OEM), esto quiere decir, que sólo en ciertas marcas de servidores:

  • El SO soporta únicamente 1 sólo procesador.

  • Unicamente trabaja con procesadores de 64 bits.

  • No soporta Virtualización.

  • Tiene un límite máximo de 15 cuentas de usuario.

  • Sólamente puede conectarse en la raíz del dominio y no para crear dominios secundarios.

  • El dominio no puede tener relaciones de confianza con otro dominio.

Para más información, les paso la página oficial de Windows Server 2008 Foundation:

http://www.microsoft.com/windowsserver2008/en/us/foundation-es-ww.aspx

Ah y no sin antes hacer el comercial, jeje... Existen en stock varios servidores HP con este SO, por si alguien quiere comprobar el precio... no dude en contactarme: kyoriorochi@hotmail.com (hay facturacion, todo es legal!, es aquí en Guerrero..), de cualquier manera, espero y este post les sirva para conocer que hay opciones, y que hay que aprovechar cuando hay crisis, es una oportunidad, así hay que verlo...

miércoles, 30 de septiembre de 2009

El 7 de Octubre comienza.. LA NUEVA EFICIENCIA...


Con el proposito de dar a conocer la 'NUEVA EFICIENCIA' de tecnologías para este año Microsoft lanza su evento virtual este 7 de Octubre, en el cuál se presentará a la comunidad Windows 7, Windows Server 2008 R2, Exchange Server 2010 y Forefront, ya que estos productos pretenden ser la nueva eficiencia para usted.
No deje de participar en este evento, yo estoy mas que apuntado....

Licencias Microsoft gratis para desarrollo

Tal y como lo han escuchado...

Microsoft venía ofreciendo soporte desde hace ya algun tiempo a pequeñas empresas (o emprendedores) a quienes se les conoce como 'StartUp' de manera gratuita durante algun tiempo a través del programa --BizPark--, el cual ya había posteado sobre el en mi blog 'donde y como aprendo .net'.

Sin embargo, ahora Microsoft le da mas realce, al anuciarlo como 'Un programa que provee Software, Soporte y Visibilidad para Emprendedores de Software', y también al promoverlo con licencias gratuitas para desarrollo.

Cabe destacar que este programa es para desarrolladores independientes o empresas pequeñas que se dediquen al desarrollo, pues el programa ofrece de manera gratuita las siguientes licencias:

  • Todo el software incluido es equivalente a un Microsoft® Visual Studio® Team System Team Suite (VSTS) con suscripción a MSDN® Premium. Además, VSTS Team Foundation Server (Standard Edition) está disponible para ser utilizado por todo el equipo de desarrollo.
  • Expression® Studio Versión 2
  • Los derechos de uso de producción para hospedar una solución “Software-plus-Services” (desarrollada durante la participación en el programa BizSpark en cualquier plataforma) en Internet, en relación a las versiones más recientes de productos de Microsoft, incluidos:
  • Microsoft Windows Server® (todas las ediciones hasta Enterprise, inclusive)
  • Microsoft SQL Server® (todas las ediciones)
  • Microsoft Office SharePoint® Portal Server
  • Microsoft BizTalk® Server
  • Microsoft System Center para la administración de operaciones del servidor de hosting.
  • Además de las ofertas de programas principales, las Startups de BizSpark pueden reunir las condiciones para otras ofertas de Microsoft, como Virtual Earth

Las Startups también pueden trabajar con un Hosting Partner de BizSpark para ofrecer su solución Software-plus-Services usando los productos de servidores de Microsoft más recientes. Para obtener los detalles específicos sobre las ofertas de tecnología y los escenarios de hosting, consulte el Manual del programa Microsoft BizSpark para Startups (apéndice A y apéndice B).

Los requisitos:

  • Haber participado activamente en el desarrollo de un producto o servicio basado en un software que constituirá un elemento principal de su actual o futuro negocio.
  • Ser de propiedad privada.
  • Estar en el negocio menos de 3 años en el momento de la inscripción.
  • Tener menos de US $1 millón en ingresos anuales.

Así que ni hablar, no hay que perder esta oportunidad que ofrece Microsoft, aquí el sitio de Microsoft Bizpark. No sin antes mencionarles, que si desean soporte para insfraestructura, existe el programa ITPro-Momentum, que se dedica a ofertar licencias a programas pilotos, tales como Windows Server, Hyper-V, SQL Server, Windows 7, Dynamic CRM, etc.

martes, 29 de septiembre de 2009

DotNetGuerrero.. Creando una nueva comunidad de .NET

Hola mis pequeños saltamontes jeje..

Con el unico objetivo de dar a conocer las tecnologías que microsoft nos pone a disposicion para realizar diversas tareas como la de programar, diseñar, modelar, etc. y también para compartir los conocimientos con los demás, nace para todos una nueva comunidad de .net para los guerrerenses...

DotNetGuerrero.net es la nueva comunidad de desarrolladores en el estado de guerrero, México, que pretende enseñar a las personas que deseen aprender y compartir conocimientos de tecnologías microsoft, tales como .Net Framework y sus lenguajes, VB.NET, C#, etc., así como SQL Server, Silverlight, Expression, Windows Server, etc., etc.

Esta comunidad de desarrollo .NET es fundada por un grupo de alumnos egresados del ITCH, con el fin de compartir sus conocimientos con los estudiantes y profesionales allegados a tecnologías Microsoft.

Muy pronto tendremos eventos en el ITCH, UAG y demás universidades de Chilpancingo Guerrero, para mantenerte en contacto, no dudes en visitar la página, ahí encontraras los eventos y recursos que compartimos con gusto con todos.

No sin antes agradecer a Miguel Muñoz, MVP de la comunidad .NET de Puebla, quien nos ha brindado todo el apoyo, así como también a todos los que de una u otra manera harán que este proyecto sea una realidad, espero por el bien del software y de esta comunidad un guerrerense (un tanto olvidada) que este sea un buen proyecto.

Nota: estaremos actualizando constantemente nuestra página, sean pacientes por favor, jeje.

lunes, 31 de agosto de 2009

Quiero hacer un videojuego...

Hola, compañeros, si algun día tienen esta inquietud de realizar un videojuego, aquí algunas plataformas y lenguajes que le van a venir de lujo para quienes deseen desarrollar, programar y diseñar un verdadero videojuego para distintas plataformas.

Una de las cosas que estuve viendo, es que no necesitan 'demasiados' conocimientos para poder empezar con esta ardua tarea, sólo imaginación y por supuesto... ganas de hacer las cosas...

Es un lenguaje visual de programación hecho específicamente para creadores de juegos. Está diseñado para ser accesibles para niños y 'disfrutable' para cualquiera. El entorno de programación corre en XBox.


Características:

  • Lenguaje de alto nivel que incorpora características de tiempo real: colisión, color, visión.
  • Utiliza el control del Xbox360 para la entrada (no requiere teclado)
  • Corre en Xbox 360 y PC.
  • Editor de terreno interactivo.
  • Constructor de caminos y puentes.
  • Editor de terreno: crea mundo de forma y tamaño arbitrario.
  • 20 personajes diferentes con capacidades diferentes.

Descargalo!!!

Es un software educativo que enseña a los estudiantes programación en un entorno 3D. Alice es un innovador entorno de programación 3D que hace fácil crear una animación para contar una historia, jugando un juego interactivo, o un video para compartir en la web. Alice es una herramienta de enseñanza para el cálculo de introducción. Utiliza gráficos en 3D y un 'arrastrar y soltar' para facilitar una experiencia en programación en primer lugar y que sea más atractiva y menos frustrante.

Descargalo!!!

Scratch es un nuevo lenguaje de programación que hace fácil crear tus propias historias interactivas, animaciones, juegos, música y arte - y compartir sus creaciones en la web. Scratch está diseñado para ayudar a los jóvenes (de 8 años en adelante) a desarrollar habilidades de aprendizaje del siglo 21. A medida que crean y comparten proyectos de Scratch, los jóvenes aprenden importantes ideas matemáticas y computacionales, mientras que también aprenden a pensar creativamente, razonar de forma sistemática, y trabajar en colaboración.



Descargalo!!!

También es un software educativo, cuyo objetivo es facilitar el uso de sistemas de simulacion para la creacion de multimedia.

Es la próxima generación de software de modelado y simulación. Si bien esta versión se mantiene fiel a la premisa de StarLogo como una herramienta para crear y entender las simulaciones de sistemas complejos, también trae consigo varios avances


Descargalo!!!

domingo, 16 de agosto de 2009

Gana un XBOX 360 con Duelo de Maestros IT


Pues bien... les dejo este concurso abierto desde julio por parte de microsoft technet para debatir en duelo con un 'colega' IT Pro, esto es para acabar con mitos y charlatanes que se dicen ser 'Profesionales de IT' y son capaces de hacer o decir cualquier cosa para conseguir una cita o un ascenso, o simplemente hacerse los importantes y pensar que ellos saben mucho, jaja, y vaya que he visto a muchos de esos que se dicen ser Ingenieros o Licenciados en Informática, ups, que verguenza!!!, y no voy a decir nombres para no quemar a nadie (no porque tenga miedo de decir nombres, mejor... los reto a un duelo, jeje).
Si alguien quiere invitar a otro a un duelo, y ganar premios como un Xbox 360, teclados y mouses, y packs de subscripciones a simplified technet, esta es su oportunidad....
Ingresa aqui para ver el instructivo, espero que si invito a alguien no se me raje, jaja.

sábado, 15 de agosto de 2009

Mi experiencia en Windows 7

Desde su lanzamiento, y gracias a la subscripción technet plus que tengo, descargué la versión RTM de Windows 7, ya que soy 'early adopter', pero tengo que confesar que no toque la Beta, por cuestiones de tiempo, sin embargo ahora instalado y todo ya trabajo en Windows 7 RTM y aquí mi escasa experiencia es estos días.....

Si desean saber las cosas 'nuevas' y cómo se ve el Windows 7, ps al menos mi experiencia como usuario la calificaría como 'satisfactoria', después de que no me gustó mucho el Windows Vista (mas que nada por su lentitud), el Windows 7 es mas rápido que su antecesor, también (y es obvio) que en cuanto más cosas tengas activadas, pues menor será el rendimiento de tu S.O.

Lo que me gustó:







  • Además de interfaces Ribbon para aplicaciones como WordPad y Paint:



Además de que existe el llamado 'Modo Windows XP' (XP Mode) incluído para compatibilidad con aplicaciones antiguas y además facilitar la migración a Windows 7.

Lo malo....

Tiene que haber algo malo chicos!!!!, jaja, bueno los peros que yo le encontré es en cuanto a dispositivos se refiere, la verdad con la multifuncional Lexmark si pude descargar el controlador para imprimir, pero aun no puedo escanear, jeje, bueno seguiré intentando..., lo otro, pues es que cuando la prendo no se conecta automáticamente con internet, supongo que por problemas de IP, lo que se resuelve con 'Troubleshoot problems' del 'Network and Sharing Center', cosa que también sirve como lo esperaba, sin tanta espera y sin tanto rollo.


En general, lo puedo calificar como 'bueno y aceptable', lo estoy corriendo en una máquina x64 con 1024 GB RAM y un Intel Core 2 Duo, y tengo instalados: Office Ultimate 2007, Visual Studio 2008 SP1, SQL Server 2008 EE, Microsoft Expression 3 y algunas otras cosillas más, y me va de maravilla, no se tarda mucho en prender (como el vista) y su asistente para detectar problemas y advertencias, llamado 'Action Center' (el cual ya había probado en Windows Server 2008 RC), si me funciona para lo que fue creado.

jueves, 6 de agosto de 2009

Windows 7 RTM disponible

Para los desarrolladores y profesionales de TI suscritos a MSDN y TechNet, respectivamente, esperamos ansiosos la descarga disponible de Windows 7 RTM (Release To Manufacturing), que como saben, ya finalizó su desarrollo, entonces esta es la versión 'antes' de que sea puesto a la venta a todo el mundo.

Windows 7 RTM ya está disponible para subscriptores MSDN en este link:

http://msdn.microsoft.com/es-mx/subscriptions/default.aspx

y para Profesionales de TI suscritos de TechNet, el siguiente link:

https://technet.microsoft.com/es-mx/subscriptions/default.aspx

Que esperas!!!, descargalo y pruebalo...

lunes, 27 de julio de 2009

Métodos de Extensión en Visual Studio 2008

Alguna vez, cuando estaba programando, me preguntaba si las cosas en la POO se podían hacer algo mas 'elegantes' y sin tanto rollo.

Un ejemplo común en la escuela es el clásico... 'De un arreglo de números enteros, decir cuáles son pares', y es típico que tenemos que hacer una función que me diga si es par o no, y mandar a llamar en un ciclo que recorra número por número...

Y me cuestionaba si se podía hacer algo como:

int[10] arrayNumeros;
arrayNumeros[0] = 4;
...
arrayNumeros[9]=62;

int[] arrayPares = arrayNumeros.Pares();

Quería hacer lo que está en color azul, que mandara a llamar a una función Pares y me regresara todos los pares en la función 'Pares', sin que tuviera que llamarla así:

int[] arrayPares = Pares(arrayNumeros);

Lo primero que se me vino a la cabeza es utilizar la Herencia, pero imagínense heredar de una clase solo para poder implementar un método.

Pues bien, la respuesta es que sí se puede hacer sin herencia en Visual Studio 2008 (con cualquiera de los lenguajes .NET, como C# o VB.NET), y el nombre de esta característica es 'Métodos de Extensión'.

Los métodos de extensión, son, como su nombre lo indica, métodos que se agregan a los tipos existentes en el .NET Framework o cualquiera que nosotros hayamos creado con cualquier lenguaje .NET, SIN NECESIDAD de hacer uso de la herencia para poder 'añadirle' alguna función o procedimiento (estos métodos se manejan de manera especial, pero se invocan como si se tratase de un método propio del tipo al que extendemos).

Lo explicaré utilizando el lenguaje C# (para mejor similitud con el añejo C++)

Primero, se define una clase estática donde estarán todas los métodos 'agregados' o extendidos, sin anidar esta clase con alguna otra.

por ejemplo:

namespace PruebaPares{

public static class Extensiones{

}

}

Después, se define el método o función que 'extienda' al tipo de: 'arreglos de enteros' (en nuestro caso), para esto el método también tiene que ser estático (Shared en VB.NET) y el primer parámetro debe ser el tipo del que se va a extender, en nuestro caso será un arreglo de enteros ( int[] ):

namespace PruebaPares{

public static class Extensiones{

public static int[] Pares(this int[] arreglo){

}

}

}

Observe que el tipo que devuelve es un arreglo de enteros con los resultados, es decir, con los números que son pares.

Voy a implementar este método utilizando LINQ, una tecnología, la cual merece un post (varios diría yo..) aparte:

namespace PruebaPares{

public static class Extensiones{

public static int[] Pares(this int[] arreglo){

IEnumerable resul = from p in arreglo
where (p % 2) == 0
select p;


return resul.ToArray();

}
}

}

Lo que hace esa consulta en LINQ es recorrer el arreglo y buscar los elementos que cumplen la condición en la cláusula 'WHERE', para quienes conozcan algo de SQL, verán esta sintaxis muy parecida. Bueno, después que filtra los resultados, lo convertimos en un arreglo de enteros y lo retornamos, así pues, un ejemplo para utilizar este método, y llamarlo de manera 'decente' sería así:



class Program
{


static void Main(string[] args){

int[] arrayEnteros = new int[]{2,3,4,5,7,8,9};

Console.WriteLine("Numeros pares");

foreach (int x in arrayEnteros.Pares()) {

System.Console.WriteLine("Numero :" + x);

}

System.Console.ReadLine();

}

}

jueves, 9 de julio de 2009

Aprende a Programar con Small Basic











Para los 'principiantes' en el maravilloso mundo de la programación, este enlace para la descarga del tutorial de Small Basic en español gratis.

Este tutorial muestra los primeros pasos en condiciones, sentencias, bucles, etc.
Y también gráficamente (e insisto en español) muestras para realizar programas sencillos y algunos algo complejos: Explica cómo hacer el juego del Paddle o cambiar el fondo del escritorio aleatoriamente, etc.
Algunos programas de juegos que se pueden hacer con small basic (con codigo fuente):




También el link para que descarguen el programa 'Small Basic' y empiecen a hacer sus pininos con la programación:

Pdt. Ojalá y me hubieran enseñado este tipo de herramientas cuando empecé, pero no!!, todo en el crudo Turbo C, me hubieran ahorrado unas cuantas desveladas jaja. Así que.. Aprovéchenlo..

Gracias por el aporte a Fernando Machado y Sandra Aldana.

miércoles, 1 de julio de 2009

Seis errores comunes en entrevistas con los clientes

De esto no hay mucha relación con .NET, pero es igual de importante para el trato con los clientes que no tienen mucho o nada que ver con las Tecnologías de la Información, es decir, no lo conocen, lo conocen muy poco o ellos creen que lo conocen.

Lo hago, por que la corta experiencia que tengo, me ha servido para no cometer 'errores' al platicar o proponer algun proyecto, y esto después después de leer libros como Ingeniería de Software, donde te proponen pláticas y entrevistas con los clientes de una cierta manera, pero en la vida real...., pues es otro asunto.

Cuando trates con un cliente, él te abordará diciendo algo como....
  • "Necesito un sistema que...."
  • "Quiero una página que maneje...."
  • "Quiero imprimir directamente..."
  • "Quiero tener un inventario de...."
  • "Necesito controlar a...."
Primer error: en la misma platica nosotros estaremos pensando en una base de datos, en un lenguaje de programación, en una cierta tecnología, incluso hasta la vista de cómo quedará nuestra aplicación.
No pienses en nada de eso, sólo escúchalo y déjalo terminar, pon atención muy bien de los detalles que te menciona... es en los 'detalles' donde radica la verdadera lógica o problema que necesita resolver.

Después de todo el rollo del cliente, termina diciéndote algo como:
  • "Y.. como cuánto me costará?..."
Segundo error: Cotizar de manera inmediata el proyecto, nosotros hacemos un cálculo mental de lo que nos llevaremos en hacer todo (la base de datos, la aplicación, etc.) y terminamos por dar un precio que asusta al cliente. (jaja, sí, a todos nos pasa eso al principio)
Para poder dar una cotización tienes que ANALIZAR detenida y detalladamente todas y cada una de las actividades que vas a hacer.... si tienes que hacer documentación, si tienes que modelar una base de datos, si tendrás que ponerle imágenes o inclusive un 'estilo de vista' a la aplicación (en páginas web, pues fijate si harás las hojas de estilo y diseñarás las capas de la página, o harás como muchos... tomar templates y modificarlos...). No des un precio final en menos de 5 minutos... ni si quiera lo has pensado bien!!!, aunque el cliente te presione para darle un precio, debes de ser profesional..., tienes que ver qué actividades vas a hacer y en qué tiempo las piensas realizar.
Tercer error: empezar a hablarle en términos técnicos que sólo los desarrolladores conocen, con términos como 'bases de datos' (en serio, pregúntale que entiende por base de datos, y en algunos casos te sorprenderán de lo que piensan), 'Aplicación distribuída', 'Software en capas', 'servicios', 'cloud computing', 'minería de datos', 'dominios, subdominios', mucho menos le digas 'HTTP', 'CSS', 'SOAP', 'XML', etc., etc.
Al platicar con el cliente sabrás por la manera en cómo describe los procesos y cómo cree que se pueden solicionar o 'automatizar' el nivel de conocimiento que tiene sobre las TI, y aunque se vea que sabe mucho, trata de hablar siempre en términos que hasta un niño pueda comprender... Dile que la página web se verá 'bonita', 'interactiva' y fácil de entrar y navegar, que la aplicación almacenará 'automáticamente' los datos, que sus datos estarán disponibles cuando lo necesite, que el procesamiento será muchísimo más rápido, dile que al usuario le facilitará la vida (aunque tu te la compliques).
Cuarto error: nunca utilices las palabras 'creo que no se puede' cuando analices un proceso que el cliente lo tiene en su cabeza (o inclusive por escrito).
Empezando por el 'creo' que se escucha como a qué no lo puedes hacer y con el 'no se puede' que describe lo ineficiente que te ves en ese momento. Al cliente no le importa si tienes que utilizar hasta 10 tecnologías al mismo tiempo, o si utilizas un proceso complejo de sincronización, análisis, entrega, comparación, etc. Lo que realmente le importa es que su trabajo se haga y se haga bien.
Quinto error: Hacerte el que todo lo sabe y dejar los pequeños detalles a un lado, como te decía, es ahí donde debes enfocarte. Comunmente en las entrevistas sólo haces las preguntas necesarias y listo.
En cuánto más información tengas del funcioamiento de 'todo' lo que se pueda y no computar, es mucho mejor, así tienes límites (en todas las aplicaciones hay límites) para saber lo que vas y lo que no vas a contemplar. Pregunta cómo quiere se imprima un reporte, en qué formato, cómo hacen para la captura de datos (con qué están mas familiarizados... Páginas o aplicaciones de escritorio), qué tipos de máquinas son con las que cuenta o piensan contar, hasta la edad y experiencia de los usuarios en sistemas de cómputo. Todas esas preguntas que tienen o no que ver con el sistema debes saber para establecer los límites.
Sexto error: Darle opiniones espontáneas para 'mejorar' los procesos o problemas que vas a resolver con tu desarrollo.
Si bien es cierto que es nuestra obligación informarle al cliente de las maravillas que las computadoras hacen por nosotros, y que pueden hacer con su negocio, trata de medir bien las palabras que dirás, porque o le pueden fascinar, o quizá te tache de un loco. Por mas que creas que tus ideas mejorarán (y aunque así lo sean) su negocio, no te desesperes, quizá hasta el mismo cliente te dé la respuesta que necesita (lo que sucede casi siempre) aunque no sea la mejor opción.
Espero y te haya servido de algo, y si tienes algunos otros errores que puedas comentar (que yo sé que hay muchísimos más) son bienvenidos.

sábado, 27 de junio de 2009

Operaciones Básicas sobre datos con ADO.NET 2.0 Parte III de III

Después de explicar los conceptos sobre las operaciones con los datos y sobre las clases de .NET que nos sirven para almacenar y manipularlos, ahora voy a explicar lo que se necesita para trabajar con una fuente de datos (con una base de datos SQL Server 2005).
Para trabajar con una fuente de datos se necesita utilizar un proveedor, alguien 'intermedio' para poder conectarse con esa fuente, recoger los datos, modificarlos y actualizarlos. Pues bien, para eso necesitamos hacer uso de algunos proveedores, entre los que destacan:
Los proveedores ODBC y OLEDB son utilizados para algunas fuentes como Excel o Access, sin embargo, el rendimiento de nuestras aplicaciones bajan si utilizamos bases de datos como SQL Server, MySQL, Oracle, etc., ya que dichos proveedores son implementados sólo para fines de compatibilidad con algunos lenguajes y aplicaciones y no exponen toda la funcionalidad de cada una de estas fuentes.
Para resolver este problema, ADO.NET ofrece un proveedor nativo .NET para SQL Server y Oracle, en el espacio de nombres System.Data.SqlClient y System.Data.OracleClient respectivamente. Las clases que se encuentran en estos espacios de nombres heredan la funcionalidad de las clases ubicadas en el espacio de nombres System.Data.Common, que como su nombre lo indica, son clases básicas Comunes que comparten y 'deben' compartir los proveedores de datos para .NET, es por eso que hay librerías MySQL para .NET, Interbase, etc., sólo heredan el comportamiento de las principales clases que nos sirven para la manipulación de los datos:
  • DbConnection: Representa una conexión a una fuente (o base) de datos.
  • DbCommand: Representa un procedimiento almacenado en la base de datos o una instrucción SQL.
  • DbDataAdapter: Representa un conjunto de comandos de datos y una conexión de base de datos que se utilizan para rellenar un System.Data.DataSet y actualizar una base de datos.
*Reemplaza las iniciales 'Db' y utilizalas para fuente de datos, por ejemplo, si utilizas SQL Server, será SqlConnection, SqlDataAdapter, etc.
La clase más compleja y la más util es DbDataAdapter, ya que ella permitirá recoger y actualizar los datos en la fuente de una manera transparente al usuario.
Veamos un ejemplo de el uso en SQL Server 2005 siguiendo el ejemplo de la tabla alumnos del post anterior:

Dim sqlConexion As New SqlClient.SqlConnection("Data Source=localhost\SQLEXPRESS;Initial Catalog=alumnos;Integrated Security=True")

'Creamos el adaptador de datos que nos servir para realizar las operaciones
'a la base de datos, utilizando algunos comandos, le pasamos como parámetro la sentencia
'SQL para seleccionar todos los registros y la conexión que se utilizar
Dim sqlAdaptador As New SqlClient.SqlDataAdapter("SELECT idAlumno, nombre, telefono, fechaNac FROM alumnos", sqlConexion)

'Podemos establecer las demás operaciones con los datos a través de las propiedades:
'InsertCommand (de tipo SqlCommand) que nos sirve para Agregar registros a la BD
sqlAdaptador.InsertCommand = New SqlClient.SqlCommand("INSERT INTO alumnos VALUES (nombre=@nombre, telefono=@telefono, fechaNac=@fechaNac)")

'Agregamos los parámetros, para evitar inyecciones sobre las sentencias SQL
'Como observación: (los parámetros en SQLServer y Access se escriben con la '@' al inicio)
'y por ejemplo en MySQL deben empezar con el smbolo '?'
sqlAdaptador.InsertCommand.Parameters.Add("@nombre", SqlDbType.NVarChar, 35)
sqlAdaptador.InsertCommand.Parameters.Add("@telefono", SqlDbType.VarChar, 12)
sqlAdaptador.InsertCommand.Parameters.Add("@fechaNac", SqlDbType.DateTime)
'UpdateCommand sirve para actualizar registros ya existentes
sqlAdaptador.UpdateCommand = New SqlClient.SqlCommand("UPDATE alumnos SET (nombre=@nombre, telefono=@telefono, fechaNac=@fechaNac) WHERE idAlumno=@idAlumno")

'Agregamos los parámetros, para evitar inyecciones sobre las sentencias SQL
sqlAdaptador.UpdateCommand.Parameters.Add("@nombre", SqlDbType.NVarChar, 35)
sqlAdaptador.UpdateCommand.Parameters.Add("@telefono", SqlDbType.VarChar, 12)
sqlAdaptador.UpdateCommand.Parameters.Add("@fechaNac", SqlDbType.DateTime)
sqlAdaptador.UpdateCommand.Parameters.Add("@idAlumno", SqlDbType.Int)
'DeleteCommand sirve para eliminar físicamente los registros en una tabla en la base de datos
sqlAdaptador.DeleteCommand = New SqlClient.SqlCommand("DELETE FROM alumnos WHERE idAlumno=@idAlumno")
'Agregamos los parámetros, para evitar inyecciones sobre las sentencias SQL
sqlAdaptador.DeleteCommand.Parameters.Add("@idAlumno", SqlDbType.Int)

'ahora ya tenemos nuestro adaptador listo para utilizarse con los mtodos, Fill y Update
sqlAdaptador.Fill(alumnosDS)
'podemos hacer las operaciones pertinentes sobre los datos en el DataSet 'alumnosds', va el post 2
'finalmente actualizamos esos cambios en la base de datos con un solo método que se encarga de hacer
'las operaciones necesarias (insertar, actualizar o eliminar)
sqlAdaptador.Update(alumnosDS)
Nota: El servidor de la fuente de datos, la base de datos, la tabla, los campos utilizados en este ejemplo son ficticios y utilizados para demostrar el uso de las clases que nos sirven para la manipulación de los datos.

lunes, 15 de junio de 2009

Operaciones Básicas sobre datos con ADO.NET 2.0 Parte II de III

En el post pasado, se definieron los conceptos para trabajar con datos en ADO.NET, ahora veremos los objetos y clases que se utilizan para la manipulación de los datos.

.NET ofrece un conjunto de clases que nos sirven para crear objetos que nos permitan llenar los datos provenientes de un origen de datos (un servidor de base de datos o un archivo de bd, como Access, SQL Server, Oracle, MySQL, etc.), leer estos datos (y poder presentárselos al usuario), actualizar estos datos (añadiendo nuevos registros, borrando y modificando algunos otros, y regresar los datos al origen para que se actualicen todos estos cambios. Las clases mas importantes y significativas pertenecen al espacio de nombres System.Data, y son las siguientes:

DataSet: Es la clase mas importante en el entorno de ADO.NET 2.0, contiene una representación de los datos en memoria, en él se almacenan tablas (y éstos a su vez registros) y las relaciones que hay entre ellas. Los objetos 'DataSet' son utilizados independientemente del manejador de base de datos, es decir NO son exclusivos de SQL Server, por ejemplo, ni de ningun otro manejador, así también lo podemos utilizar sin necesidad de un proveedor. Podríamos definir al DataSet, como una copia de los datos que han sido consultados en un proveedor de datos.

Esta clase DataSet, la podemos utilizar para crear conjuntos de datos con una estructura previamente definida, como si fuera una base de datos, con tipos de datos tipados, relaciones entre tablas, etc, mediante la herencia, a este tipo de clases se le conoce como DataSet tipados.

Ejemplo:
'objeto DataSet 'genérico'
Dim alumnosDS as DataSet = new DataSet()

'objeto DataSet 'tipado' (la clase AlumnoDS hereda de DataSet) con tipos predefinidos
Dim alumnosDS as AlumnoDS = new AlumnoDS()

DataTable: Esta clase representa a una Tabla en memoria, para que podamos hacer operaciones con ella y sus datos, y, siempre está contenida dentro de un DataSet, con ninguna o con otras tablas.

Ejemplo:
'En este caso, hemos declarado una tabla 'genérica', es decir, puede contener
'cualquier tipo de datos cuando se crea.
Dim tablaAlumnos as DataTable = new DataTable()
'Añadimos mediante código sus columnas...
tablaAlumnos.Columns.Add("nombre",GetType(String))
tablaAlumnos.Columns.Add("telefono",GetType(String))
tablaAlumnos.Columns.Add("fechaNac",GetType(DateTime))
'Nota: cuando se crea una tabla a partir de un dataset tipado, no es necesario (ni
'recomendable, a menos que sea muy necesario) agregar, eliminar y modificar sus columnas,
'ya que puede haber problemas si es que intentamos actualizar en un origen de datos.

DataRow: Representa un registro en memoria, y comúnmente la utilizamos cuando queremos obtener un registro de una tabla, o cuando ingresamos uno nuevo.

Ejemplo:
'Con esta instrucción, la tabla 'crea' un nuevo registro según su estructura
Dim nuevoReg as DataRow = tablaAlumnos.NewRow()
'una vez creado, podemos asignarle los valores que el usuario introdujo (por ejemplo)
nuevoReg("nombre") = "Su nombre"
nuevoReg("telefono") = "XXXX"
nuevoReg("fechaNac") = new DateTime(1990,1,1)
'y luego lo introducimos a su tabla que lo creo
tablaAlumnos.Rows.Add(nuevoReg)

Nota: ya que estamos tratando con el modelo 'desconectado', debemos tener en cuenta que los datos no están actualizados al 100% con el proveedor de datos, es decir no son persistentes.

miércoles, 10 de junio de 2009

Operaciones Básicas sobre datos con ADO.NET 2.0 Parte I de III

Cuando comenzamos a aprender un nuevo lenguaje, siempre nos topamos con lo mismo, ¿Cómo insertar, eliminar, modificar y consultar sobre una tabla en una Base de Datos?, y a veces resulta que ni si quiera sabemos cómo empezar, ni por dónde, qué Clases utilizar para ello, aquí un resumen...

Este post, se refiere a las operaciones con los datos dentro de una base de datos, un repositorio muy común, y la manera es algo distinta cuando se trata de otros repositorios, como archivos de texto, xml, etc.

Bien, las operaciones sobre una base de datos consiste en el acrónimo 'CRUD' (en inglés Create, Read, Update and Delete), que es lo mismo que Crear o Insertar, Leer, Actualizar y Eliminar los datos, vamos a hacer estas operaciones en ADO.NET 2.0 (ADO [Access Data Object]: Acceso a Datos) con Visual Studio 2005, pero es válido para Visual Studio 2008.

Antes de empezar a explicar el acceso a datos, tengo que mencionar que para entender más un poquito de esto, asumo que tienen conocimientos sobre bases de datos, creación de tablas, relaciones y consultas, ya que el objetivo de este post es sobre el acceso a los datos, y no sobre la creación de ellos, espero poner un post sobre bases de datos.

Existen 2 maneras de conectarse a la base de datos para hacer las operaciones sobre alguna tabla:
  1. Modo conectado: consiste en tener una conexión abierta siempre al servidor de BD, y de ahí estar leyendo los datos para mostrarlos al usuario. Esta forma tiene sus ventajas, los datos están actualizados siempre, mejor manejo de concurrencia, etc. Se utiliza cuando se desea mantener siempre los datos mas recientes en el cliente.
  2. Modo desconectado: consiste en hacer las operaciones con los datos cada vez que el cliente lo necesita. Sus ventajas son que sólo ocupamos conexiones y el ancho de banda cada vez que necesitemos hacer una consulta sobre la base de datos, y de ahí trabajamos con una copia local de los datos en nuestro sistema, podemos desconectarnos del servidor temporalmente y modificar los datos y así cuando necesitemos actualizarlos, volvemos a hacer las consultas pertinentes en la base de datos.
Voy a explicar únicamente el modo desconectado ya que a mi parecer es el más utilizado por la mayoría de los proyectos, y el más simple de comprender.

Bien, las operaciones sobre la base de datos como sabrán son:
  • Select, para hacer una consulta de los datos.
  • Insert, para Ingresar los registros en una tabla base de datos.
  • Update, para Actualizar los registos en la tabla.
  • Delete, para Borrar los registros en la tabla.

Éstas son las operaciones 'CRUD' en una base de datos.

martes, 2 de junio de 2009

Una nueva forma de aprender .NET y obtener beneficios por ello

Me acabo de enterar (y no sé porque no lo hice antes) de un programa que Microsoft tiene para quienes deseen aprender o migrar de otra tecnología a .NET (como php, java, etc.) llamado Ramp Up

Este programa te va llevando de la mano con muchos recursos como artículos, codecast, slidecast, laboratorios en línea, etc. de acuerdo al curso que te hayas inscrito, y además, cuando lo terminas, puedes obtener un reconocimiento de graduación y premios (como vouchers de descuento).

Los cursos son los siguientes:
Ya me inscribí, y estoy tomando el curso de VS2008, no está por demás reafirmar los conocimientos.
Se los recomiendo!!!

viernes, 29 de mayo de 2009

Corrección de la caducación de Windows 7

Para mencionarle a todos 'testers' de Windows 7, que si tienen instalado este SO, hubo una 'mala información' acerca de la fecha de caducación en relación con las Versiones:

Como bien saben, cuando el Windows 7 caduque, se comenzará a apagar cada 2 horas hasta una determinada fecha en que no dejará entrar al sistema.

La versión Windows 7 Beta
Se empezará a apagar cada 2 horas a partir de: 1 de Julio de 2009
Expira: 1 de Agosto de 2009

La versión Windows 7 RC (Release Candidate)
Se empezará a apagar cada 2 horas a partir de: 1 de Marzo de 2010
Expira: 1 de Junio de 2010

Para los que aun no adquieren la versión de Windows 7 RC, pueden hacerlo desde AQUI (se tienen que registrar), con la novedad de que Microsoft ha anunciado que va a estar disponible en descarga hasta Julio del 2009, sin un número límite de claves.

miércoles, 27 de mayo de 2009

Dónde y Cómo aprendo .NET

Muy frecuentemente los programadores que comienzan con .NET, los que tienen problemas, o simplemente los que quieren saber más, me preguntan sobre dónde pueden aprender .NET y otras tecnologías Microsoft, pues bien, aquí mis sugerencias para todo tipo de público.
  • Estudiantes:

DCE Desarrollador 5 Estrellas: Programa de certificación en el cual vas aprendiendo por etapas, y obteniendo estrellas aprobando los distintos exámenes divididos por módulos.

MVA Microsoft Virtual Academy: Universidad Virtual de Tecnologías de Microsoft, muy bueno y obtienes grandes beneficios, puedes estudiar a tu ritmo en las distintas carreras y cursos opcionales que ofrece.

VS2008 and NET Framework 3.5 Training Kit: Ideal si lo que quieres es empezar a programar con ejemplos, demos, laboratorios virtuales.
Nota: está en inglés.

Microsoft Student Pass: Programa para aprender en línea, diseñado para los estudiantes. Muy recomendado si lo que quieres es tener bien definidos los conceptos buscando alguna certificación.

Microsoft Net Cell 2.0: Este programa busca formar grupos en las universidades para fomentar el uso y aprendizaje de la tecnología .NET, necesitas compañeros, un líder, y un maestro asesor de tu escuela.

  • Desarrolladores:

MSDN Microsoft Developer Network: Este es sitio oficial de soporte de los productos de Desarrollo de Microsoft. Aqui encuentras ayuda de las librerías, clases, videos de ejemplo, webcast, etc. sobre productos de desarrollo .NET, Web, Windows, Empresarial, para Office, para Juegos, etc.

Microsoft Connect: El sitio que Microsoft llama 'El punto de conexión entre usted y Microsoft'. Me parece un sitio muy interesante, ya que te ofrece recursos gratuitos (como iconos, imágenes, controles, librerías, etc.), además de que puedes hacer preguntas a los desarrolladores de Microsoft o algun otro, el objetivo es brindar soporte o también darlo si conoces un cierto problema y sabes como solucionarlo.

ASP.NET: Sitio oficial de la tecnología ASP.NET, encuentras webcast sobre AJAX, ASP.NET MVC, JQuery, etc.

Net Protector: Dale una mayor protección y seguridad a tus librerías y aplicaciones, con este programa, te enseñan cómo debes hacerlo.

Open XML: Conceptos, herramientas y ejemplos de esta novedosa tecnología para que puedas desarrollar e incluírla en tus desarrollos.

  • Emprendedores:

IT Pro Momentum: Si lo que quieres es probar y aprender las nuevas tecnologías Microsoft, recibir soporte técnico gratuito y poder ofertar tu proyecto, este es el programa que te conviene.

Microsoft BizSpark: Si tienes o formas parte de una empresa que está en fase de inicio y además utiliza como base las TI, este programa te puede ayudar, ya que te ofrece software y soporte técnico que necesites, todo esto gratis!!.



Existen muchísimas herramientas más en la red y por cierto, también muy buenas, pero a mi parecer, éstas son las más importantes, y sobre todo Oficiales que Microsoft nos proporciona, así que no hay pretexto... A DESARROLLAR SE HA DICHO!!!

jueves, 7 de mayo de 2009

Recorrido de todos los controles en un Form C# y VB.NET

Hace un tiempo trabajé en un proyecto en el cual quería "formatear" a los controles de un formulario, para poder ofrecer al usuario un "skin" o un tema a la aplicación, por ejemplo, que todos los controles 'label' de un formulario se colorearan de color azul, para eso lo tenía que hacer dinámicamente, ya que tenía varios formularios en la misma aplicación, y algunos cargados de distintos tipos de controles.

El recorrido de controles, se puede hacer de 2 maneras:

1. Recorriendo de manera Iterativa los controles de un control. En esta forma, sólo podemos recorrer los controles hijos de un control padre, por ejemplo, si tenemos un Form, y queremos aplicar este recorrido, entonces unicamente se recorrerá todos los controles que estén directamente agregados en el formulario y no dentro de otro control, es decir, si tenemos 3 controles dentro del Form: 1 Label, 1 GroupBox y 1 Button, pero el Label se encuentra dentro del Group Box, al hacer este recorrido, no afectará al Label, sino solo al Button y al GroupBox.


Suponiendo que tenemos este formulario, en este tipo de recorrido, cuando queramos recorrer todos los controles que tenemos en el Form1, solo recorreremos a GroupBox1 y a Button1.








2. Recorriendo de manera Recursiva TODOS los controles de un control. En esta forma se podrán recorrer todos y cada uno de los controles que esten dentro de un control padre, aún cuando algunos controles estén dentro de otro y éste a su vez de otro (esto se conoce como controles anidados), mientras formen parte del mismo control padre que establecemos, se hará dicho recorrido. Ésta es la mejor manera de hacerlo, cuando se trate de recorrer de manera DINÁMICA, es decir, cuando no se conoce ni dónde, ni cuántos controles vamos a recorrer. Cuando conozcamos su ubicación, o su tamaño, y sabemos que NO VA A CAMBIAR en el transcurso de vida de nuestra aplicación, entonces no conviene hacer un recorrido Recursivo de todos, sino almacenarlos en una colección y ahí hacer el recorrido, este tipo de recorrido es sobre una colección de elementos, en la cual conocemos su tamaño (esto lo explicaré mas adelante).

Código:

1. Recorriendo de manera Iterativa
  • C#
//Recorremos con un ciclo for each cada control que hay en la coleccion Controls de un objeto llamado 'control'

foreach(Control contHijo in control.Controls){


//Aqui va la lógica de lo queramos hacer, en mi ejemplo, voy a pintar de color azul el fondo de todos los controles

contHijo.BackColor = Color.Blue;

}

  • VB.NET
'Recorremos con un ciclo for each cada control que hay en la coleccion Controls de un objeto llamado 'control'
For Each contHijo As Control In control.Controls


'Aqui va la lógica de lo queramos hacer, en mi ejemplo, voy a pintar de color azul el fondo de todos los controles
contHijo.BackColor = Color.Blue

Next




2. Recorriendo de manera Recursiva

  • C#
public void RecControles(Control control) {
//Recorremos con un ciclo for each cada control que hay en la colección Controls
foreach(Control contHijo in control.Controls){
//Preguntamos si el control tiene uno o mas controles dentro del mismo con la propiedad 'HasChildren'
//Si el control tiene 1 o más controles, entonces llamamos al procedimiento de forma recursiva, para que siga recorriendo los demás controles
if (contHijo.HasChildren) this.RecControles(contHijo);
//Aqui va la lógica de lo queramos hacer, en mi ejemplo, voy a pintar de color azul el fondo de todos los controles
contHijo.BackColor = Color.Blue;
}
}

  • VB.NET
Public Sub RecControles(ByVal control As Control)

'Recorremos con un ciclo for each cada control que hay en la colección Controls
For Each contHijo As Control In control.Controls

'Preguntamos si el control tiene uno o mas controles dentro de l mismo con la propiedad 'HasChildren'
'Si el control tiene 1 o más controles, entonces llamamos al procedimiento de forma recursiva, para que siga
'recorriendo los demás controles
If contHijo.HasChildren Then Me.RecControles(contHijo)

'Aqui va la lógica de lo queramos hacer, en mi ejemplo, voy a pintar de color azul el fondo de todos los controles
contHijo.BackColor = Color.Blue

Next
End Sub

Como se dan cuenta, en el recorrido de forma recursiva, se debe hacer uso de un procedimiento que haga el recorrido (de ahí su nombre, una función [o procedimiento] que se llama a sí misma, mientras que de manera iterativa lo puedes utilizar en tu código de función o procedimiento sin necesidad de declarar otra función alterna.

Ahora bien, esto lo hace de maravilla, y está bien hacerlo cuando NO conozcamos el tamaño ni la ubicación de los controles, ya que como ven, el recorrido pasa por TODOS los controles de un cierto control, pero... y qué pasa si sólo necesito los controles 'Button' que se encuentran en un formulario que, de antemano, sé que no voy a agregar otros controles, pues entonces lo que conviene es que realices una colección de esos botones y hagas el recorrido UNICAMENTE en esos controles. La colección la puedes hacer en un Array, en un objeto Collection, etc.