7zip y Delphi

7ziplogoHoy me dí a la tarea de buscar la manera de trabajar con archivos 7zip desde Delphi.

Encontré así la biblioteca d7zip, publicada bajo licencia MPL1.1, lo cual en pocas palabras, nos permite hacer uso de ella en proyectos libres o privativos.

A pesar de que la biblioteca no ha publicado nuevas versiones desde Abril del 2010 (v.1.2), el log de SVN muestra alguna actividad aún en noviembre del 2011 y es compatible con las últimas versiones de Delphi, lo cuál me pareció aceptable para considerarlo un proyecto vivo.

Antes de decidirme a utilizarla, quise comprobar si encontraría algún problema para compilar y ejecutar aplicaciones de 64 bits con esta, tomando en cuenta que la descarga incluye únicamente la versión de 32 bits para el archivo 7z.dll (versión 4.65).
Sigue leyendo

Delphi XE2/XE3 – Creando aplicaciones VCL con estilo

A partir de Delphi XE2 y ahora también en XE3, las aplicaciones Delphi contienen un nuevo motor de Temas y Estilos.

Esto significa que podemos hacer una aplicación visualmente más atractiva sin prácticamente ningún esfuerzo, y también que podemos añadir nuestro propio estilo personalizado a las aplicaciones.

Por hoy, veremos de manera rápida cómo realizar una aplicación con un estilo diferente en Delphi, cómo podemos interrogar a la propia aplicación sobre los estilos disponibles y cómo podemos, en tiempo de ejecución, cambiar de estilo.

Pero, primero, veamos el resultado de compilar nuestra sencilla aplicación Demo y ejecutarla:

Formulario con estilo

Sigue leyendo

es.StackOverflow alcanza la etapa de compromiso

La primera etapa de la propuesta para la creación de es.StackOverflow se ha completado hoy, y hemos entrado a la etapa de compromiso.

¿Cómo me comprometo?

Esta es la parte sencilla. Debes visitar la página de la propuesta y hacer clic en el link commit (como se muestra en la figura).

Esto te presentará un formulario donde debes firmar tu compromiso. En realidad no firmas en el sentido tradicional, sino que colocas tu nombre (que se hará público), tu dirección de correo (que no se hará pública), la calidad en la que participarás en el sitio y un comentario adicional que se publican junto a tu nombre.

Una vez firmas, tu nombre será incluido en la lista de comprometidos del sitio:

¿A que me comprometo?

Al hacerlo, te comprometes a participar en el sitio una vez este alcance la fase beta. Tu compromiso se considera cumplido si publicas al menos 10 entradas (preguntas o respuestas) durante dicha fase beta del sitio.

No me había enterado hasta ahora, ¿aún puedo comprometerme?

¡Claro!, también invita a tus amigos, publica en tu blog y en tus redes sociales, pues si logramos completar la fase de definición con 168 seguidores, vamos a necesitar muchos más para completar esta etapa.

¿Que hay que lograr para cambiar de etapa?

La red StackExchange pide que se cumpla con tres parámetros de comprometidos para que el sitio llegue a la fase beta.

  • No menos de 200 personas comprometidas con el sitio
  • No menos de 100 personas con al menos 200 de reputación en algún otro sitio de la red
  • Alcanzar 500 puntos de puntuación de compromiso, que se calcula a partir de qué tan activos son los usuarios comprometidos en otros sitios de la red.

Hay casos donde se ha requerido de más de 800 usuarios para completar esta fase, pero soy optimista que tratándose la audiencia del sitio de programadores, tendremos un buen número de participantes ya activos en StackOverflow o en El idioma español y su Uso, y por tanto nuestros números serán similares a los de StackOverflow en portugués.

¡El compromiso envejece!

Hablando de la puntuación de compromiso, el algorítmo del cálculo toma en cuenta la edad del compromiso, por lo que a medida que van pasando las semanas y los meses, nuestro compromiso aporta cada vez menos a la puntuación. Para evitar esto, basta simplemente con visitar de nuevo la página de la propuesta (con la sesión iniciada), pues esto renueva nuestro compromiso.

¡Pasa la voz!

Este es el momento de pasar la voz sobre la propuesta del sitio. Invita a tus colegas, amigos, compañeros de estudio o de trabajo. Publica en tu blog y en tus redes sociales sobre esta propuesta.

