lunes, 29 de octubre de 2012

[006] Optimizando Código

El sufrimiento de los lenguajes interpretados...


Un lenguaje interpretado es un lenguaje de programación que está diseñado para ser ejecutado por medio de un intérprete, en contraste con los lenguajes compilados. Teóricamente, cualquier lenguaje puede ser compilado o ser interpretado, así que esta designación es aplicada puramente debido a la práctica de implementación común y no a alguna característica subyacente de un lenguaje en particular.

Por todos es sabido que el Fox era un lenguaje interpretado hasta el punto de que nuestros programas podían generar código y compilarlo al vuelo. Así como la macrosustitución. El problema era el elevado consumo de recursos de la máquina y por tanto la lentitud de ciertas partes de nuestras aplicaciones.

A C Sharp le sucede exactamente lo mismo, y por lo tanto tenemos que invertir tiempo en la optimización de nuestro código si queremos que nuestras aplicaciones no desesperen a la gran mayoría de usuarios que tienen máquinas obsoletas pero funcionales.

La principal ventaja de un lenguaje interpretado es que es independiente de la máquina y del sistema operativo ya que no contiene instrucciones propias de un procesador sino que contiene llamadas a funciones que el interprete deberá reconocer. Basta que exista un interprete de un lenguaje para dicho sistema y todos los programas escrito en ese lenguaje funcionarán.


Aquí os marco algunas reglas del juego para que vuestro código esté optimizado y sea estéticamente bello:

  • Al igual que en Fox en C# debemos usar string.Empty en lugar de "", mucho mejor (Nombre == string.Empty) que (Nombre = "").
  • Si queremos obtener del  switch  toda la potencia del DO CASE de foxpro debemos utilizar enumeraciones. (A esto le dedicaré un capítulo entero para explicarlo.)
  • No introducir código en los eventos, hacedlo en un método a parte y llamarlo desde el método asociado al evento. Esto lo veremos en otro capítulo.
  • No gestionar la apertura y cierre de los formularios desde el mismo formulario, hay que hacerlo desde una clase externa.
  • Usa ficheros de recursos para todos los literales de la aplicación, ya sabéis los de tipo .resx, el que no entienda que no se preocupe que lo iré detallando todo.
  • Evita tener archivos de más de 1000 líneas, si sucede refactoriza. Divididlos en varias clases.
  • Evita métodos y propiedades públicas en las clases si no es necesario. Usa internal si son únicas del mismo ensamblado.
  • No crees métodos con más de 5 parámetros, para ello crea una clase o estructura. Los parámetros destrozan la memoria, crean la posibilidad de que los datos se corrompan, y crean más ciclos de microprocesador.
  • No utilices null como retorno de un método. Por ejemplo si tenemos una lista es preferible retornarla vacía.
  • Usa el archivo AssemblyInfo para documentar tu aplicativo.
  • Cuando abras conexiones (bases de datos, flujos de archivo, sockets, etc.), gestionalas con un try/catch y ciérralas en el bloque finally.
  • Igual que antes hemos mencionado como evitar los string con enumeradores, cuandos tengas que gestionar varios string utiliza la clase StringBuilder   .
  • Usa en tus aplicaciones siempre una arquitectura multicapa, esto lo veremos en capítulos posteriores.
  • Si apuestas por Microsoft no utilices tecnologías de terceros, ya que estos terceros nunca van a conocer la estratégia de Microsoft
  • Separa todas la clases no principales o de apoyo (validaciones, archivos de recursos, constantes, logger, etc.) en otros ensamblados, librerías.
  • No abuses de los web services, son un modelo que consume mucho. No hay que utilizarlos para conectar procesos internos.
  • No dudes a la hora de hacer uso de las herramientas del Visual studio, están ahí para hacernos la vida más fácil.
  • No escribas rutinas try/catch en todos tus métodos, ni dejes que los bloques introducidos en el try sean muy grandes. 


                                  

NEWS [Visual Studio 2012]



Sobre Visual Studio 2012


La compañía ha lanzado su solución de desarrollo integrada para crear y gestionar aplicaciones. Visual Studio 2012 proporciona un entorno de desarrollo más rico para crear atractivas aplicaciones que atiendan en todo momento las necesidades de los clientes y que sean accesibles desde cualquier lugar. Además, la compañía también ha anunciado el calendario de la actualización de Visual Studio, así como la disponibilidad de Visual Studio 2012 Express para Desktop, F # Tools para Visual Studio Express 2012 para Web y TFS Power Tools para Visual Studio 2012, entre otras.

Desde España, Microsoft contará con aproximadamente 10 partners que participarán en los lanzamientos locales y organizarán actividades alrededor del mismo a lo largo de los próximos meses. Entre los socios destacan PlainConcepts; GlobeTesting ; Kabel; Avanade; Certia e Ilitia; LARs como Insight, así como resellers especializados en nuestras herramientas de desarrollo como Danysoft Y Rambla Informática.

Características de Visual Studio 2012 : 


