<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>