La clase TIdMessageBuilderHtml y el envío de correos HTML desde Delphi

Hay muchas formas de enviar correos con Delphi.

Mi preferida desde hace tiempo es hacerlo vía SMTP con la clase TIdSMTP, que es flexible y poderosa.

Hoy, a raíz de que mi estimado amigo, Edgar Ramírez, publicara su artículo Enviar correo con imágenes incrustadas con Delphi he recordado que hace tiempo me gustaría iniciar una serie de artículos sobre el uso de INDY y la comunicación TCP/IP con Delphi.

A manera de respuesta a la publicación citada, quiero mostrar cómo realizar el envío de un correo similar —con una imagen incrustada— haciendo uso de la clase auxiliar TIdMessageBuilderHtml, que en mi opinión no solo facilita las cosas sino que nos deja una solución mucho más elegante y fácil de entender en el código.

La parte relevante del envío de correo es:

procedure TfrmCorreo.EnviaCorreoImagen(const FileName: string);
var
  Builder: TIdMessageBuilderHtml;
  Msg: TIdMessage;
  SMTP: TIdSMTP;
begin
  Builder := TIdMessageBuilderHtml.Create;
  try
    Builder.Html.Add('<HTML><HEAD><TITLE>Una imagen para ti</TITLE></HEAD><BODY>');
    Builder.Html.Add('<p><strong>Una imagen para ti</strong></p>');
    Builder.Html.Add('<div>');
    Builder.Html.Add('  <img border="0" src="cid:laimagen" >');
    Builder.Html.Add('</div>');
    Builder.PlainText.Add('Este correo contiene una imágen para ti. '
      + 'Debes usar un visor HTML para verla');
    Builder.HtmlFiles.Add(FileName, 'laimagen');
    Msg := Builder.NewMessage();
    try
      Msg.Recipients.EMailAddresses := eRecipients.Text;
      Msg.From.Name := eFromName.Text;
      Msg.From.Address := eFromEmail.Text;
      Msg.Subject := 'Una imagen para ti';
      SMTP := TIdSMTP.Create;
      try
        SMTP.Host := eSMTPHost.Text;
        SMTP.Username := eSMTPUser.Text;
        SMTP.Password := eSMTPPass.Text;
        SMTP.Connect;
        try
          SMTP.Send(Msg);
        finally
          SMTP.Disconnect;
        end;
      finally
        SMTP.Free;
      end;
    finally
      Msg.Free;
    end;
  finally
    Builder.Free;
  end;
end;

Como puede observarse, la instancia de TIdMessageBuilderHtml se encarga de los detalles sobre adjuntar los archivos. De lo que debemos asegurarnos es de proveer un cid diferente para cada imagen incluida en el HTML de nuestro correo, y que estos identificadores se correspondan con los archivos incluidos posteriormente en la llamada al método HtmlFiles.Add, que recibe como parámetros el nombre del archivo y el cid correspondiente.

Aclaración: En mi opinión cualquier método con más de 25 líneas de código es demasiado grande y debe considerarse su refactorización. Es el caso del código publicado, sin embargo he preferido mantener un solo método para no enredar al lector con tener que seguir mentalmente las llamadas entre ellos. Como se ve, el método se encarga de todo el envío del correo, lo cuál conceptualmente también puede ser mucho para un solo método. En algo para producción, esto probablemente sería dividido en 3 distintos métodos: armar el correo HTML, configurar el mensaje y finalmente la conexión/envío/desconexión.

Marco Cantù llega como nuevo Product Manager de Delphi

El día de hoy (ayer), durante la primera sesión de CodeRage 7 ha sido anunciado a Marco Cantù como nuevo Delphi Product Manager, Más tarde el mismo Marco ha hecho replica de la noticia en twitter y en su blog, mientras por su parte JT le daba oficialmente la bienvenida a Embarcadero.

Marco es una prominente figura de la comunidad global, uno de los más conocidos autores y conferencistas del mundo de Delphi, por lo que seguramente es conocido por la gran mayoría de usuarios de la herramienta y por tanto no necesita presentación. Sus libros han sido leídos por muchos —incluyéndome— y sus conferencias, eventos y presentaciones son siempre de las más concurridas.

En lo que a mi respecta, como siempre, espero que esta incorporación traiga un mayor acercamiento a las necesidades de los usuarios y visión para encarar el futuro de Delphi.