1 – Desarrollo innovador de aplicaciones
2 – Gestión moderna del ciclo de vida de las aplicaciones
3 – Posee herramientas para una planificación y gestión de proyectos ágil, que mantienen a los equipos alineados e informados.
4 – También tiene herramientas y flujos de trabajo para romper las barreras en la integración funcional y de equipos de trabajo.

Características .NET Framework 4.5:

- Proporciona a los desarrolladores una forma rica y productiva de crear aplicaciones en el cliente (Windows Forms, WPF, Windows 8 Store Apps), on premise (Windows Server) y en la nube (Windows Azure).



- Sus nuevas capacidades incluyen mejoras de rendimiento y la posibilidad de hacer más sencilla la programación asincrónica y paralela. Además, ofrece funcionalidad de .NET y XAML para Windows 8 Store Apps.

- .NET Framework 4.5 en el servidor también proporciona ASP.NET, WIF (Windows Identity Foundation), Entity Framework y WCF (Windows Communication Foundation). Asimismo, para la nube, Windows Azure proporciona soporte completo para desarrollo .NET con Windows Azure SDK para .NET.


Mi consejo...

Estuve jugando con una de las betas de Visual Studio 2012 en un Windows 7 Home premium de 64 bit, y mi consejo inicial es que esperemos a que un primer Service pack solucione todos los problemas que encontré al combinarlo con el 2010, o incluso al alterar el orden de instalación de los productos tanto de escritorio como para la web que incorpora el paquete.

Personalmente trabajo con un Visual C# 2010 Express SP1 y el Visual Web Developer 2010 Express SP1, y no he tenido ningún problema.



Eventos de lanzamiento...

El martes, 23 de octubre de 2012, en el Salón de Actos del Edificio C, de la Escuela Técnica Superior de Ingenieros de Telecomunicación de la Universidad Politécnica de Madrid va a tener lugar el evento Lanzamiento de Visual Studio 2012.

Asistirán profesionales del sector muy conocidos. Es una oportunidad muy interesante para conocer rápidamente qué trae de nuevo Visual Studio 2012.

Debido a las características locales del evento, las 8 charlas previstas serán muy cortas y directas, de apenas 30 minutos, y como colofón y salvo cambios por agenda, tendremos al final de las mismas la posibilidad de disfrutar de una charla de 5 minutos que nos dará César de la Torre desde Seattle.

martes, 16 de octubre de 2012

[005] Nomenclatura de las variables

Sobre las convenciones de nombres

He leído bastante sobre este tema. En lo referente a C Sharp todo el mundo dice que no hace falta indicar el tipo de las variables en su nombre. Existen excepciones como los interfaces que como sabéis empiezan por I, y algunos otros tipos más, pero mi experiencia me dice que aplique la lógica y actue en consecuencia.

La razón que dan los Gurús por la cual no es necesario tipificar las variables es que los actuales IDE ya se encargan de eso y por lo tanto el código se vuelve estéticamente mas legible, pero yo al aplicar la lógica les preguntaría a tan honorables señores... ¿ y que pasa cuando el código está impreso en papel ?



A día de hoy los papeles no tienen << Intellsense >> o la posibilidad de autocompletar código o mostrar tooltips informativos, así que mientras no sea de esta forma yo etiquetaré las variables como siempre lo he hecho.

Volviendo a la lógica antes mencionada si que es cierto que podemos simplificar la notación que utilizábamos en Foxpro para con C Sharp. Yo la he bautizado Notación CSF.

La Notación CSF (CSharpFox)

Una de las cosas que tenemos que tener muy claras es que no podemos abusar de las variables públicas como lo hacíamos en Fox. Tampoco va a ser necesario ponerle nomenclatura a todos los tipos de C Sharp, ya que son más que en Fox y además del tipo de variable, también deberíamos indicar el ámbito de actuación de la misma ( Lo que en Fox era publica, local, etc. )


Donde no pondremos notación...

  • En las variables públicas, puesto que serán pocas y además sabremos de un vistazo que son públicas ya que empiezan con el nombre de la clase Prg.
         Prg.TestMode = true;
  • En las variables de las clases estáticas que podamos crear ni en el nombre de las mismas, ya que serán muy utilizadas y aquí si que se necesita cierta estética en código... osea que en este caso estoy deacuerdo con los Gurús.
          static class Prg { }
  • En las variables de ámbito público de las clases instanciables.
  • En los nombre de los enumeradores.
  • En los nombre de las estructuras.
  • En los nombre de los delegados.

