viernes, octubre 31, 2008

SEMANA PYME 2008



La semana del 3 al 7 de noviembre se va a llevar acabó la semana PYME 2008 en el centro Banamex de la ciudad de México, un evento que organiza el gobierno federal con el fin de que emprendedores y empresarios sepan como fortalecer y mejorar sus negocios.

En esta ocasión tengo la oportunidad de asistir como expositor gracias a la invitación que muy amablemente me hizo la incubadora de empresas de la UNITEC (Universidad Tecnológica de México). Mostrare principalmente mis dos desarrollos más fuertes que son:

  1. SADI.- Sistema de administración de inventarios que controla todas las operaciones de compra/venta de un negocio, los módulos que lo integran son: Punto de venta, Inventarios, Bancos, Cuentas por cobrar y por pagar, etc.
  2. ADMINLAB.- Sistema de administración de laboratorios de análisis clínicos que facilita el proceso de emisión de resultados, partiendo de una solicitud de estudios hasta la generación del reporte final al paciente.
El objetivo es dar a conocer mis productos y servicios al público y buscar nuevos mercados para comercializar los mismos. Espero que todo salga bien.

Aprovecho para darles la dirección de mi empresa en internet: www.intelsoftassociates.com en donde se encuentra todo lo relacionado con mis productos y servicios.

Saludos y hasta la próxima

martes, octubre 21, 2008

UNA PRIMERA IMPRESION DE DELPHI PRISM

Bueno pues Embarcarcadero ha anunciado Delphi Prism en un comunicado de prensa. Sabemos que la nueva versión de Delphi para .NET está basado en el compilador de RemObjects llamado Oxygene. Por lo que estuve leyendo RemObejcts otorgo licencias a Embarcadero para que pueda hacer uso de su tecnologia pero en realizad el compilador y todo lo demás sigue siendo propiedad de RemObjects.

Tuve la oportunidad de que me eligieran como un beta-Tester de la nueva versión de Delphi, lo probé y lo que vi la verdad me gusto mucho, ahora si ObjectPascal está a la altura de C# e incluso tiene algunas cosas mejores que este último.
Creo que al fin estamos viendo una versión decente de Delphi para .NET, en mi humilde opinión que Borland vendiera sus herramientas de desarrollo fue lo mejor que nos pudo haber pasado a los desarrolladores Delphi, ahora Embarcadero nos está llevando por buen camino y creo que vamos a salir ganando.

Veamos algunas ventajas de Delphi Prism:
  • Ahora soporta por completo las últimas versiones del framework de Microsoft.
  • Ahora Delphi se encuentra al mismo nivel que C# y VB.NET, por lo que ahora la elección de Delphi es mucho más fácil.
  • Ahora Delphi Win32 puede seguir adelante sin detenerse por problemas de compatibilidad con .NET, Ahora va a ver dos caminos bien definidos si quieres desarrollar para .NET utiliza Delphi Prism y si quieres desarrollar para win32 Utiliza Delphi 2009.

Pero ¿Porque utilizar Delphi Prism?

Creo que es una excelente herramienta de desarrollo para la plataforma .NET, ahora tenemos a nuestra disposición la versión del framework 3.5 y cosas que veremos en el framework 4.0 tales como: Class contracts, LINQ, PFX o desarrollo en marco paralelo entre otras muchas cosas, además de que con todos lo problemas que hubo con Delphi en los últimos años muchos desarrolladores Delphi migraron a C# (entre ellos uno a quien yo admiraba mucho de apellido marteens) por lo que ahora no hay porque migrar a C# si tenemos lo mismo en nuestro amado Delphi.
Ya casi tengo listo un primer artículo de sobre Delphi Prism y sus nuevas características en cuanto lo termine lo subiré.
Por lo pronto les dejo los links del comunicado de Embarcadero y una entrevista con el arquitecto en jefe de RemObjects marc hoffman.


http://www.codegear.com/products/delphi/prism

http://www.bitwisemag.com/2/Delphi-Prism-Visual-Studio-Pascal

Saludos y hasta la proxima

Etiquetas: , ,

lunes, octubre 06, 2008

DELPHI PRISM

Pues me acabo de enterar que a finales de este año van a lanzar Delphi Prism o Delphi 2009 para .NET, lo que me sorprendio es que va a ser un plug-in para Microsoft Visual Studio 2008 al parecer va tener todo el soporte para el FrameWork 3.5, Linq,RIA para interfaces, desarrollo para PDA's entre otras cosas.
A reserva de ver cuanto va acostar la licencia porque voy a tener que pagar una licencia de Visual Studio y aparte el costo del Plug - in, parace una buena noticia, los señores de Embarcadero parece que estan haciendo bien su trabajo. Aquí les dejo unos cuantos links de la noticia:

http://blog.marcocantu.com/blog/nick_announces_delphi_prism.html

https://forums.codegear.com/thread.jspa?threadID=4350

https://beta.embarcadero.com/callout/default.html?callid=6E2829BA76664D57ABD8F26046781EA5

Pues veremos que pasa con esta nueva versión de nuestro amado Delphi ahora corriendo en el entorno de Visual Studio.

domingo, octubre 05, 2008

UNA LISTA GENÉRICA

Si nos limitamos al comportamiento común a todos los tipos de datos primitivos posibles, poca cosa podremos hacer con los genéricos, ahora que Delphi 2009 soporta los tipos genéricos se han desarrollado bibliotecas con tipos genéricos para tipos de datos no primitivos tales como TList y TArray entre otros, para poder utilizarlos debemos agregar la unidad Generics.Collections y Generics.Defaults a la clausula uses.
En este post veremos el uso de de la lista genérica TList.
Supongamos que queremos crear una lista con personas representadas por la clase TPersona:



















