Buscar

Javier Caceres – jacace

Javier's blog about C#, Software Architecture and Design

Categoría

es-co

Aprendiendo C# – Video (3)

Hola estimados lectores del blog,

Hoy he publicado la tercera entrega de esta serie, la cual está compuesta de 3 cortos videos que cubren los siguientes temas: firmas de métodos (parámetros por referencia y keyword static), manejo de excepciones (try/catch/finally y excepciones específicas) y estructuras de datos (arreglos, listas, diccionarios y hash).
He creado en YouTube un watch list con los 3 videos y sus sub partes para que los puedan verlos fácilmente:

El código resultante del ejemplo del cajero automático (usando listas y basado en un archivo) y la diapositiva utilizada/slides están en my onedrive:

Slides y codigo de ejemplo

Espero que sea de su agrado. No olviden dejar aquí sus comentarios/preguntas.

Saludos,

Javier

Aprendiendo C# – Video (2)

Hola a todos,

En este segundo video vamos a revisar conceptos importantes del .NET Framework y vamos a empezar a trabajar en aplicaciones WinForms. Debido a la limitación en tamaño en YouTube debí dividir el video en 3 partes descritas a continuación.

Parte 1: Conceptos Fundamentales del .NET Framework:

Parte 2: Introducción a aplicaciones WinForms:

Parte 3: Como pasar datos entre ventanas y configurar propiedades de las mismas.

Los slides y el código utilizado se encuentran aqui (en onedrive).

Saludos,

Javier Andrés Cáceres Alvis

Microsoft Most Valuable Professional – MVP

Intel Black Belt Software Developer

Aprendiendo C# – Video (1)

Hola a todos,

Hoy he iniciado una de las tareas que he querido hacer por mucho tiempo: videos / tutoriales de C#/.NET desde cero hasta nivel medio. Una de las razones detrás de esta decisión es observar que la introducción a este “universo” es a veces uno de los pasos mas difíciles para quienes desean o necesitan aprender. El primer video esta compuesto por 5 partes (esto debido al limite de 15 mins impuesto en Youtube). Cada parte se “embebe” a continuación con su respectivo comentario.

Parte 1: este video habla de conceptos básicos de POO y presenta una introducción a Visual Studio.

Parte 2: este video contiene Tipos y Variables en C#

Parte 3: este video muestra ejemplos de herencia y polimorfismo

Parte 4: este video habla de conceptos de .NET e interfaces:

Parte 5: este video muestra como modelar un cajero automatico (ATM) en C#:

Los slides y el código utilizado se encuentran aqui (en onedrive).

Saludos,

Javier Andrés Cáceres Alvis

Microsoft Most Valuable Professional – MVP

Intel Black Belt Software Developer

Explicacion del mensaje: No se han especificado valores para algunos de los parámetros

Hola a todos,

Recibi la siguiente pregunta de un exalumno:

Profe. otra vez a molestar tengo esta consulta:
OleDbCommand cm1 = new OleDbCommand(“Select IdCliente, NombreCompania, NombreContacto, CargoContacto, Direccion FROM Clientes WHERE IdCliente=”+id_cliente, cn1);

Y me genera un error en:
OleDbDataReader leerc = cm1.ExecuteReader();
error:  No se han especificado valores para algunos de los parámetros requeridos
Si a la consulta no le agrego la variable +id_cliente, me muestra los datos ubicándose al final de la tabla

Este tipo de errores tiene una clara descripcion pero puede presentarse por varias causas relacionadas con el paramentero de la condicion where. Algunas posibles causas son:

Si la variable id_cliente es de tipo string y esta vacia entonces la sentencia SQL sera concatenada sin ningun valor para comparar la igualdad con IdCliente. En este caso la sentencia resultante seria erronea como se describe a continuacion:

“Select IdCliente, NombreCompania, NombreContacto, CargoContacto, Direccion FROM Clientes WHERE IdCliente=”

Si la variable es de tipo string en la tabla y se ejecuta la sentencia sin las correspondientes indicaciones de tipo literal en la variable se podria presentar este error (u otro aun mas extrano). La sentencia incorrecta seria:

“Select IdCliente, NombreCompania, NombreContacto, CargoContacto, Direccion FROM Clientes WHERE IdCliente=CUALQUIER_TEXTO”

En lugar de:

“Select IdCliente, NombreCompania, NombreContacto, CargoContacto, Direccion FROM Clientes WHERE IdCliente=’CUALQUIER_TEXTO'”

Siguiendo las aclaraciones anteriores se puede solucionar el error, sin embargo lo mejor seria utilizar procedimientos almacenados.

Saludos,

Javier Andrés Cáceres Alvis

Microsoft Most Valuable Professional – MVP

Intel Black Belt Software Developer

Entendiendo los tipos de cadenas de la Win32

Para quienes inician en el desarrollo en C++/Win32 o quienes desarrollan en C#/PInvoke pronto  descubriran que Windows tiene varias definiciones para el tipo de dato char (C++) o string (C#). Las multiples definiones obedecen (desde mi punto de visto) al buen proposito de mantener el codigo generico en cuanto al soporte o no de caracteres Unicode.