Donde pondremos notación y cual...

  • Utilizaremos siempre la notación Pascal (primer carácter de todas las palabras se escribe en Mayúsculas  menos en aquellas variables donde indiquemos el tipo al principio, aquí utilizaremos la notación Camell (Primera palabra en minúsculas siguientes en Mayúsculas).
  • No utilizar nunca el carácter _ en cualquier definición de C sharp (Varialbes, clases, etc.).  
  • Los nombres de todas las clases que creemos, menos las estáticas, empezarán con T mayúscula, esto lo heredamos de Delphi y nos sirve para diferenciarlas de sus objetos. No he utilizado la c, ya que me la reservo para los string. Ejemplo: TConfig
  • Al igual que en Fox todas las variable de objeto que creemos empezarán por la o minúscula: oConfig
  • Los tipos Buildstring, string y char empezarán con una c (ce) minúscula de caracteres al igual que en fox.
  • Los tipos int, decimal, double, float, long, short, uint, ulong, ushort, byte, sbyte empezarán con n (ene) minúscula. 
  • Los tipos bool con la l (ele) minúscula de logic, esto para las variables locales ( de clase o método) para las globales (las de la clase Prg. utilizaremos la palabra Is por ejemplo IsDemo.
  • Los tipos datetime con una d (de) minúscula).
  • En la definición de objetos gráficos utilizaremos 3 letras minúsculas y luego empezaremos por mayúsculas. Estas 3 letras pueden ser las típicas utilizadas en fox o las que crea automáticamente el C sharp, para mi es indiferente. Ejemplo: lblNombre, btnSalir, etc.
  • las variables de clase privadas podremos una p por ejemplo: pnEstado (Esta es privada y númerica).
Así de simple, ni más ni menos. Por otra parte me gustaría aprovechar este artículo para aclarar un concepto importante que suele llevar a confusión a los programadores de Foxpro.

En las clases de Foxpro las variables de las mismas las llamamos propiedades. En Foxpro 9 hay dos tipos de propiedades. Uno las que se comportan como simples variables (osea que se tiene acceso a ellas directamente)  y dos las que se les puede asignar los métodos Access y Assign.

En C Sharp las propiedades de una clase que se comportan como simples variables (osea que se tiene acceso a ellas directamente) se les llama CAMPOS y las propiedades con el método Access y Assign se les llama PROPIEDADES, con la diferencia de que los métodos Access y Assign se llaman get y set.

NEWS [ Aplicaciones estilo Metro ]

Crear aplicaciones al estilo Metro de Windows 8 con C#


Visual Studio es un eficaz entorno de desarrollo integrado (IDE) para desarrollar aplicaciones de Windows. Proporciona administración de los archivos de origen; compatibilidad integrada de creación, implementación y lanzamiento; XAML, Visual Basic, C#, C++, gráficos, edición de manifiestos y depuración, entre otras muchas cosas. Visual Studio tiene varias ediciones; usaremos Visual Studio Express 2012 for Windows 8. Puedes descargarla sin coste alguno junto con el kit de desarrollo de software de Windows (Windows SDK) para Windows 8; de este modo, dispondrás de todo lo necesario para crear, empaquetar e implementar aplicaciones estilo Metro.

Visual Studio Express 2012 for Windows 8 incluye varias plantillas de proyectos Tienda Windows que ofrecen algunos diseños para ayudarte a comenzar con las aplicaciones. La plantilla de proyecto Aplicación vacía (XAML) proporciona los archivos mínimos que necesitas para todas las aplicaciones estilo Metro.

WinForms también permite crear aplicaciones del estilo de Metro, a fin de cuentas no es ni más ni menos que incorporar al Form todos los objetos ( Botones, campos, etc.) con el estilo visual puesto en Flat.

Una de las más interesantes proposiciones de las aplicaciones Metro, es su sencillez, sus 2 dimensiones, los textos blancos en contrate con otros colores, etc. Todo ello hace que el proceso de redibujar o redimensionar  un formulario sea mucho más rápido que en otros estilos gráficos.



[004] _screen, Ventana Principal

La ventana principal I

Para los los foxpreros nada que decir sobre la ventana principal de nuestras aplicaciones, para todos los demás sólo les puedo comentar que la ventana principal es aquella que (en muchas de nuestras aplicaciones orientadas a datos) representa la aplicación entera. Es la que contendrá todos los formularios de nuestros programas. Tendrá un menú configurable, una barra de tareas y una barra de estado.

La principal ventaja de nuestra ventana principal es que no vamos a tener ninguna limitación en el momento de trabajar con ella. Esto lo entenderán perfectamente los que venimos del Foxpro.



Bien, aquí es donde las cosas cambian un poco para mejor. En Foxpro si queríamos gobernar un formulario desde el código debíamos crearlo en un prg. Esto nos implicaba no poder trabajar en modo gráfico con el mismo. Aunque nuestros formularios fuesen heredados de otros formulario a modo de plantilla, siempre nos tocaba poner el código (la lógica del programa) junto al diseño de los formualrio, y esto complicaba la lectura del código, ya que lo teníamos muy esparcido.

La mejor opción que nos ofrece C Sharp es poder separar la parte de la lógica de negocio de nuestra aplicación de la parte gráfica. Esto nos permitirá progamar de una forma específica y abordar sin gran esfuerzo proyectos con Windows Form y proyectos ASP .NET.

La ventaja más interesante de los formularios de C Sharp es que están contenidos en ficheros de texto con la extensión .cs. Se terminaron los problemas de los SCX a nivel de corrupción, etc. (Todos sabemos que un scx y un sct no son ni más ni menos que un dbf y un fpt).

Para trabajar de esta manera, comentada anteriormente, tendremos toda la parte gráfica de los formularios en los própios forms de c sharp, y el 90% del código para gestionar los forms en un fichero .cs que llamaremos TForms.cs, el cual contendrá una clase llamada TForms.cs que instanciaremos en el método main de nuestro programa. Mostramos un ejemplo:

NOTA: Cuando muestre un código que empieza con tres puntos y termina con tres puntos deberás ver el código completo basándote en los ejemplos anteriores.

...
 static class Prg
 { 
      public static bool TestMode = false;
      public static string LastText = "";
      public static string CurDir = "";
      public static string TForms oForms = null;

      [STAThread]
      static void Main()
      {
          CurDir = Application.ExecutablePath.Substring(0,                              Application.ExecutablePath.LastIndexOf("\\"));

          if ( File.Exists( CurDir + "\\Logger.Txt" ))  
               File.Delete( CurDir + "\\Logger.Txt" );

         TestMode = ( File . Exists ( CurDir + "\\Test.ON" )  ); 
     
         Application.EnableVisualStyles();
         Application.SetCompatibleTextRenderingDefault(false);
         
         oForms = new TForms();
         oForms._ScreenShow();

         Application.Run();
         Application.DoEvents();   
       }
...

Así es pues como quedaría nuestro método Main, al realizar la llamada al formulario principal de nuestra aplicación. Aún no es el código definitivo, ya que nos faltan temas relacionados con ficheros de configuración de nuestro programa, etc.

En posteriores capítulos seguiremos hablando de la ventana principal de nuestras aplicaciones, y os podréis descargar el código fuente del proyecto base para cualquiert tipo de aplicación.

Una de las curiosidades que supongo que has detectado es el hecho de llamar a la clase de los formularios TForms. En el próximo capitulo hablaremos de la nomenclatura de las variables, para ello nos basaremos en el VisualFoxpro, pero también en otros lenguajes como Delphi.

NEWS [ Mono: C# para Android ]

Proyecto Mono

Última versión estable:   2.10.8 del 19 de diciembre, 2011   Multiplataforma

Mono es el nombre de un proyecto de código abierto iniciado por Ximian y actualmente impulsado por Novell (tras la adquisición de Ximian) para crear un grupo de herramientas libres, basadas en GNU/Linux y compatibles con .NET según lo especificado por el ECMA.

Es un proyecto independiente de la plataforma. Actualmente Mono funciona en GNU/Linux, OpenBSD, FreeBSD, UNIX, Mac OS X, Solaris y plataformas Windows.

Existe un proyecto similar, llamado Portable.NET, es parte del proyecto dotGNU.




Xamarin es una companía establecida en mayo de 2011 por los ingenieros que crearon Mono, una implementación libre de la plataforma de desarrollo .NET para dispositivos Android, iOS y GNU/Linux.


En junio de 2000, Microsoft anunció por primera vez su .NET Framework. Miguel de Icaza, de Ximian, comenzó a investigar si una versión para Linux era factible. Posteriormente, el proyecto Mono fue lanzado el 19 de junio de 2001. Ximian fue adquirida por Novell el 4 de agosto de 2003.

Después de la subsecuente adquisición de Novell por parte de Attachmate en abril de 2011, Attachmate anunció el despido de cientos de trabajadores de Novell, incluyendo a desarrolladores de Mono,2 poniendo así el futuro del proyecto en cuestión.

El 16 de mayo, Miguel de Icaza anunció en su blog que Mono será desarrollado y soportado por Xamarin, empresa que planea lanzar una serie de productos para dispositivos móviles. De acuerdo con de Icaza, al menos una parte del equipo original de Mono se ha movido a la nueva compañía.

De este modo se abre una puerta para todos los desarrolladores de aplicaciones de Windows puedan traer sus creaciones a Android eso sí, pagando su licencia profesional de 280 euros al año o una licencia Enterprise por 700 euros al año. Unos precios que quizá echen bastante para atrás a los desarrolladores nóveles aunque Mono da la posibilidad de descargar una versión de prueba gratuita.

Mono para Android viene con su runtime propio, vinculaciones para las APIS nativas de Android, un plugin para Visual Studio 2010 y un SDK con las herramientas necesarias para poder programas aplicaciones, depurarlas y empaquetarlas.

Ahora habrá que ver cuántos desarrolladores de C# y .NET deciden dar el paso, además de pagar la respectiva licencia, y traer su talento y aplicaciones a Android. Una buena noticia que abre el abanico un poco más a todos los interesados en programar para dispositivos móviles.

Por otra parte Si usted sigue las noticias aunque sea un poco, sabrá que Google está teniendo problemas con Oracle sobre el uso de cierta parte de código de Java en Android. Por lo tanto, un grupo de desarrolladores se les ocurrió una solución muy simple: ¿qué pasaría si Android no se basara en Java?  ¿Y si, en cambio, Android se tradujera con C # ? Resulta, que podría no ser una idea tan terrible. Por lo menos, podría hacer que Android fuese aún más rápido de lo que es ahora.

El equipo de Xamarin sabe un poco acerca de todo esto de C # y NET., Que se ha utilizado para ayudar a crear una plataforma de desarrollo llamado Mono, que permite la creación de aplicaciones iOS Android escritas en C # en lugar de Objective C para iOS o Java para Android. Las aplicaciones creadas se pueden traducir fácilmente para su uso en cualquier Android, iOS o Windows Phone, y se pueden escribir con el apoyo total de Visual Studio. Y, el equipo afirma que las aplicaciones creadas con la plataforma funcionan mejor y consumen menos batería que otras aplicaciones escritas de forma nativa.

Android está traduciendo a C #

Teniendo en cuenta estos antecedentes, sería sólo un pequeño salto para que el equipo trasladase todo el sistema Android a C #. Así fue como construyeron una herramienta llamada Sharpen, que ha estado traduciendo Android con el código que se encuentra en el repositorio AOSP. Xamarin se inició con la traducción del código 2.x el año pasado, y comenzó a trabajar en Android 4.0 este año. El equipo dice que Android Mono (C # máquina virtual) es más rápido que Dalvik (Java VM), y muestra algunos gráficos de barras que parecen corroborar esa historia.

La traducción de Android por Xamarin  ha sido nombrada XobotOS, y se ha hecho disponible en github, por lo que los desarrolladores pueden entrar y jugar un rato con ella. El trabajo todavía es joven, pero ha estado funcionando bien en las pruebas con un escritorio Linux. Estamos interesados ​​en ver como se ejecuta  en un dispositivo móvil real.

viernes, 5 de octubre de 2012

[003] Inicio, La clase Prg




Vamos a ver como podemos empezar nuestros proyectos de C Sharp si perder de vista la forma de programar que utilizábamos en VisualFoxpro. 

En este artículo vamos a tratar sobre el .NET FRAMEWORK con el que tenemos que trabajar ( Sí un determinado proyecto no nos lo impide) y sobre el Prg de inicio, en este caso el fichero que contiene el método Main en Visual Studio, llamado  [ program.cs ].


Actualmente deberíamos programa con el .NET FRAMEWORK 2.0, y a continuación os argumentaré el porqué de esta decisión. Las razones podrían ser la siguientes, aunque puedes decidir trabajar con otros .NET FRAMEWORK, ya que en el código del fichero principal  [ program.cs ] no hay nada que impida esta decisión:

  • Si excluimos XP, Windows 7 (32 y 64) y posteriores incorporan por defecto como mínimo el .NET FRAMEWORK 2.0.
  • Su peso para XP no supera los 40 Megas, en el momento de la instalación.
  • Esta muy documentado en internet y depurado por Microsoft.
Para mi son suficientes, no se para vosotros. Veamos ahora el código a incorporar en el fichero [ program.cs ]:

01. using System;
02. using System.Collections.Generic;
03. using System.Windows.Forms;
04. using System . IO;
06. 
07. namespace NuestrpPrograma
08.{
09.  static class Prg
10.  { 
11.       public static bool TestMode = false;
12.       public static string LastText = "";
13.       public static string CurDir = "";
14. 
15.       [STAThread]
16.       static void Main()
17.       {
18.          CurDir = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf("\\"));
19. 
20.          ifFile.Exists( CurDir + "\\Logger.Txt" ))  File.Delete( CurDir + "\\Logger.Txt" );
21.          TestMode = ( File . Exists ( CurDir + "\\Test.ON" )  ); 
22.     
23.         Application.EnableVisualStyles();
24.         Application.SetCompatibleTextRenderingDefault(false);
25.         Application.Run(new _screen());
26.       
27.       }
28. 
29.       public static bool Log( string cIn, string cTx )
30.      {
31.         if!TestMode )                          { return false; }
32.         if ( cIn + cTx == Prg.LastText )  { return true; }
33.  
34.         try
35.        {
36.
37.        StreamWriter oWriter = File.AppendText(ExecPath + "\\Logger.Txt");
38.        oWriter.WriteLine( "[" + DateTime.Now.Millisecond.ToString("0000") + "] " + cIn + " [ " + cTx + " ]" 39.);
40.        oWriter.Close();
41.
42.        }
43.        catch { return false; }
44.     
45.        Prg.LastText = cIn + cTx;
46.       return true;
47.
48.      }
49.
50.      public static bool Log( string cIn, string cTx, string cFile )
51.     {
52.         if!TestMode )                         { return false; }
53.         if ( cIn + cTx == Prg.LastText ) { return true; }
54.  
55.        try
56.       {
57.
58.       StreamWriter oWriter = File.AppendText(ExecPath + "\\" + cFile.Trim() + ".txt");
59.       oWriter.WriteLine( "[" + DateTime.Now.Millisecond.ToString("0000") + "] <" + cIn + " [ " + cTx + " ]" 60.);
61.       oWriter.Close();
62.
63.       }
64.       catch { return false; }
65.  
66.      Prg.LastText = cIn + cTx;
67.      return true;
68.
69.     }
70.  }
71.}

