Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Bibliotecas de código fuente > [GH Freebrary]
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-11-2016
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Ese día llegó

He liberado la primera parte de mi biblioteca de clases para versiones modernas de Delphi, en un sitio Web famoso para proyectos de software libre.

Es una versión beta, todas las unidades compilan en Delphi XE7.

https://github.com/algonzalez74/GHFreebrary

Bienvenidas las contribuciones.
Responder Con Cita
  #2  
Antiguo 16-11-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Gracias Al.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 16-11-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Un gran paso adelante...
Responder Con Cita
  #4  
Antiguo 16-11-2016
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Que alegría saber de este lanzamiento , te felicito y agradezco Al.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 16-11-2016 a las 17:33:06. Razón: Faltaba el agradecimiento, pues lo había pensado pero por alguna extraña razón no lo había escrito
Responder Con Cita
  #5  
Antiguo 16-11-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Me uno a las felicitaciones. Vamos a pegar un vistazo si señor!
Responder Con Cita
  #6  
Antiguo 16-11-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Gran trabajo, ¡ Felicitaciones !

Un abrazo
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 17-11-2016
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.457
Poder: 20
newtron Va camino a la fama
Amigo Al.

Gracias por compartir tu trabajo.
__________________
Be water my friend.
Responder Con Cita
  #8  
Antiguo 17-11-2016
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

¡Me uno a las felicitaciones Al!
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 17-11-2016
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Muchas gracias Al por compartir tu conocimiento y estas librerías con todos nosotros.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #10  
Antiguo 18-11-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Seria realmente genial iniciar algo como esto con la nueva biblioteca
Responder Con Cita
  #11  
Antiguo 18-11-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Hola nuevamente Al

Estuve explorando un poco el codigo, pero aun no he puesto en marcha ninguna prueba

Solamente tengo un par de comentarios para hacerte:

- Me alegra que uses identificadores calificados. A mi tambien me gusta hacerlo y creo que crear bibliotecas publicas es una buena forma de impulsar al resto a que haga lo mismo. Solamente hay una pequeña diferencia en como lo hago yo; yo prefiero seguir la convencion que esta adoptando poco a poco Firemonkey, en la cual, el prefijo para los elementos del tipo enumerado ya no se usa

Por ejemplo, de GHF.Sys, linea 528

Código Delphi [-]
  TDirectionSide = (eSource, eDest);

Esto nos lleva a escribir codigo asi:

Código Delphi [-]
procedure Foo(const Direction: TDirectionSide);
begin
  if Direction = TDirectionSide.eSource then
  begin
    //  
  end;
end;

Yo creo que el prefijo que historicamente se uso en Delphi (pensando tambien en TAlignLayout --> alClient, alTop, etc) no es necesario si se usan identificadores calificados y "ensucia" el codigo fuente.

Otro detalle que creo que es importante, veo que en tus unidades siempre activas la directiva de compilacion SCOPEDENUMS

Ahora me entro la curiosidad, pero yo creo que lo mas seguro es compilar nuestros tipos enumerados con la directiva y luego volver a ponerla a OFF que es su valor por defecto. Es decir, asi es como yo declaro los tipos enumerados:

Código PHP:
{$SCOPEDENUMS ON}
  
/// <summary> The diferent scopes that a Token is allowed to operate on </summary>
  