Go Delphi y Go Marco!

El idioma español y su uso

No, no, en esta entrada no hablaré sobre temas lingüísticos.

logo del sitio SL&U

La entrada está relacionada al sitio de la red StackExchange dedicado a ese tema: y a la propuesta para crear StackOverflow en Español, al que también me gusta llamar es.StackOverflow.

Pero, ¿qué relación hay entre uno y otro?

Bueno, tienen en común el hecho de que ambos pertenecen a la red StackExchange, y me parece importante el que el primero se encuentra ya en fase de beta pública, lo que considero una excelente oportunidad para acercar a los nuevos allegados a algunos nuevos conceptos y funcionalidades de esta red de sitios, permitiéndoles vivir por si mismos la experiencia, sorteando:

  1. La barrera del idioma, ya que actualmente existe StackOverflow en Inglés, donde también podemos experimentar el funcionamiento, pero que requiere tener un nivel medio-alto de dominio del idioma para redactar preguntas o respuestas y de esa manera involucrarse/engancharse con la comunidad
  2. La barrera del tiempo, pues, aun cuándo es difícil estimar el tiempo que falta para llegar a esta etapa en es.StackOverflow, es fácil ver que ese tiempo se mide en meses, y no días u horas

Considero que esto es necesario ya que el funcionamiento de los sitios de la red StackExchange —especializados en el formato de preguntas y respuestas— es distinto de los sistemas de foros que tradicionalmente se han utilizado para este fin, y como muchas cosas en la vida, a nadar se aprende en el agua.

Si te involucras, no solo aprenderás sobre cómo funciona StackOverflow/StackExchange, también te beneficiarás y podrás ayudar a otros. Quizás tengas alguna duda sobre el uso del idioma (todos tenemos al menos una) para la que puedes escribir una pregunta y recibir la respuesta de un experto, tal vez seas un experto en la materia y esta sea la oportunidad para que alcances el reconocimiento de la comunidad por eso, o simplemente puedas ayudar a alguna persona que trata de aprender Español resolviendo sus dudas con tu vasto conocimiento del idioma por el simple hecho de que es tu lengua materna. Por estas razones, te invito a darte de alta en el sitio y probarlo.

Pero, ¿qué tanto cambia?