Ahora declaramos una lista genérica del tipo TPersona:




Y a continuación un método que llene la lista:






Por último vamos a mostrarla en un TListBox:











Como podemos ver, no hay ciencia para el uso de una lista genérica, declaramos una variable de tipo TList y le damos un tipo concreto a T que es TPersona, posteriormente la instanciamos y la llenamos y por último recorremos la lista usando el nuevo for in do.
Ahora vamos a complicar un poco más el ejemplo:
Queremos ordenar la lista por un atributo de la clase persona, vamos a decir por la propiedad Apellidos.Frecuentemente tenemos la necesidad de ordenar las listas de tipo genérico, ya que el tipo genérico puede contener cualquier tipo de objeto la forma en que la lista debe ordenar los elementos la debe proporcionar el programador. Para este fin TObjectList que es la clase de la cual deriva TList proporciona dos métodos sobrecargados:




El primer método se utiliza para designar un procedimiento de ordenación estándar por ejemplo QuickSort.

Si el programador necesita definir su propio tipo de ordenación entonces requiere del uso del segundo método. El segundo método acepta una interfaz del tipo IComparer como parámetro la cual está definida de la siguiente forma:





El método Compare de la interfaz IComparer devuelve un valor entero que debe ser interpretado de la siguiente manera: 0 si son iguales, menor de cero si el primer parámetro (Left) es menor que el segundo (Rigth) o mayor que cero si el primer parámetro (Left) es mayor que el segundo (Rigth), por lo tanto el programador debe de tener en cuenta esta regla a la hora de implementar la interfaz.

En Delphi 2009 se ha definido la siguiente clase que hereda la interfaz ICompare y que es la que utilizaremos para ordenar la lista genérica:







Y TComparison es un delegado que está definido de la siguiente forma:





Sabiendo esto y aplicando nuestros conocimientos anteriores podemos implementar el método Sort utilizando métodos anónimos de la siguiente forma:





Como el método Sort espera un parámetro de tipo IComparer utilizamos el método de clase Construct de la clase TComparer que devuelve una interfaz de este tipo, ahora como el método Construct acepta un parámetro de tipo TComparison y esté está definido como un método anónimo entonces podemos implementar ahí mismo la rutina que devuelva el valor entero (basado en la regla que mencionamos anteriormente) que se necesita para realizar la ordenación. Por último la función CompareText compara dos cadenas y devuelve un valor entero con el resultado de la comparación basada en la regla que mencionamos anteriormente.

Los genéricos son una nueva característica de Delphi 2009. Al igual que en C# se utilizan en gran cantidad de casos, en este contexto el uso de métodos anónimos es grande.
Además de TList Delphi tiene más tipos genéricos incluidos TArray, TEnumerable, TDictionary, TQueue, etc. Por lo que siempre hay más por explorar y explicar pero esto será en los próximos post.

Hasta aquí mi explicación espero que les sea de gran ayuda. Hasta la próxima.

Etiquetas: , ,

viernes, octubre 03, 2008

GENÉRICOS EN DELPHI

Ahora toca el turno a los famosos Generics o Génicos, los tipos genéricos son una nueva característica en Delphi 2009 (win32) ya estaban presentes desde Delphi 2007 pero solo para .NET, estos tipos agregan el concepto de parámetros de tipo, lo cual permite diseñar clases y métodos que aplazan la especificación de uno o más tipos hasta que el código cliente declara y crea una instancia de la clase o del método. Mediante la utilización de un parámetro de tipo genérico vamos a llamarle T (por estandarizar realmente puede llamarse X o Z o como mejor nos parezca), se puede escribir una clase única que otro código de cliente puede utilizar sin generar el costo o el riesgo de conversiones en tiempo de ejecución u operaciones de conversión, como se muestra a continuación:












En esta clase no se han concretando ni el tipo del campo privado valor ni el del único parámetro del método EstableceValor en su lugar se le especificado un parámetro tipo T que se concretará al utilizar la clase. Por ejemplo:







Esto crearía un objeto de la clase genérica TClaseGenerica con el parámetro tipo T concretizado con el argumento tipo integer. La primera vez que el compilador encuentre esta concretización de T a integer realizará un proceso de expansión o instanciación del genérico que consistente en generar una nueva clase con el resultado de sustituir en la definición genérica toda aparición de los parámetros tipos por los argumentos tipo.

Uso de los genéricos

Los genéricos no son una novedad introducida por Delphi en el mundo de la programación, sino que otros lenguajes como Ada, Eiffel o C++ (plantillas) ya las incluyen desde hace tiempo. Su principal utilidad es, como su propio nombre indica, facilitar la creación de código genérico que pueda trabajar con datos de cualquier tipo. Esto es especialmente útil para crear tipos que actúen como colecciones (pilas, colas, listas, etc.).

Como ejemplo vamos a crear una clase Pila que implemente genéricos













Ahora definamos la implementación:























Al declararse la clase pila se le ha añadido un parámetro a la declaración y para variar lo llamamos T. En todos los casos, T se utiliza como si fuese un tipo de datos cualquiera: declaramos un array de elementos de tipo T, asignamos un parámetro de este tipo en un elemento del array del mismo tipo y devolvemos valores de tipo T. No importa cuál es el tipo exacto de de T.







Etiquetas:

eXTReMe Tracker