<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">Bon dia,<br>
<br>
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.<br>
<br>
He definit una nova funció WriteLog amb el mateix format del
printf() per si vols simplificar el procés de generació de
registres.<br>
<br>
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.<br>
<br>
Salutacions<br>
<br>
Jordi Latorre<br>
<br>
<br>
<br>
Al 05/10/2012 9:20, En/na Jordi Latorre ha escrit:<br>
</div>
<blockquote cite="mid:506E8A36.80101@terra.es" type="cite">
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<div class="moz-cite-prefix">Bon dia,<br>
<br>
Al 04/10/2012 20:31, En/na Jordi Mas ha escrit:<br>
</div>
<blockquote cite="mid:506DD5F9.3010405@softcatala.org" type="cite">Bona
tarda, <br>
<br>
<blockquote type="cite">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 </blockquote>
<br>
Quan et refereixes al màxim portable pots posar alguns exemples?
<br>
<br>
</blockquote>
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.<br>
<br>
Així, en el cas del fitxer de log proposo utilitzar _wfopen enlloc
de CreateFile, fclose enlloc de CloseHandle, etc...<br>
<br>
En el cas de les dates enlloc d'utilitzar el GetLocalTime proposo
utilitzar _ftime64 i _localtime64.<br>
<br>
Tots aquests canvis els he implementat i la generació del fitxer
queda exactament com en el cas del Catalanitzador actual.<br>
<br>
<br>
<blockquote cite="mid:506DD5F9.3010405@softcatala.org" type="cite">
<blockquote type="cite">ràpid i no se li ha pogut dedicar molt
temps a protegir el codi contra possibles errors del
programador. Així que proposo: <br>
<br>
- Utilitzar els namespaces per a contenir al màxim el codi i
no equivocar-nos. <br>
</blockquote>
<br>
El tema dels namespaces em sembla bé. La confusió potencial que
soluciona és bàsicament utilitzar una classe per altre. <br>
</blockquote>
Una altra cosa que he vist en el codi és la utilització del '<i>using</i>'.<br>
<br>
using namespace std;<br>
<br>
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.<br>
<br>
<blockquote cite="mid:506DD5F9.3010405@softcatala.org" type="cite">
<br>
<blockquote type="cite">- Utilitzar més herències per a reduir
el tamany dels fitxers. <br>
</blockquote>
<br>
Tens alguns exemples de fitxers que voldries reduir amb
herències? <br>
</blockquote>
En treballar amb el fitxer LogFile, i per evitar tocar l'interface
que utilitzes he fet el següent:<br>
<br>
files::LogFile -> files::filebase<br>
files::ffile : accés al fitxer de log<br>
<br>
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.<br>
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.<br>
<blockquote cite="mid:506DD5F9.3010405@softcatala.org" type="cite">
<blockquote type="cite">- Protegir més les variables dins de les
classes. <br>
</blockquote>
<br>
Pots posar alguns exemples? <br>
</blockquote>
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.<br>
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.<br>
<br>
<blockquote cite="mid:506DD5F9.3010405@softcatala.org" type="cite">
<br>
<blockquote type="cite">Jordi, comprenc que a tot programador li
'fot' molt que toquin el propi codi. Què et sembla si t'envio
una petita mostra? <br>
</blockquote>
<br>
No tinc vincles emocionals amb el codi. Qualsevol canvi em
sembla bé que sigui una millora. <br>
<br>
</blockquote>
Caldria que les classes i el codi mantinguéssin un mateix Coding
Standard.<br>
<br>
- 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.<br>
<br>
- 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.<br>
<br>
- 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) // ==<br>
<br>
- A l'entrada de rutines caldria afegir comprovacions de validesa
i de rang utilitzant 'asserts' per a que al "debugar" cantin els
errors.<br>
<br>
- Utilitzar el modificador 'const' per a variables d'entrada i no
sortida.<br>
<br>
- 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... <br>
<br>
<br>
<blockquote cite="mid:506DD5F9.3010405@softcatala.org" type="cite">Atentament,
<br>
<br>
Jordi, <br>
<br>
<br>
[1] <a moz-do-not-send="true" class="moz-txt-link-freetext"
href="http://en.wikipedia.org/wiki/You_ain%27t_gonna_need_it">http://en.wikipedia.org/wiki/You_ain't_gonna_need_it</a>
<br>
<br>
</blockquote>
La referència està força bé.<br>
<br>
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.<br>
<br>
Atentament,<br>
<br>
Jordi L.<br>
<br>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
Desenvolupament mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Desenvolupament@llistes.softcatala.org">Desenvolupament@llistes.softcatala.org</a>
<a class="moz-txt-link-freetext" href="http://llistes.softcatala.org/mailman/listinfo/desenvolupament">http://llistes.softcatala.org/mailman/listinfo/desenvolupament</a>
_______________________________________________
Codi de conducta: <a class="moz-txt-link-freetext" href="http://www.softcatala.org/wiki/Codi_de_conducta">http://www.softcatala.org/wiki/Codi_de_conducta</a></pre>
</blockquote>
<br>
</body>
</html>