Antes de que te inscribas, sin embargo, me gustaría contarte un poco sobre lo que será diferente con respecto a tus experiencias previas. Las principales características que ahora me vienen a la mente son:

  • Las preguntas se clasifican utilizando etiquetas (tags). No existen foros y sub-foros. Esto permite que una pregunta pueda filtrarse de acuerdo a los intereses y especialidades de quienes visitan asiduamente el sitio y están en capacidad de responder. Hablando de StackOverflow, por ejemplo, una pregunta puede etiquetarse
    Delphi

    y a la vez

    multi-hilos

    de esa manera puede ser que un experto en multi-hilos (que quizás no conozca Delphi) termine dando la respuesta acertada a la pregunta, aunque no publique una línea de código. Una pregunta puede llevar muchas etiquetas. Podemos dar seguimiento a lo que ocurre dentro de una o varias etiquetas.

  • Se hace una clara diferencia entre preguntas, respuestas y comentarios. En un sistema de foros tradicional es difícil llevar la pista de las distintas conversaciones que ocurren dentro de un hilo, ya que todos los mensajes tienen la misma apariencia visual y se ordenan cronológicamente. Por la misma razón también es difícil identificar cuáles son respuestas a la pregunta original y cuales son simplemente comentarios, notas laterales u otro tipo de contenido. En StackOverflow/StackExchange eso no es así. Las respuestas a la pregunta están claramente identificadas como tal y los comentarios ocurren en el contexto de la pregunta o alguna respuesta particular.
  • Quién realizó la pregunta puede (y debiera siempre) aceptar una respuesta, lo que significa que esa respuesta le ha sido útil para resolver su duda/problema. Esto es de gran beneficio para quién luego llega al hilo porque tiene el mismo problema/duda, pues puede identificar de un vistazo cuál una respuesta/solución que ha sido ya probada, sin tener que navegar entre varios mensajes.
  • Las preguntas y respuestas se editan de manera colaborativa para mejorar su calidad. En este sentido, StackOverflow/StackExchange es similar a una wiki. Por ejemplo, si un usuario novato publica una pregunta, enfocada de manera incorrecta o con términos inapropiados, un usuario experto puede editarla y mejorar los términos empleados, el enfoque, o la redacción/gramática/ortografía. Se guarda un historial de todas las versiones de una pregunta/respuesta y pueden compararse cualquier par de ellas (diff).
  • Cada miembro de la comunidad puede votar por las preguntas y respuestas dadas por otros de acuerdo a su propio criterio.
    • Se vota a favor de una pregunta cuándo la encontramos bien redactada/planteada y consideramos que quién pregunta ha puesto el empeño adecuado en brindar toda la información relevante y necesaria para informar a la comunidad de las condiciones/entorno en las que se da su problema y poder obtener una respuesta adecuada, sin hacer perder el tiempo a quienes se interesen en responderle. Se vota en contra de ella cuándo la encontramos mal planteada/enfocada o consideramos que quien pregunta no se ha esforzado lo suficiente.
    • Votamos a favor de una respuesta cuando consideramos que es correcta y tiene calidad y propiedad técnica. Votamos en contra de una respuesta cuando a nuestro criterio es equivocada y provoca confusión
  • Si tenemos algo que decir sobre una pregunta o respuesta, lo hacemos en un comentario. Se puede dejar comentarios tanto a las preguntas como a las respuestas.
  • Como medida aproximada de la credibilidad de un usuario, por parte de la comunidad, existe la reputación. La reputación se gana cuándo tus preguntas y respuestas reciben votos a favor, y cada vez que una de tus respuestas es aceptada. También se pierde cuándo estas mismas reciben votos en contra.
  • La reputación te da privilegios. En StackOverflow/StackExchange el sitio es llevado principalmente por la comunidad, que se encarga de mantenerlo limpio y ordenado. Hay muchas tareas que en otros sitios solo pueden ser realizadas por moderadores, mientras en StackOverflow pueden realizarse por cualquier usuario que ha ganado el privilegio de hacerlo.
    Hay privilegios básicos, como poder incluir una imagen o hipervínculos en un mensaje, poder votar en contra de preguntas/respuestas, que requieren un poco de reputación para ser realizados, de manera que un usuario nuevo pueda en poco tiempo realizar estas acciones, pero que desalientan a quienes llegan sin un genuino interés por participar.
    Hay otros privilegios, como crear nuevas etiquetas o aprobar las ediciones realizadas por usuarios novatos, que requieren de algún esfuerzo para ser alcanzados, mientras hay otros, como votar por cerrar preguntas, editar preguntas de otros sin requerir de revisión, que requieren de una gran cantidad de reputación y por tanto lleva un tiempo y esfuerzo considerable ganarlos.
  • Muchas acciones/decisiones requieren de un proceso democrático y participativo. Por ejemplo, cerrar una pregunta requiere que haya 5 usuarios privilegiados que estén de acuerdo en que debe ser cerrada. Re-abrirla requiere también de 5 usuarios privilegiados de acuerdo en que debe realizarse tal acción.
  • No se aceptan preguntas duplicadas. Si una pregunta ha sido realizada ya antes, esta es cerrada por la comunidad, con un hipervínculo a la otra pregunta, que puede contener ya una respuesta.
  • El sistema otorga medallas a quienes se involucran y realizan acciones positivas para la comunidad. Completar tu perfil te otorga la medalla de bronce Autobiographer, completar un año de participación en el sitio, siempre que ganes al menos 200 de reputación durante ese año te da la medalla de plata Yearling, recibir una puntuación de más de 100 votos en una pregunta te da la medalla Great Question, y así muchas más. El sistema muestra la cantidad de medallas de oro, plata y bronce junto al nombre de cada usuario y su reputación en muchas partes.
  • No hay mensajería privada entre usuarios
  • El sitio se enfoca en preguntas y respuestas sobre el tema en cuestión, de manera técnica, objetiva y evitando distractores, por tanto:
    • No se aceptan hilos off-topic, como noticias o las famosas tabernas/bares (quizás logremos tener una taberna en meta, esto es algo cultural que debe rescatarse :D)
    • No se aceptan preguntas que dan lugar a debate o respuestas subjetivas. Por ejemplo, preguntas del tipo ¿cuál es el mejor XXXX?, ó ¿qué opinan de YYYY? son cerradas.
    • No es permitido hablar sobre el sitio, en el sitio mismo. Para esto existe el sitio meta, por ejemplo, meta.stackoverflow.com, donde se utiliza el mismo formato de P&R para hablar de cosas relacionadas con StackOverflow, y donde si se permite el debate y preguntas subjetivas, que ayudan a darle forma y definir constantemente cómo funciona y va cambiando/adaptándose el sitio.
    • No están permitidas las firmas en los mensajes. Cada quién tiene opción a colocar información sobre si mismo (o sus productos/empresas/proyectos/blogs) en su perfil, donde cualquier interesado puede verla
  • Los mensajes se escriben en texto plano, utilizando markdown, que es una serie de reglas para el resaltado (negrillas, cursivas, etc), la inclusión de hipervínculos y de imágenes.

