<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>
      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 class="moz-txt-link-freetext" href="http://en.wikipedia.org/wiki/You_ain't_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>
  </body>
</html>