Es tan comun la confusion de estos tipos de datos que una macro facil de consumir como por ejemplo MCIWndSave causa comentarios en los foros como “MCIWndSave is not saving ok the filename” debido a que se utiliza incorrectamente como lo muestra el siguiente codigo:

char file[96]="";
strcpy(file,"aud.wav");
MCIWndSave(m_hMCIWnd, file);

Existen otros malos ejemplos con llamados ANSI. Para ayudar a eliminar las dudas entre las definiciones de las cadenas en Windows decidi elaborar la siguiente tabla para resumirlos:

ANSI UNICODE
TCHAR char WCHAR, wchar_t
PTSTR/LPTSTR PSTR: char* PWSTR: WCHAR*
LPSTR: char* LPWSTR: WCHAR*
PTCHAR: TCHAR* PCHAR: char* PWCHAR: WCHAR*
PCTSTR/LPCTSTR PCSTR: const char* PCWSTR: WCHAR*
LPCSTR: const char* LPCWSTR: const WCHAR*

De los anteriores tipos tal vez solo identifiques al char. Pues bien la clasificacion divide en el grupo que soporta caracteres Unicode (2 bytes) y en el grupo que solo soporta caracteres ANSI (1 byte). El char es de tipo ANSI, por lo cual podras representar todos los caracteres del idioma ingles con facilidad pero no para representar otra escritura como el texto Cyrilic. Asi mismo la version Unicode del char es el WCHAR.

Basado en el char (ANSI) y el WCHAR (Unicode) encontramos los punteros/apuntadores/pointers a ellos, los cuales pueden ser variables o constantes. En el caso de los char* se definen como PSTR (Pointer to STRing) o LPTSTR (Long Pointer to STRing). Auque se definan Long Pointer la verdadera diferencia la crea el desarrollador porque la definicion segun la macro  es la misma. Los const char* pueden ser PCSTR (Pointer to Constant String) o LPCSTR (Long Pointer To Constant String).

Los WCHAR* y const WCHAR* siguen la misma filosofia de los char* y const char*, es decir existe dos definiones para los varibales (PWSTR y LPWSTR) y dos para los constantes (PCWSTR y LPCWSTR). Adicionalmente existe el TCHAR que dependiendo si existe o no el #define Unicode se convierte en char o WCHAR. Un par de ejemplos de cadenas ANSI y Unicode:

char* unaCadena="una cadena";
WCHAR* unaCadena=L"una cadena";
TCHAR* unaCadena= _T("una cadena");

Del mismo modo existen versiones de todas las funciones para cada definicion, por ejemplo:

strlen(unaCadena);
wcslen(unaCadena);
_tcslen(unaCadena);

Si quieres aprender mas puedes visitar la documentacion en MSDN o este articulo en CodeProject.

Cheers,

Javier Andrés Cáceres Alvis

Microsoft Most Valuable Professional – MVP
Intel Black Belt Software Developer

Respuestas a preguntas sobre desarrollo con C# en Windows Phone

Un estimado lector del blog me realizó las siguientes preguntas, las cuales edité un poco para hacerlas mas precisas y las comparto a continuación para que sean de ayuda a otros lectores.

  •        “Tengo una página con el control ApplicationBar pero sus acciones no funcionan, quisiera saber en donde se deben ubicar los manejadores de los eventos Click”.

Los manejadores de los eventos se ubican generalmente la clase App.xaml o en la misma pagina de acuerdo a la necesidad global/local del mismo.

  •        Como puedo leer feeds RSS/XML.

Utilice la clase XElement para cargar y transformar el texto JSON a objetos y luego combínelo con Linq para elaborar expresiones de búsqueda más complejas. Hace un tiempo publique un ejemplo al respecto: “Creando un cliente de Twitter en 5 minutos con Windows Phone 7

  •        Como hago aparecer en otra pagina la información sobre el ítem seleccionado.

Se debe manejar el evento de cambio de índice de la lista y utilizar el DataContext de la página destino como se muestra a continuación):


Uri url = new Uri("/OtherPage.xaml", UriKind.Relative);

FrameworkElement root = Application.Current.RootVisual as FrameworkElement;

root.DataContext = e;

NavigationService.Navigate(url);

  •        Porque no se visualiza una imagen que agregué al proyecto recientemente?

Cambie las propiedades del Proyecto en Visual Studio y asegúrese que la propiedad  ‘Build Action’ de la imagen sea cambiada a “Content”

Además de las respuestas anteriores quisiera compartirles los siguientes cursos:

  • Code samples for Windows Phone:  link.
  • Nokia Developer blogs: link.
  • The World of Model–View–ViewModel – through my eyes: link.
  • Building a Windows Phone 7 control from the ground up: link.

Saludos,

Javier Andrés Cáceres Alvis

Microsoft Most Valuable Professional – MVP
Intel Black Belt Software Developer

Recomendaciones para el Examen 70-599: Designing and Developing Windows Phone Applications

Hace un tiempo fui otro de los expertos que colaboró en la creación de este examen. Hoy quiero recomendar algunos temas que deberían ser estudiados en conjunto con el material oficial de preparación (Pro: Designing and Developing Windows Phone Applications). Quisiera mencionar que esta no es una guía completa de estudio, son solo algunos temas que desde mi punto de vista son muy relevantes para el desarrollo en general en dispositivos móviles, por lo cual se debería estudiar el material de referencia y desarrollar tantas aplicaciones como se puedan antes de presentarlo. Los temas son:

  • La clase WebClient y el formato JSON.
  • La clase BackgroundWorker.
  • La clase GeoCoordinateWatcher y su impacto en la batería.
  • Principios básicos de los Accent Colors.
  • El execution model (específicamente el tombstoning), los diferentes posibles estados/eventos (Activated/Deactivated/Obscured) que pueden ocurrir (por ejemplo: al hacer click en el botón de hardware back o cuando se recibe una llamada) y el comportamiento de acuerdo al punto de inicio de la aplicación (es decir, si fue iniciada por acción del usuario o como parte de la ejecución de otra aplicación).
  • La implementación del patrón MVVM en el control Pivot y los conceptos que soportan dicho patrón. Esto es importante no solo para el examen sino en general para todos los developers porque conociendo sus ventajas en interfaces declarativas se puede consumir mejor la abstracción que provee para el Binding declarativo o en programacion.
  • Tiles.
  • Cancelación de eventos con propiedades como e.Cancel.
  • EL API Trial y consideraciones de rendimiento (por ejemplo: hacer caching).

Saludos,

Javier Andrés Cáceres Alvis

Microsoft Most Valuable Professional – MVP
Intel Black Belt Software Developer

Recomendaciones para que tu aplicación Windows Phone sea aprobada

Este post no pretende ser un extenso recurso sobre cada uno de los requisitos necesarios para que tu aplicación sea aprobada en el Windows Phone Dev Center, es por el contrario una pequeña lista de 10 TO CHECK’s que he recopilado y que me han funcionado. También es recomendable que conozcas los requisitos oficiales no para que te los aprendas de memoria sino para leerlos al menos una vez rápidamente: wpdev.ms/techcert

  1. Todas las operaciones que pueden consumir medio segundo o más DEBEN ser asíncronas. Dichas operaciones deberían poder ser canceladas en cualquier momento.
  2. Así mismo utilice indicadores de progreso para mantener informado al usuario.
  3. Maneje TODAS las excepciones (pruebe escenarios inesperados como la llegada de un mensaje SMS o la desconexión de la red).
  4. La aplicación debe desplegar la pantalla inicial en máximo 5 segundos
  5. No consuma más de 90MB de RAM.
  6. Pruebe rigurosamente el comportamiento de su aplicación presionando los botones de hardware Back, Start y Search.
  7. Revise la apariencia de su aplicación con un theme diferente al negro (puede cambiar el theme en Settings > Theme > Background).
  8. Depure/revise las capabilities que su aplicación realmente utiliza en el manifiesto.
  9. Si monetizas tu aplicación con ads, asegúrate que estos no interfieren con el desempeño de tu aplicación en el peor escenario. Implemente patrones como lazy load.
  10. Utilize el Marketplace Test Kit. Esta herramienta hace parte de Visual Studio, por lo cual la puedes acceder con click derecho en el proyecto y seleccionando “Open Marketplace Test Kit”. Asegúrese de ejecutar por lo menos los Test automatizados como se muestra en la siguiente imagen.

Bueno ahí los tienen, un check de 10 simples ítems.

Saludos,

Javier Andrés Cáceres Alvis

Microsoft Most Valuable Professional – MVP
Intel Black Belt Software Developer

Renombrado como MVP en Visual C# para 2012

Hola lectores de este blog, He sido renombrado como MVP, pero esta vez no es en Windows Phone sino en Visual C#. No se confundan, no crean que he perdido la pasión por los móviles (al contrario, todos los días es más grande) lo que ha pasado es que la categoría Windows Phone Development ha sido transformada en Windows Phone Consumer y aunque esta nueva categoría es muy interesante, me he enfocado en la tecnología y plataforma y no solo en el device. Este reconocimiento es muy especial para mí al igual que todas las personas que lo hacen posible y que me he encontrado en este largo camino. Gracias a tod@s!.

Por otro lado este blog cumple 5 años al aire (el primer post fue el 8 abril de 2007) y aunque no fue mi primer blog, si se convirtió en el mas conocido de todos. Por lo anterior, este blog ha tenido una re-indexación y re-categorización del contenido para hacerlo mas accesible a ustedes.

Saludos!

Javier Andrés Cáceres Alvis

Microsoft Most Valuable Professional -MVP-
Intel Back Belt Software Developer

Crea un blog o un sitio web gratuitos con WordPress.com.

Subir ↑