Otro aspecto, en mi opinión, muy importante, es que el contenido se publica bajo licencia de Creative Commons–atribución, lo que asegura que el contenido generado por la comunidad pertenece a la comunidad. Cualquiera es libre de Compartir (copiar, distribuir, ejecutar y comunicar públicamente la obra), hacer obras derivadas y hacer un uso comercial de ellas. Para ello se requiere de la atribución apropiada y que el contenido se comparta bajo la misma licencia.

Como puede verse, StackOverflow es otro mundo. En mi opinión, uno mejorado (aunque no perfecto). Para formarte tu propia opinión puedes esperar a que es.StackOverflow llegue a la fase de beta privada/pública, o involucrarte en Spanish Language & Usage ahora mismo.

Sobre SL&U

Spanish Language & Usage es un sitio que aún se encuentra en fase beta. Eso significa que está a prueba y no necesariamente será lanzado como un sitio de la red StackExchange. Todo depende de cómo vayan sus números en el proceso, que por ahora son buenos en varios aspectos, pero que aún requieren mejora y trabajo por parte de la comunidad, sobre todo en la cantidad de preguntas que reciben al día, que es apenas de 0.6, mientras que se considera que debe ser mayor a 15 preguntas por día para un sitio beta saludable, y el número de visitas por día, que está por debajo de 700, pero se espera alcance más de 1,500 (1.500 en España :D).

Esto significa que quizás lo que publiques allí deje de estar en línea en un futuro próximo si las cosas no mejoran, pero cuando esto ha ocurrido con otros sitios, StackExchange pone a disposición la información del sitio para descarga, de manera que no se pierda completamente.

También significa que al involucrarte, estarás ayudando a esta propuesta a mejorar sus números. Ojo que esto no ocurre con el simple hecho de inscribirte, sino ocurrirá si lo visitas y escribes preguntas y respuestas en el sitio.

El sitio acepta preguntas y respuestas en Inglés y en Español por igual, y actualmente el idioma oficial del contenido es el Español. En sus primeros días este idioma oficial era el Inglés, pero se cambió en el camino. Por esa razón, existen muchos hilos en Inglés, pero es perfectamente válido responder a estos en Español o simplemente ignorarlos.

La interfaz de usuario, sin embargo, está disponible solo en Inglés, pues la red StackExchange no soporta (aun) la internacionalización. Es una característica que está en camino. La mayor limitante es, quizás, que las etiquetas no soportan tildes u otros caracteres fuera del alfabeto inglés. StackExchange no ha querido publicar fechas para cuando se encontrará disponible el soporte a la internacionalización, pero si ha dicho por diferentes medios y personas que está en su lista de tareas y que definitivamente lo hará en un futuro.

Eso también significa que, quizás ocurra que debamos arrancar es.StackOverflow con la interfaz en Inglés… quizás no, como sea, no es mala idea que aprendas unas cuantas palabras nuevas en Inglés para que te acostumbres a usar el sitio.

Ya para terminar esta larga entrada, comentar que el sitio fue fundado por personas de habla inglesa, entusiastas sobre el uso del español, y es probable que no haya reclutado a muchos verdaderos expertos, lo cual puede incidir de manera directa en la experiencia del usuario promedio, al no encontrar respuestas expertas a preguntas complejas. También el hecho de que, aún cuándo el idioma y su uso es un tema técnico, la complejidad y variedad del español da mucho más lugar a opiniones y ambigüedades que la programación y desarrollo de software, y esto definitivamente se refleja en el contenido.

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.

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 🙂