Ok, vamos a desgranar el código expuesto anteriormente...

Lo primero es declarar 3 variables públicas (a parte de todas las que interesen en nuestra aplicación). 
  • [Línea 11] La primera es la que yo llamo TestMode, y como el nombre dice nos indicará si estamos en Modo Test. La variable se pondrá a true si existe un fichero al al lado del ejecutable llamado [ Test.ON ], vacío o con contenido, es irrelevante.
  • [Línea 12] La segunda LastText contendrá el último texto enviado al fichero [ Logger.Txt ], para evitar que se repitan las entradas en este fichero y facilitar así la lectura del mismo.
  • [Línea 13] La tercera es CurDir y contendrá la ruta de nuestro ejecutable la cual nos servirá, de seguro, en múltiples ocasiones.
Ahora vamos a ver lo mínimo y necesario para el contenido del método Main, a la búsqueda de nuestra filosofía Foxpro.

  • [Línea 18] Lo primero es cargar la variable CurDir con su correspondiente ruta, la del ejecutable una vez compilado.
  • [Línea 20] En esta línea comprobamos si ya existe el fichero [ Logger.Txt ], si es así lo eliminamos para empezar siempre a cargarlo con datos de nuevo.
  • [Línea 21] Aquí ponemos la variable TestMode a true si comprobamos que existe, al lado del ejecutable, el fichero [ Test.ON ].
  • [Línea 23] y [Línea 24] y [Línea 25] Ejecutamos el formulario _screen, para los programadores de Foxpro esta será la ventana principal de Foxpro y de nuestras Aplicaciones.
