Archivo de la categoría: Delphi

Temas de delphi

No olvides asistir al taller gratuito de Delphi Básico

Por si no te has enterado, o no lo recordabas, Salvador Jover (Embarcadero MVP) dará hoy —viernes 26 de octubre de 2012— un taller gratuito en línea de Delphi, dirigido a principiantes, basado en la serie Un día con los mayores publicada en su blog.

Encontrarás más información en el grupo Delphi Solidario, en Facebook, o puedes ir directamente a suscribirte a la lista de correo del taller.

Anuncios

Primera entrega del libro Programación paralela con OmniThreadLibrary

Portada del libro Primož Gabrijelčič y un servidor anunciamos con orgullo que el día de hoy se ha realizado la publicación de la primera entrega del libro, de cuya traducción ya hablé recientemente.

Cito palabras del correo de anuncio enviado a quienes mostraron interés en comprarlo:

Finalmente, ¡aquí está la primera entrega del libro!.

  • Actualizada a la versión en Inglés publicada el 8 de octubre de 2012.
  • Adaptado a la versión 3.02 de OTL.
  • Contiene el contenido completo de los capítulos:

    2. Introducción a MultiThreadLibrary
    3. Multi-hilos de alto nivel
    7. How-to

Al comprar el libro, recibirás todas las actualizaciones futuras completamente gratis.

Gracias por el interés mostrado en adquirir el libro.

Sinceramente.
Juan Antonio Castillo y Primož Gabrijelčič

Puedes visitar la página oficial del libro dentro de este mismo blog, o ir directamente a la página donde podrás comprarlo en LeanPub.com.

Programación paralela con OmniThreadLibrary, el libro

OmniThreadLibrary es una biblioteca multi-hilos para Delphi, escrita casi en su totalidad por Primož Gabrijelčič, también nombrado Embarcadero MVP recientemente.

Parallel Programming with OmniThreadLibrary es un libro, sobre esta biblioteca, que se publica a medida que se va escribiendo en Leanpub.com, y cuyo autor es también Primož. El estado general del proceso de escritura (en Inglés) del libro se refleja en la entrada current status del blog del autor.

Programación paralela con OmniThreadLibrary es la traducción al Español de ese libro, realizada por este servidor en un esfuerzo por traer contenido de calidad y actual a la comunidad hispana de usuarios de Delphi. A la fecha de publicación, aún no hay una primera versión del libro, pero estamos trabajando a todo vapor para tenerla lista pronto.  El anuncio oficial se hizo hace un par de días en el blog The Delphi Geek.

Portada del libro

Puedes expresar tu interés en comprar el libro, una vez se publique su primera versión, en la página del libro en  LeanPub.com.

De acuerdo al manifiesto Lean Publishing, y en concordancia con el libro en Inglés, este se publica mientras se escribe. Por tanto, una vez se publique su primera versión, puedes comprarlo y leerlo aún antes de que esté terminado. Cuándo lo compras, no solo lo compras en su estado actual, sino recibirás gratuitamente todas las versiones futuras del libro.

Incluso, puede influenciarse el orden en que se va escribiendo el contenido original (en Inglés), ya que es ese mismo orden en el que se irá publicando en Español.

Si ya lo has comprado (o si demuestras interés en hacerlo, por ahora), recibirás una notificación cuando este se publique por primera vez y cuándo se publiquen las versiones sub-siguientes.

Puedes también sindicar este blog, suscribirte vía correo electrónico, o seguirme en twitter: @jachguate

Presentando RAD Studio XE3

Al momento de escribir esta entrada, está por empezar la presentación en español de RAD Studio XE3

Si aún no te has inscrito para el evento, que será en línea, puedes hacerlo haciendo clic aquí

Tus comentarios y críticas a mi presentación son bienvenidos en esta entrada 🙂

Community Evangelist es ahora Embarcadero MVP

Embarcadero MVP (Banderas)Hace aproximadamente dos meses, publiqué una entrada comentando de la invitación que recibí de Embarcadero al proyecto que en ese entonces era llamado Community Evangelist.

Ahora, luego de algunas opiniones vertidas sobre el nombre del proyecto, finalmente Anders Ohlsson ha hecho el anuncio oficial del programa Embarcadero MVP.

