[Desenvolupament] Llibreria libcatz

Jordi Latorre jlatorref a terra.es
dll oct 8 10:50:11 CEST 2012


Bon dia,

Després de l'ultim e-mail he aparcat la feina que feia i aquest matí li 
he dedicat 15 minuts a fer una versió per la classe LogFile. A veure que 
us semblen les coses que hi he afegit. Se li podrien donar noves 
funcionalitats per a evitar de declarar-lo com a g_log i definir-lo coma 
a 'Singleton', però això no sé si t'interessa.

He definit una nova funció WriteLog amb el mateix format del printf() 
per si vols simplificar el procés de generació de registres.

Les funcions segures de Microsoft (acabades en '_s') no son de la API de 
Windows i no són compilables amb altres compiladors. Veig que s'han 
utilitzat les versions definides amb template<size_t>. Si les vols 
eliminar i que no aparegui el warning corresponent suposo que ja saps 
que només caldrà definir #define _CRT_SECURE_NO_WARNINGS en el stdafx.h.

Salutacions

Jordi Latorre



Al 05/10/2012 9:20, En/na Jordi Latorre ha escrit:
> Bon dia,
>
> Al 04/10/2012 20:31, En/na Jordi Mas ha escrit:
>> Bona tarda,
>>
>>> Com que el projecte Catalanitzador ha crescut molt, i per a posar-me 
>>> a treballar m'agradaria coneixer bé el codi d'en Jordi Mas he 
>>> començat a preparar una llibreria 'libcatz' amb les classes 
>>> originals convenientment modificades en les seves entranyes de 
>>> manera que el codi sigui el màxim portable. A més, també he pogut 
>>> veure que ha crescut molt 
>>
>> Quan et refereixes al màxim portable pots posar alguns exemples?
>>
> Això és deformació professional. Intentar que el codi s'ajusti al 
> màxim a les llibreries ANSI C, ANSI C++, STL etc.. per si algun dia 
> volem que pugui compilar amb qualsevol compilador.
>
> Així, en el cas del fitxer de log proposo utilitzar _wfopen enlloc de 
> CreateFile, fclose enlloc de CloseHandle, etc...
>
> En el cas de les dates enlloc d'utilitzar el GetLocalTime proposo 
> utilitzar _ftime64 i _localtime64.
>
> Tots aquests canvis els he implementat i la generació del fitxer queda 
> exactament com en el cas del Catalanitzador actual.
>
>
>>> ràpid i no se li ha pogut dedicar molt temps a protegir el codi 
>>> contra possibles errors del programador. Així que proposo:
>>>
>>> - Utilitzar els namespaces per a contenir al màxim el codi i no 
>>> equivocar-nos.
>>
>> El tema dels namespaces em sembla bé. La confusió potencial que 
>> soluciona és bàsicament utilitzar una classe per altre.
> Una altra cosa que he vist en el codi és la utilització del '/using/'.
>
> using namespace std;
>
> A mi particularment no m'agrada donat que es perden les avantatges 
> dels namespaces. Prefereixo escriure més, però tenir més control del 
> que toco. Si cal escriure "std::cout << std::endl" el codi queda una 
> mica més comprensible i evitem errors.
>
>>
>>> - Utilitzar més herències per a reduir el tamany dels fitxers.
>>
>> Tens alguns exemples de fitxers que voldries reduir amb herències?
> En treballar amb el fitxer LogFile, i per evitar tocar l'interface que 
> utilitzes he fet el següent:
>
> files::LogFile -> files::filebase
> files::ffile : accés al fitxer de log
>
> En la classe filebase tinc un punter a un fitxer ffile que és el que 
> realment accedeix al fitxer. ffile acaba estant com a private de 
> filebase, de manera que queda protegit i al mateix temps el FILE* dins 
> de ffile també és private protegint el seu valor i l'accés.
> La classe filebase únicament té sentit per a protegir la interface que 
> estàs utilitzant. He tret algunes rutines protegides de Logfile per a 
> posar-les dins de filebase.
>>> - Protegir més les variables dins de les classes.
>>
>> Pots posar alguns exemples?
> En el cas de 'HANDLE m_hLog' es pot escriure en ell des de diversos 
> punts dins de la classe mateixa i en cap d'ells es comprova si el 
> valor de la variable té un valor bo. De fet et disparará una excepció 
> l'aplicació si no crides CreateLog un cop has creat l'objecte.
> Ja t'he comentat que estic molt pervertit pel meu món de programació, 
> i potser no fa falta controlar tant el codi, encara que crec que pot 
> ajudar.
>
>>
>>> Jordi, comprenc que a tot programador li 'fot' molt que toquin el 
>>> propi codi. Què et sembla si t'envio una petita mostra?
>>
>> No tinc vincles emocionals amb el codi. Qualsevol canvi em sembla bé 
>> que sigui una millora.
>>
> Caldria que les classes i el codi mantinguéssin un mateix Coding Standard.
>
> - Una de les coses que m'agrada és el '_' que afegeixes davant de les 
> rutines protegides i que utilitzaré a partir d'ara en els meus 
> desenvolupaments futurs.
>
> - He vist també que en alguns casos utilitzes 'm_' davant de variables 
> de classe i en d'altres no. A mi m'agrada afegir '_' al final de la 
> variable per a protegides i '__' (2 _) per a les privades.
>
> - Respecte als if (...) una cosa que podries fer i que el MISRA C 
> recomana és posar el valor de la constant abans per a que el 
> compilador t'avisi si t'equivoques: (0 != variable) enlloc de 
> (variable != 0). Això evitaria errors difícils de trobar com 
> if(variable = 0) // ==
>
> - A l'entrada de rutines caldria afegir comprovacions de validesa i de 
> rang utilitzant 'asserts' per a que al "debugar" cantin els errors.
>
> - Utilitzar el modificador 'const' per a variables d'entrada i no sortida.
>
> - A la classe LogFile he afegit una rutina writeLog(const wchar_t* 
> format, ...)  similar al printf per a evitar la sobrecàrrega de 
> Log(wchar_t*), Log(wchar_t*,wchar_t*), etc...
>
>
>> Atentament,
>>
>> Jordi,
>>
>>
>> [1] http://en.wikipedia.org/wiki/You_ain't_gonna_need_it
>>
> La referència està força bé.
>
> Espero que les propostes t'agradin, no sóc ningú per a fer res sense 
> el teu consentiment. Això em pot donar molta feina i crec que pot 
> ajudar al manteniment i clarificació de tot el codi.
>
> Atentament,
>
> Jordi L.
>
>
>
> _______________________________________________
> Desenvolupament mailing list
> Desenvolupament a llistes.softcatala.org
> http://llistes.softcatala.org/mailman/listinfo/desenvolupament
> _______________________________________________
> Codi de conducta: http://www.softcatala.org/wiki/Codi_de_conducta

-------------- part següent --------------
Un document HTML ha estat eliminat...
URL: <http://llistes.softcatala.org/pipermail/catalanitzador/attachments/20121008/48bd0ed0/attachment.html>
-------------- part següent --------------
A non-text attachment was scrubbed...
Name: LogFile.7z
Type: application/octet-stream
Size: 2099 bytes
Desc: no disponible
URL: <http://llistes.softcatala.org/pipermail/catalanitzador/attachments/20121008/48bd0ed0/attachment.obj>


Més informació sobre la llista de correu Desenvolupament