Después del método Main tenemos dos métodos más, en realidad uno sobrecargado ( Esto en Fox no se podía realizar ) el método se llama Log, y cuando lo utilicemos en la aplicación lo podemos hacer de dos maneras diferentes.

En la primera cargaremos datos en el fichero [ Logger.Txt ] y en la segunda cargaremos datos en el fichero que queramos. Vamos a ver varios ejemplos:

namespace Application
{
  static class Prg
  {
  public static string CurDir = "";
  public static string LastText = "";
  public static string CurDir = "";

  [STAThread]
  static void Main()
  {
  
  CurDir = Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf("\\"));
  Log( "Prg.Main()", + "Path: " CurDir  );

  if ( File.Exists( CurDir + "\\Logger.Txt" ))  File.Delete( CurDir + "\\Logger.Txt" );
  TestMode = ( File . Exists ( CurDir + "\\Test.ON" )  ); 

 Log( "Prg.Main()", + "Run :screen" );
     
  Application.EnableVisualStyles();
  Application.SetCompatibleTextRenderingDefault(false);
  Application.Run(new _screen());

  }
 }
}

En este caso utilizamos el Log para documentar puntos del arranque de la aplicación. Ten en cuenta que si utilizas el método Log fuera de la clase Prg deberás hacerlo de esta manera:

Prg.Log( "Clase.Metodo()", + "Parametros..." );

La otra forma de utilizar el método Log es indicarle en un parámetro más el nombre del fichero particular donde queremos separar parte de los datos, por ejemplo todo el código relacionado con un determinado formulario (Lo veremos más adelante).



NOTA: No aconsejo, para nada, cargar la clase Prg con más métodos que los que he definido en la misma. 

NEWS [ Futuro de C# ]

Reflexionando sobre el futuro

Futuras y presentes reflexiones para un programador .NET


Microsoft lleva de calle a todos los "informáticos" que trabajan sobre sus tecnologías. No para de sacar novedades continuas e importantes en todos sus productos, especialmente a los programamdores. Ya que, no solamente la evolución ha sido constante en lo que a las herramientas se refiere, sino que aún han sido más vertiginosas en las posibilidades y capacidades de los diferentes lenguajes de programación que incorpora la plataforma .NET.


Hagamos una reflexión sobre el incierto pero apasionado futuro laboral para los programadores que estamos haciendo aplicaciones informáticas en nuestro trabajo, o como hobby.

Realmente, No importa qué lenguaje aprendas hoy en día. La programación es sobre la implementación de algoritmos. Por lo tanto esa es la habilidad que hay que desarrollar. Así que sólo debes elegir el lenguaje que más te acomode, aprender a usarlo y obtener experiencia en la realización de programas cada vez más complejos.

C# vs el resto de los lenguajes


Aunque nadie lo quiera reconocer, C# empieza a ser la niña bonita en los lenguajes de .NET. Por otr parte no se quiere reconocer que C# es un Java. Eso sí, ya nació genéticamente mejorado en relación a su padre putativo. El paso del tiempo lo ha convertido en un lenguaje mucho más robusto, flexible y que no deja de crecer.

.NET es una plataforma de programación con un horizonte muy lejano y mantiene un ritmo incansable de evolución. Aumentando el nivel de productividad que lo hace muy rentable para ser utilizado en desarrollos profesionales.

Pero no solamente de C# vive .NET y, en una política excelente, se ha implementado en la plataforma más de 50 lenguajes de programación diferentes. Y entre ellos destacar Pyhton, Ruby, Pascal, PHP, etc.

Además sólo hay que seguir el indice TIOBE para comprobar como, de una manera muy estable, va acaparando el mercado de la programación.

Ventajas de utilizar C#

Su facilidad de uso y considerable capacidad para acelerar el tiempo de desarrollo . Por ejemplo, si usted fuera a codificar una calculadora para Windows con una interfaz gráfica totalmente funcional, es posible que tardase varias horas durante un día con C + +, sin embargo, si usted utiliza C # para codificar el mismo programa sólo necesitaría unos 30 minutos. Ese es el poder de C #.
Otra razón de para la utilización de C # son sus IDE, la mayoría vienen con un editor gráfico integrado. Esto le permite editar fácilmente la interfaz gráfica de usuario para programarla en poco tiempo.

Desventajas de utilizar C#

Puesto que C # tiene que cargar su CLR (Common Language Infrastructure) y el Framework. NET cada vez que se ejecuta un programa en C # la carga del mismo es considerablemente mayor que la carga de un programa equivalente en C ++. Por lo tanto, si es vital la velocidad del programa   entonces estarás mucho mejor programado con C o C + +.
Otro gran problema que C # tiene es el hecho de que estás irremediablemente obligado a usar el Framework .NET de Microsoft. Esto significa que es mucho más difícil de transferir su programa de Windows a otro sistema operativo. Sin embargo, la llegada del Proyecto Mono ha hecho esta mucho más fácil de lo que era antes, ahora se puede portar casi cualquier programa en C # que desea tanto Linux y Mac OS.
C # no permite el acceso directo al hardware de la computadora, esto se podría considerar a la vez como bueno y malo. Bueno, porque significa que hay menos de que preocuparse, no tienes que preocuparte de la gestión de memoria y no tienes que preocuparte de los accidentes. Es malo porque tienes mucha menos flexibilidad con tus programas y no los puedes optimizar para el hardware.



[002] Variables Públicas


Como tengo la intención de ofrecer mis conocimientos compartidos entre Foxpro y C Sharp para todo aquel que considere interesantes mis ideas ( especialmente los que, como yo, vienen de Foxpro) hablaré para los unos y los otros.

Sabido es que C Sharp es totalmente orientado a objetos ( su paradigma es el de la programación orientada a objetos POO ), en el caso de Foxpro se comparte la programación secuencial ( paradigma de otros tiempos ) y la POO. Esto proporciona cierta libertad a los programadores, algo muy parecido a lo que les sucede a los programadores de C++.

En este artículo os voy a proporcionar una forma de tener variables públicas o globales en una aplicación de C Sharp, sin perder su paradigma de lenguaje orientado a objetos.

Empezaremos por desgranar un poco el funcionamiento de arranque de C Sharp el cual es muy peculiar, ya que en el caso de Foxpro el punto de entrada del programa es un fichero (prg, form, etc.), en el caso de C Sharp es un método que por la obligatoriedad del paradigma orientado a objetos, este debe de estar en una clase. Vamos a ver un ejemplo:


namespace Nombre_del_Programa
{
    class Prg
    {
        static void Main(string[] args)
        {
            // Esta es la primera línea de código...
            Console.WriteLine("Hola Mundo!");
        }
    }
}

Lo primero que comprobamos es que el método Main es estático. Esto me hace pensar que poco podemos hacer con la clase Prg... ¿ La instanciamos, y creamos objetos de ella ? .- No tiene mucho sentido...


Por lo tanto no considero una locura hacer que la clase Prg sea también una clase estática, y que incluso las variables de la clase Prg sean variables estáticas. Veamos este ejemplo en el que creamos una variable para almacenar la ruta de ejecutable de la aplicación que estamos creando.

namespace NuestroPrograma
{
    static class Prg
    {
        public static string CurDir = "";
       // Otra variable pública para toda la aplicación...
      // Otra variable pública para toda la aplicación...
      // Otra variable pública para toda la aplicación...
      // Otra variable pública para toda la aplicación...

        static void Main(string[] args)
        {
            // Esta es la primera línea de código...
            CurDir = Application.StartupPath + "\\";
            Console.WriteLine("Hola Mundo!");
        }
    }
}

En este caso en cualquier parte de nuestro programa podremos acceder a la variable CurDir y utilizarla o cambiar su contenido. Todas la variables públicas / Globales de nuestra aplicación las podemos insertar en la clase Prg y así podremos utilizarlas donde queramos ( siempre que estemos dentro del ámbito del namespace NuestroPrograma ) sólo tendremos que llamarlas con la siguiente sintaxis:

namespace NuestroPrograma
{
    static class FuncionesGenerales
    {
        public string CurDirectory()
        {
            return Prg.CurDir;
        }
    }
}

Mi único consejo en este caso es que las variables declaradas en la clase Prg estén inicializadas con algún valor por defecto.













NEWS [ Futuro de Java ]

Lenguaje de Programación Java
A medida que vaya obteniendo información relevante relacionada con el futuro de .NET y de nuestro C Sharp os la iré mostrando...

Oracle, Google y Java....


Oracle está ralentizando las actualización o mejor dicho la continuación de Java, con el objetivo de centrar futuras mejoras del lenguaje en un uso empresarial, en perjuicio de la actual y diversa comunidad Java. Según varios analistas de Forrester Jeffrey Hammond y John Rymer, Oracle está limitando el desarrollo del lenguaje Java al uso empresarial. “Sun tenía un enfoque muy amplio para Java que incluía en primer lugar el middleware de la empresa pero también los ordenadores personales, los dispositivos móviles y los sistemas embebidos. Sin embargo, el foco de Oracle se quedará principalmente en el middleware empresarial, porque es ahí donde está el dinero”, apunta el informe.

Como consecuencia de esta decisión, Java puede perder mucha importancia entre la comunidad de desarrollo mundial, a medida que sea considerado más como un lenguaje especializado en servidores para clientes de Oracle y de IBM, advierten los analistas.

Desde que Oracle anunciara la compra de Sun Microsystems, completada hace un año, el CEO de Oracle, Larry Ellison, ha elogiado con frecuencia el lenguaje de programación Java como uno de los activos más valiosos de la adquisición.

Pero esta alta consideración no extenderá a Java como lenguaje de programación general. De hecho, algunos de los movimientos de Oracle desde que llevara a cabo la compra han apuntado a un uso más restringido.

Aunque la mayor parte de la especificación Java es de código abierto, Oracle mantiene un estricto control sobre las variantes de código abierto a través de su propiedad de la marca Java, sostienen los analistas. Además, también mantiene una mano fuerte sobre JCP (Java Community Process), el organismo independiente que supervisa el desarrollo de Java.

En diciembre, la Apache Software Foundation retiró su participación del JCP como protesta por algunas de las decisiones de concesión de licencias de Java y, aunque Oracle pidió a la ASF que reconsiderara su salida, la petición no tuvo éxito. “La pérdida de la Apache Software Foundation como organismo de apoyo afectó a la credibilidad de Oracle como socio de los Java alpha geeks, encargados de promover y dirigir la innovación en torno a Java”, apuntan los analistas de Forrester.

Para contrarrestar la falta del apoyo de la ASF, Oracle parece estar cortejando a IBM, dando su apoyo a la implementación Java de código abierto OpenJDK de la compañía.

Otro lactor que ha llevado a los analistas a deducir estas teorías es que Oracle no está abordando correctamente una de las debilidades actuales de Java: la complejidad. Dicha complejidad podría llevar a los desarrolladores a considerar otras alternativas para uso interno o en cloud como la plataforma .NET de Microsoft o Ruby on Rails. 

Para llevar a cabo este informe, los analistas de Forrester han entrevistado a 12 organizaciones que participan directamente en java, incluyendo Oracle, IBM, RedHat, Microsoft y la propia ASF. Asimismo, también han tenido en cuenta los comentarios dejados en blogs y sitios web de Forrester los propios usuarios de Java y los realizados en persona en eventos como JavaOne. 

Según ForresterOracle no ha querido hacer comentarios respecto a las conclusiones del informe.
Fuente: ComputerWorld.


Oracle trató de convencer a los usuarios de MySQL de su apuesta por esta base de datos tras la presentación de MySQL 5.5, pero ahora se enfrenta a las dudas de la comunidad de usuarios respecto a otro producto de Sun: Java. Incluso Google está metida en el debate.

El jefe del desarrollo de Java en Google, Josh Bloch, dio una charla en la conferencia virtual Red Hat Middleware 2020, y en ella indicó que la comunidad Java “está enferma, y no se ve fin a este problema”, en referencia a las dificultades por las que está pasando este lenguaje de programación.

Aunque Bloch admitió que la plataforma -incluyendo a otras tecnologías paralelas- sigue siendo popular, también indicó que está siendo asolada por ciertos problemas, como las disputas por diversas licencias o los debates técnicos que han enfrentado a los desarrolladores Java.


El futuro del lenguaje de programación Java podría volverse incierto luego de la salida de James Gosling creador del lenguaje y líder del proyecto desde sus inicios. La compra de Sun Microsystems por parte de Oracle sigue generando descontento entre las filas de los fieles a Sun y sus proyectos. Al parecer Goslig llevaba en realidad ya algunas semanas fuera de la compañía, pero fue apenas hace unos días que decidió hacer del conocimiento público su salida.

“Cualquier cosa que podría decir que fuera sincero y exacto haría más daño que bien” fueron las palabras que dejo en su blog personal a modo de responder cualquier pregunta al respecto. Larry Ellison presidente ejecutivo de Oracle solo se refirió a Java como la mejor inversión de software que la compañía ha hecho jamás y aunque dijo que pretende aumentar la inversión en el mismo, no dejo claro cuál será el camino a seguir. La decisión de Goslig es solo una de tantas que han acontecido en estos últimos meses donde se ha visto como poco a poco gente clave de Sun abandona la nave.