MVP: Most Valuable Professional

Algunos de los invitados han dedicado ya publicaciones en sus blogs al respecto, entre ellos:

A todos ellos, mis sinceras felicitaciones por el reconocimiento!.

De verdad que me llena de mucha satisfacción ver mi nombre entre tantas luminarias de Delphi, así como la bandera de mi amada Guatemala.

Cadenas de caracteres Unicode en Delphi (Parte I)

Justificación

Mi motivación para escribir este, y otros artículos sobre características no tan nuevas de Delphi, es que muchos programadores de habla hispana hoy día siguen sin conocer algunos o muchos de los detalles sobre las mismas.  En este caso particular, desde la versión 2009 las cadenas de caracteres son Unicode, pero muchos enfrentan problemas relacionados con el tratamiento de archivos o la comunicación con otros sistemas, incluyendo los motores de bases de datos, en parte debido a la poca información que hay disponible en Español sobre el tema. Este es el primero de una serie de artículos sobre Unicode en Delphi.

A estas alturas seguramente sabes o al menos has escuchado que Delphi es Unicode y probablemente lo usas en tu día a día, en cualquier versión igual o superior a la 2009.  Por lo mismo, no iremos por todos los detalles, pues como ya has podido comprobar, Unicode es fácil de usar y la mayor parte del tiempo puedes trabajar con él y sacarle provecho aún sin conocer sus detalles.  La intención de la serie de artículos tampoco es darte un conocimiento profundo sobre Unicode en si, pues hay mucha información sobre el estándar en la red, sino más bien darte un mayor grado de comprensión sobre cómo Delphi enfrenta el tema, cómo migrar aplicaciones realizadas en versiones anteriores de la herramienta y cómo puedes inter-operar con otros sistemas que no son Unicode o que requieren el uso de alguna representación específica de la información textual.  Estés o no ya trabajando con Unicode, espero que encuentres alguna información que te sea de utilidad.

Delphi Unicode

Ideograma chino Yue (luna)

Ideograma chino Yue (luna) (U+6708)

En Delphi 2009 o superior, al declarar una variable de tipo Char, PChar o string, estamos declarando contenedores que tienen soporte para el conjunto de caracteres Unicode, y por tanto pueden representar información textual de cualquier alfabeto soportado por el estándar, como japonés, chino, árabe, cirílico, sin olvidar las lenguas latinas como el español, portugués, francés, italiano y y otras.

El primer beneficio directo de esto, es que los caracteres que no pertenecen al alfabeto inglés, como las vocales con tilde o la eñe del español, tienen una única representación en el conjunto de caracteres y no dependen ya de la configuración local de Windows, como era el caso de cadenas ANSI. ¿A quién no le ha ocurrido que una aplicación almacena información textual que de pronto se corrompe, puesto que lo que antes era “Atlántico” de pronto se convierte en “Atl?ntico”?  Empecemos pues por el principio.

¿Qué es Unicode?

Unicode es el nombre de un conjunto internacional de caracteres, que abarca los símbolos de todos los alfabetos de escritura conocidos, además de símbolos técnicos, de puntuación y otros caracteres utilizados para la escritura, aún cuando no forman parte de ningún alfabeto. El estándar Unicode, formalmente conocido como ISO/IEC 10646, ha sido definido y documentado por el consorcio Unicode.

Unicode en esencia es muy simple, pues especifica un único identificador numérico, llamado code point, para cada símbolo.

Representación en memoria

Dada la gran cantidad de símbolos existentes en el estándar (más de 100,000) hay varias maneras de representar un mismo code point en memoria. La única manera de representar todos los caracteres de manera simple y uniforme, es usando cuatro bytes (32 bits) para cada caracter, sin embargo esto resulta costoso en términos de memoria y proceso.

Composición ñ

Composición de la letra ñ

Unicode Transformation Format, abreviado como UTF, es parte del estándar y asigna a cada code point una secuencia única de bytes que lo representan, en tres formatos distintos. Las asignaciones funcionan en ambas direcciones y sirven para convertir entre las diferentes representaciones existentes, que son:

  • UTF-8, codificación de largo variable entre 1 y 4 bytes;
  • UTF-16 es también una codificación de largo variable que usa 2 o 4 bytes para representar cada code point
  • UTF-32 representa todos los caracteres usando siempre 4 bytes.

Entre las representaciones UTF-16 y UTF-32 se soporta tanto la forma big-endian como little-endian, dependiendo del orden en que se colocan los bytes. Cuando se almacena un archivo de texto Unicode, se puede grabar una cabecera con una firma indicando explicitamente la representación contenida.

Firma Forma
00 00 FE FF UTF-32, big-endian
 FF FE 00 00 UTF-32, little-endian
 FE FF UTF-16, big-endian
 FF FE UTF-32, big endian
 EF BB BF UTF-8

Delphi actualmente utiliza la representación UTF-16 little-endian para toda variable string, Char o PChar declarada.

PRÓXIMAMENTE

En una próxima entrega hablaremos en más detalle sobre los tipos de variables que se pueden declarar y la forma de hacer conversiones entre strings ANSI (ASCII) y Unicode, así como de resolver algunas advertencias del compilador al migrar aplicaciones hechas con versiones anteriores de Delphi.  Si deseas ser notificado por correo cuando se publiquen las siguientes entradas, no olvides suscribirte al blog.

Atribuciones

Las imágenes utilizadas en esta entrada son de la autoría de Magna (Yue) y Marco Regueira (composición ñ)

Embarcadero Community Evangelist

Embarcadero Community Evangelist logoRecientemente fui invitado por Embarcadero a formar parte del nuevo programa “Community Evangelist“.

Este programa es un programa para reconocer y motivar a los miembros destacados de la comunidad Embarcadero, y  apalancarlos* potenciarlos como una extensión de Relaciones con los Desarrolladores

Quisiera expresar que me siento honrado con dicha invitación y he aceptado gustoso, pues veo una tremenda oportunidad para acercar más a la comunidad de habla hispana a la compañía que fabrica Delphi, así como una oportunidad de servir, a través de mis publicaciones y presentaciones, a dicha comunidad, ya que este nuevo compromiso me lleva a retomar esta tarea de escribir algunos artículos y continuar haciendo con más fuerza las actividades para favorecer, cohesionar y acercar a la gente que conforma esta comunidad, entre ellos mismos y con Embarcadero, en ambas vías.

Escribo este artículo por varias razones:

En primer lugar para pasar la voz: hay cosas positivas que están ocurriendo ahora mismo para la comunidad de usuarios de Delphi de habla hispana. Espero que esta iniciativa de Embarcadero ayude realmente a acercar a la comunidad actual de usuarios a la compañía, y ayude también a regar la voz sobre las excelentes herramientas que pone a nuestra disposición.

Luego, para agradecer a quienes me han propuesto y me han tomado en cuenta, se que hay muchas personas en la comunidad que merecen este reconocimiento y hay varios de ellos que han sido también invitados. Me honra ser parte de este selecto grupo de personas, pues son todos ellos de gran valía y personas de quienes aprendo constantemente muchas cosas. Espero pronto verles levantar la mano y hacer eco en la comunidad de este nuevo rol que jugamos.

Finalmente, felicitar a Embarcadero por la iniciativa.  Dentro de la compañía, resaltar a Allison DiLauro por su atención y esfuerzo porque América Latina tome mayor relevancia dentro de esta y augurar a Anders Ohlsson, encargado del programa a nivel mundial, mucho éxito para que la compañía siga apostando por ella y poniendo más recursos para acercarse a los desarrolladores, entender sus necesidades y ayudarles a crecer como profesionales, en una espiral de mutuo beneficio.

* He quitado la palabra apalancar por la palabra potenciar gracias al comentario de Germán Estévez (Neftalí), que me cuenta que en España tiene un significado distinto al que se le da en mi natal Guatemala. La palabra original en inglés es leverage, que viene de palanca, en el sentido de dar más fuerza utilizando para ello una palanca.

El costo de Trim()

Recientemente he estado ayudando a un cliente a mejorar el desempeño de una aplicación crítica hecha con Delphi, que procesa miles de transacciones por hora. Haciendo algunos cambios al código, me topé con la necesidad de evaluar el costo de hacer Trim() de algunas variables.

En concreto, me topé con unas 50 o 60 construcciones que tenían una estructura como esta:

if Variable <> '' then 
begin 
  VariableA := VariableA + X; 
  VariableV := VariableB + Trim(Variable); 
end;

Dado que de todas maneras había que re-escribir el código, pensé que era una buena oportunidad para aplicar el principio DRY y que a su vez esto permitiría tener una rutina más fácil de leer.

Por tanto, pensé en hacer una rutina genérica que recibiera las variables (el caso real implicaba cambios más profundos, pero para fines didácticos acá asumiremos que la estructura básica se mantendría):

La nueva rutina sería similar a esta:

procedure AsignaValor(Variable, X: string; 
  var VariableA, VariableB: string); 
begin 
  if Variable <> '' then 
  begin 
    VariableA := VariableA + X; 
    //se ha quitado la llamada a trim 
    VariableV := VariableB + Variable; 
  end; 
end;

De esta manera, la vieja rutina luciría así: Sigue leyendo

Preguntas y respuestas en StackOverflow

Logotipo StackOverflowStackOverflow es un sitio de preguntas y respuestas, en Inglés, para programadores en general, es decir, se habla de todos los lenguajes de programación, ya que no está ligado o dirigido a alguno en particular. Dado que sus creadores, Joel Spolsky y Jeff Atwood son viejos bloggers reconocidos principalmente en el mundo de .NET, la mayoría de las preguntas giran en torno a esta plataforma, principalmente c#.

La actividad en Delphi es, a mi gusto, aún baja, sin embargo presenta una clara tendencia al alza y eventualmente publico algunas respuestas, también en un esfuerzo por practicar y pulir mi habilidad para escribir en inglés (que aún da pena, pero va mejorando).

Escribo estoy hoy, principalmente porque StackOverflow me parece una idea genial y una comunidad interesante, con sus propias reglas de las que probablemente escriba algo a manera de introducción en el futuro. Si podes leer/escribir en Inglés, seguro vale la pena darte una vuelta por allí, y si podes ayudar con mi (hasta hoy) única pregunta, aún pendiente de una respuesta definitiva, tendré algo más que agradecer al hecho de que leas esta entrada.

Nuevamente, si sabes como hacer una ventana de notificación tipo Windows 7 en Delphi, toda la ayuda es bienvenida.

INDY: Finalmente se hizo el merge del branch Tiburon en el trunk

Indy Sockets, la popular biblioteca de clases para programación TCP/IP que viene con Delphi, finalmente ha completado el merge del branch Tiburon de regreso al trunk.

Si no estás familiarizado con la terminología del control de versiones, particularmente SubVersion, lo que esto significa es que el código fuente, que alguna vez se ramificó del desarrollo principal (branch), para soportar el cambio a Unicode en los tiempos de Delphi 2009 (llamado Tiburon), finalmente ha sido llevado de regreso (merge) a la raíz del desarrollo (trunk).

No es que hasta ahora se terminara de portar el código… en realidad es que luego de realizar las adaptaciones necesarias, quién sabe por qué, el equipo de INDY siguió desarrollando en el branch y el código nunca se integró de vuelta. Ahora lo hacen, en parte, porque estamos próximos a ver el inicio del desarrollo de INDY 11 (probablemente otro release que romperá la compatibilidad con el código existente).

En conclusión

  • Si obtenés el código de INDY directamente de SVN, deberás configurar el cliente para que obtenga el código de trunk y no de branches/tiburon, como lo haces ahora
  • Si obtenés el código de INDY descargando el ZIP del mirror, ahora debes descargar el archivo Indy10_xxxx.zip y no el Indy10Tiburon_xxx.zip
  • Si aún compilas con versiones viejas de SVN, mi consejo es que lo actualicés y te hagás a la idea que es buena idea mantenerlo actualizado 😉

Como es costumbre en INDY, la documentación oficial (incluyendo el sitio de descarga) aún no refleja esta información, y será actualizada pronto.

Vía anuncios de Remy Lebeau en foros Embarcadero y foros Atozed Software