TTokenScope = (
    
/// <summary> The Token may Read data </summary>
    
Read,
    
/// <summary> The Token may Write data </summary>
    
Write,
    
/// <summary>
    ///   The Token may operate on a Offline basis, that is, the user grants permission once and then the bearer may
    ///  request a refresh without explicitly asking the user
    /// </summary>
    
Offline_Access
  
);
{
$SCOPEDENUMS OFF
Esto me asegura que si o si se deba prefijar el tipo para poder utilizar alguno de los valores, que es el efecto deseado

- Otra recomendacion es el uso de regiones para hacer el codigo mas legible. Las regiones te permiten [plegar?] porciones del codigo y denotarla con un nombre, para hacer mas facil la navegacion dentro de la unidad. Es mas largo hacer scroll en una unidad larga como por ejemplo las GHF.Sys y GH.SysEx. Tambien creo que es una buena idea usar una region para la licencia, que ocupa su buena porcion de espacio

- El ultimo punto es el uso de la documentacion XML. Esta es una de las ultimas practicas que he adoptado, y ya me he acostumbrado. Consiste en documentar el codigo de forma tal que pueda ser util al momento de que el usuario use tu biblioteca, y no tenga que tener un manual de referencia para consultar. Esta documentacion XML se adjunta en la ventana que aparece cuando Delphi nos muestra cuales y que tipo de parametros recibe un metodo, el retorno de una funcion, etc

Si hoy escribo alguna clase, metodo, funcion, tipo, lo que sea, sin incluir la documentacion XML, me siento mal conmigo mismo (es similar a tu comentario cuando hablamos de esto). De hecho en muchas ocasiones me ha pasado que es dificil explicar que es lo que deberia hacer el metodo en cuestion, y es cuando detecto un error de diseño que debe ser refactorizado incluso antes de escribir codigo; tambien existe el caso de que no se me ocurre como escribir el codigo, pero al escribir la documentacion luego se hace mas facil la implementacion

El efecto logrado es el siguiente:

Código PHP:
unit Vcl.WinControl.Helper;

interface

uses
  Vcl
.Controls;

type
{$REGION 'TWinControlHelper'}
  
TWinControlHelper = class helper for TWinControl
  
public
    
/// <summary> Intenta darle foco al control; devuelve True si tuvo exito, False en caso contrario </summary>
    /// <remarks> Este metodo captura y controla excepciones </remarks>
    
function TrySetFocusBoolean;
  
end;
{
$ENDREGION





Las ultimas vesiones de Delphi, en sus bibliotecas mas nuevas, escriben esta documentacion en linea y me ha ayudado mucho, por ejemplo la unidad REST.Json

Código PHP:
  TJson = class(TObject)
  public
    
/// <summary>
    /// Converts any TObject descendant into its Json representation.
    /// </summary>
    
class function ObjectToJsonObject(AObjectTObjectAOptionsTJsonOptions = [joDateIsUTCjoDateFormatISO8601]): TJSOnObject;
    
/// <summary>
    ///   Converts any TObject decendant into its Json string representation. The resulting string has proper Json
    ///   encoding applied.
    /// </summary>
    
class function ObjectToJsonString(AObjectTObjectAOptionsTJsonOptions = [joDateIsUTCjoDateFormatISO8601]): string;

    
/// <summary>
    ///   Encodes the string representation of a TJSONValue descendant so that line breaks, tabulators etc are escaped
    ///   using backslashes.
    /// </summary>
    /// <example>
    ///   {"name":"something\else"} will be encoded as {"name":"something\\else"}
    /// </example>
    
class function JsonEncode(AJsonValueTJsonValue): stringoverload;
  
end

Última edición por Al González fecha: 20-11-2016 a las 21:29:23. Razón: Arreglar enlace
Responder Con Cita
  #12  
Antiguo 20-11-2016
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Hola Agustín. Me da mucho gusto notar el gran interés que muestras.

Intentaré responder a todas tus inquietudes, comenzando por esta:
Cita:
Empezado por AgustinOrtu Ver Mensaje
Seria realmente genial iniciar algo como esto con la nueva biblioteca
Muchos de aquellos ejemplos todavía tienen valor, sólo que algunos métodos cambiaron de lugar o de nombre. No me opondré si inicias otros hilos para dar a conocer nuevos ejemplos con lo que vayas descubriendo. Incluso puedes empezar tomando el ejemplo comparativo que acabo de poner en el Readme.

Saludos.

Al González.
Responder Con Cita
  #13  
Antiguo 20-11-2016
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por AgustinOrtu Ver Mensaje
Me alegra que uses identificadores calificados. A mi tambien me gusta hacerlo y creo que crear bibliotecas publicas es una buena forma de impulsar al resto a que haga lo mismo
Sigamos impulsándolo.

Cita:
Empezado por AgustinOrtu Ver Mensaje
prefiero seguir la convencion que esta adoptando poco a poco Firemonkey, en la cual, el prefijo para los elementos del tipo enumerado ya no se usa [...] creo que el prefijo que historicamente se uso en Delphi no es necesario si se usan identificadores calificados y "ensucia" el codigo fuente.
También iba a adoptarla pero luego recordé que, con los record helpers, casi cualquier tipo de datos (incluyendo los enumerados) puede tener propiedades, métodos, otras constantes, etcétera. Quitar por completo el prefijo de las constantes enumeradas supone un problema a la hora de que nosotros leemos una expresión como "TFoo.Bar". ¿Es Bar una de las constantes enumeradas que definen el tipo o es otra cosa? En cambio "TFoo.eBar" no sólo permite inferir qué tipo de elemento es eBar (una constante enumerada), sino que por relación lógica permite determinar también qué es TFoo (un tipo enumerado). Dentro de otras estructuras, como las clases, hay variedad de elementos que no es costumbre ni muy útil distinguir mediante un prefijo. Yo empleo el prefijo sólo en casos especiales. Y uno de ellos es el de las constantes que aparecen en la declaración de un tipo enumerado, porque nunca sabes cuándo tú o alguien más le añadirá propiedades o métodos mediante un ayudante.

Cita:
Empezado por AgustinOrtu Ver Mensaje
en tus unidades siempre activas la directiva de compilacion SCOPEDENUMS [...] creo que lo mas seguro es compilar nuestros tipos enumerados con la directiva y luego volver a ponerla a OFF que es su valor por defecto.
Eso es lo normal con otras directivas de compilación locales. Sin embargo, pongo {$ScopedEnums On} desde el inicio de cada unidad para asegurarme de que todos los tipos enumerados que ella declare serán utilizados desde el exterior de forma calificada, sin excepción. Cuando el autor está convencido de la buena práctica que antes mencionamos, no hay riesgo alguno en poner esa directiva en On para toda la unidad.

Cita:
Empezado por AgustinOrtu Ver Mensaje
Otra recomendacion es el uso de regiones [...] Las regiones te permiten [plegar?] porciones del codigo
Tomo tu recomendación. Conozco lo útil que es la directiva $Region, y ya uso algunas, como la {$Region 'Error messages (ermXXX)'} presente en varias unidades. Aunque admito que sería bueno "regionizar" más bloques. Voy a trabajar en ello.

Cita:
Empezado por AgustinOrtu Ver Mensaje
creo que es una buena idea usar una region para la licencia
Cierto, lo haré también.

Cita:
Empezado por AgustinOrtu Ver Mensaje
[...] uso de la documentacion XML. Esta es una de las ultimas practicas que he adoptado, y ya me he acostumbrado. Consiste en documentar el codigo de forma tal que pueda ser util al momento de que el usuario use tu biblioteca, y no tenga que tener un manual de referencia para consultar. Esta documentacion XML se adjunta en la ventana que aparece cuando Delphi nos muestra cuales y que tipo de parametros recibe un metodo, el retorno de una funcion, etc [...] me ha pasado que es dificil explicar que es lo que deberia hacer el metodo en cuestion, y es cuando detecto un error de diseño que debe ser refactorizado incluso antes de escribir codigo; tambien existe el caso de que no se me ocurre como escribir el codigo, pero al escribir la documentacion luego se hace mas facil la implementacion
Esto tampoco me es indiferente. La pregunta es ¿cómo hacer una documentación "in-line" sin "ensuciar" el código? Hasta ahora no me convencen las convenciones y herramientas que he visto (si bien no he visto mucho, aclaro). Este punto hay que seguir estudiándolo.

Última edición por Al González fecha: 20-11-2016 a las 21:28:37.
Responder Con Cita
  #14  
Antiguo 21-11-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Lamentablemente no puedo usar la biblioteca ni en Delphi 2010 ni 10.1 Berlin, debido a errores de compilacion

Voy a ver si puedo ir solucionandolos poco a poco para poder probar algo

Saludos!
Responder Con Cita
  #15  
Antiguo 21-11-2016
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por AgustinOrtu Ver Mensaje
Lamentablemente no puedo usar la biblioteca ni en Delphi 2010 ni 10.1 Berlin, debido a errores de compilacion

Voy a ver si puedo ir solucionandolos poco a poco para poder probar algo
Muchas gracias, Agustín. Acá me están haciendo un trámite para tener más libertad con los instaladores. Deseo poder dedicar tiempo a la adaptación para diferentes versiones. De hecho sería bueno abrir una nueva encuesta para ver cómo se está moviendo el universo de usuarios.

Hoy, con el repositorio, será más fácil que otros programadores se involucren con el proyecto.

Te adelanto que el problema para compilar en Seattle y Berlin tiene que ver principalmente con cierta puerta trasera que permitía a una clase genérica acceder a los campos privados de su clase padre. Yo la utilicé preguntando primero si se trataba de un bug y no encontré respuesta. Pero para el lanzamiento de Seattle cerraron esa puerta (oficialmente se reconoció como defecto). Así que hay que cambiar código para que Delphi 10 y 10.1 logren compilar un par de clases ahora incorrectas.

Saludos.
Responder Con Cita
  #16  
Antiguo 21-11-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
En Berlín también está el problema de que los ayudantes ya no pueden acceder a la sección privada. Por ejemplo la unidad para Rtti de GHF no compila por eso. Y que yo sepa no hay un workaround limpio para solucionarlo. Las únicas alternativas que hay por ahí son horrendos hacks

Y mucho no puedo indagar porque con Starter no tengo código fuente
Responder Con Cita
  #17  
Antiguo 21-11-2016
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por AgustinOrtu Ver Mensaje
En Berlín también está el problema de que los ayudantes ya no pueden acceder a la sección privada.
Es lo mismo que comentaba antes. La característica o bug (según el ángulo con que se mire) estuvo presente en ayudantes y genéricos por varias versiones porque no se ponían de acuerdo sobre si era correcto o no que existiera. Al final ganó el ala conservadora, y se canceló esta facilidad por considerarse contraria al espíritu de una sección private.

Trabajaré en la adaptación en cuanto me sea posible.

Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Casi llegó a 14000 ecfisa La Taberna 30 21-12-2011 22:39:55
Epa Epa!!! adivinen quien llegó a los 13K ? ecfisa La Taberna 31 29-09-2011 17:01:56
Ya llegó a España. marcoszorrilla La Taberna 1 26-11-2007 00:02:13
Al fin llego a los 1000! D-MO La Taberna 9 01-08-2007 21:41:20
Llegó, llegó roman Noticias 6 11-12-2004 12:12:29


La franja horaria es GMT +2. Ahora son las 14:27:32.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi