Editing User:Ksuzee/Proposal

From BRL-CAD

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 6: Line 6:
  
 
= Detailed description =
 
= Detailed description =
I decided to choose this project, because, I am sure, I have enough knowledge in c/c++ for doing it. I've been working with it since 19.03.2012. Unfortunately, I have a lot of subjects (about 12) this year, so I don't have enough time for working with BRL-CAD and patches every day now. Nevertheless, after the 1-5 of May I will be absolutely free and ready to work hard.
+
I decided to choose this project, because, I am sure, I have enough knowledge in c/c++ for doing it. I've been working with it since 19.03.2012. Unfortunately I have a lot of subjects (about 12) this year, so I don't have enough time for working with BRL-CAD and patches every day. Nevertheless, after the 1-5 of May I will be absolutely free and ready to work hard.
 
== Proposes for reduction ==
 
== Proposes for reduction ==
 
BRL-CAD has quite useful Virtual Machine, which helped me to do my first steps with it. Mentor Sean helped me to become quite familiar with it. After several tests with "Simian" I understood that the work for reduction will be really huge. There are a lot of duplications (e.g. just copy-pasts). After testing I can propose such ideas:
 
BRL-CAD has quite useful Virtual Machine, which helped me to do my first steps with it. Mentor Sean helped me to become quite familiar with it. After several tests with "Simian" I understood that the work for reduction will be really huge. There are a lot of duplications (e.g. just copy-pasts). After testing I can propose such ideas:
  
 
*Duplication in one file.
 
*Duplication in one file.
Example:
+
  Example:
 +
  int
 +
  bu_strcmp(const char *string1, const char *string2)
 +
  {
 +
    const char *s1 = "";
 +
    const char *s2 = "";
 +
    /* "" and NULL are considered equivalent which helps prevent
 +
    * strcmp() from crashing.
 +
    */
 +
    if (string1)
 +
s1 = string1;
 +
    if (string2)
 +
s2 = string2;
 +
    return strcmp(s1, s2);
 +
  }
  
................
+
  int
if (!invert) {    
+
   bu_strncmp(const char *string1, const char *string2, size_t n)
    for (line = file_height-1; line >= 0; line--) {     
+
  {
      unsigned char *op;       
+
    const char *s1 = "";
      vp = &vert_buf[line*3];     
+
    const char *s2 = "";
      op = &horiz_buf[(file_width*3)-1];
+
    /* "" and NULL are considered equivalent which helps prevent
      while (op > horiz_buf) {
+
    * strncmp() from crashing.
          *op-- = vp[2];
+
    */
          *op-- = vp[1];
+
     if (string1)
          *op-- = *vp;
+
s1 = string1;
      }
+
    if (string2)
      ret = write(1, horiz_buf, file_width*3);
+
s2 = string2;
      if (ret < 0)
+
    return strncmp(s1, s2, n);
          perror("write");
+
  }
    }
 
} else {
 
/* Inverted: top-to-bottom. Good with cat-fb */
 
     for (line=0; line < file_height; line++) {
 
      unsigned char *op;       
 
      vp = &vert_buf[line*3];    
 
      op = &horiz_buf[(file_width*3)-1];
 
      while (op > horiz_buf) {
 
          *op-- = vp[2];
 
          *op-- = vp[1];
 
          *op-- = *vp;
 
      }
 
      ret = write(1, horiz_buf, file_width*3);
 
      if (ret < 0)
 
          perror("write");
 
    }
 
}
 
  
..................
+
  int
 +
  bu_strcasecmp(const char *string1, const char *string2)
 +
  {
 +
    const char *s1 = "";
 +
    const char *s2 = "";
 +
    /* "" and NULL are considered equal */
 +
    if (string1)
 +
s1 = string1;
 +
    if (string2)
 +
s2 = string2;
 +
    return strcasecmp(s1, s2);
 +
  }
  
This part is situated in file src/util/picbackgnd.c. We can see that the code in the first "for" is the same as in the second. So I propose to write the function with all necessary parameters which will contain this code:
+
  int
void
+
  bu_strncasecmp(const char *string1, const char *string2, size_t n)
my_reduction (unsigned char *horiz_buf, unsigned char *vert_buf, unsigned char *vp, ssize_t ret, int line)
+
  {
{
+
    const char *s1 = "";
    unsigned char *op;
+
    const char *s2 = "";
    vp = &vert_buf[line*3];
+
    /* "" and NULL are considered equal */
    op = &horiz_buf[(file_width*3)-1];
+
    if (string1)
    while (op > horiz_buf) {
+
s1 = string1;
        *op-- = vp[2];
+
    if (string2)
        *op-- = vp[1];
+
s2 = string2;
        *op-- = *vp;
 
    }
 
    ret = write(1, horiz_buf, file_width*3);
 
    if (ret < 0)
 
        perror("write");
 
}
 
  
The function call will have such view:
+
    return strncasecmp(s1, s2, n);
 
+
  }
..................
+
  These functions are situated in file src/libbu/str.c. All these functions have the same bodies. So I propose to change these four functions and have function with such body:
   if (!invert) {
+
  int
     for (line = file_height-1; line >= 0; line--)  
+
   bu_strcmp(const char *string1, const char *string2, size_t n, unsigned char cases_cmp)
        my_reduction(horiz_buf, vert_buf, vp, ret, line);
+
  {
  } else {
+
    const char *s1 = "";
    for (line=0; line < file_height; line++)  
+
    const char *s2 = "";
        my_reduction(horiz_buf, vert_buf, vp, ret, line);
+
    /* "" and NULL are considered equivalent which helps prevent
   }  
+
    * strncmp() from crashing.
 
+
     */
.................
+
    if (string1)
 
+
s1 = string1;
We can see that the code would be more understandable and short
+
    if (string2)
 +
s2 = string2;
 +
    if (cases_cmp)
 +
    {
 +
if (n == 0)
 +
return strncasecmp(s1, s2);
 +
        return strncasecmp(s1, s2, n);
 +
    }
 +
    if (n == 0)
 +
return strcmp(s1, s2);
 +
    return strncmp(s1, s2, n);
 +
   }
 +
The next step is to find functions' calls and correct them
  
 
*Duplication in one directory but different files
 
*Duplication in one directory but different files
Line 84: Line 98:
  
 
*Duplication in different directories
 
*Duplication in different directories
Such duplication must be the most careful and difficult, because every change can influence working the whole project. Common functions will be situated in the libraries.
+
Such duplication must be the most careful, because every change can influence working the whole project. Common functions will be situated in the libraries.
 
 
== Tests and patches ==
 
I am sure, it is necessary to make tests as much as possible to avoid mistakes or to find them before big changes. I think that simple unit tests would be the best way in this situation.
 
 
 
As for patches, I think, they must be doing very often during the whole period of working for the same reason as tests.
 
 
 
== Simian ==
 
I think the tool "Simian" is really useful and easy in use. Also it works rather fast. If I am involved into this project I want to use it specifically. But, of course, if my mentor advises me something else, I will improve my skills in other tool
 
 
 
= Deliverables =
 
The main expectation is much clearer code with much fewer lines with no bugs or errors after reduction. My personal aim is getting useful experience and knowledge which could help me in my future and, maybe, would give me a chance to work with this company even after this project
 
 
 
= Development schedule =
 
*before 23.04 - continuing to get familiar with project
 
*23.04 - 21.05 - active communication with mentor(s), asking questions, getting ready for start
 
*21.05 - 15.06 - coding. Complete reduction of the duplications that take place in one file.
 
*15.06 - 3.07 - Reduction of as large as possible number of files that contains duplications (duplications in different files, the same directory). Writing some tests
 
*3.07 - 9.07 - bugs fixing, review to be ready for submitting
 
*9.07 - 13.07 - submitting, some more review if it is necessary
 
*13.07 - 23.07 - reduction of the reminder of duplication in different files and tests.
 
*23.07 - 13.08 - coding the last part of the project, removing duplications in files that contains in different directories, making necessary tests and libraries.
 
*13.08 - 20.08 - bugs fixing, review to be ready for submitting the final result
 
 
 
= Time availability =
 
I will not have any other jobs or project during participation in the project. My exams ends on the 18th of May because of EURO-2012, so I will have a lot of free time. All trips or vocations I am going to have in the end of August (after GSoC).
 
I am going to work almost every day (6 days per week; not 7 - because, I am sure, every person must have a weekend for effective working) and 8 hours per day (for example: 8-00 - 14-00 and 19-00 - 21-00). If it is necessary for me to go somewhere during working on the project, I will work longer and harder before it to compensate this time.
 
 
 
= Why BRL-CAD =
 
Recently, I have started being interested in computer graphic and modeling, so I would like to improve my skills with the help of this company. But I am not so good at these things yet, so I decided to try to take part in the project where my skills are better.
 
Also it is really pleasantly that I always get sensible answers from mentor (Sean Morrison) for my questions. All the responses are totally complete. It seems people are interested in success of their project, therefore, there is also a moral reason of my desire to work with BRL-CAD.
 
 
 
= Why me =
 
I would not like to tell that I am "excellent" programmer or something like that. I want only to say that I am ready to work hard and to study new important knowledge. And I hope, BRL-CAD will help me with it. Studying and getting experience are on the first place of this period of my life.
 

Please note that all contributions to BRL-CAD may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see BRL-CAD:Copyrights for details). Do not submit copyrighted work without permission!

To edit this page, please answer the question that appears below (more info):

Cancel Editing help (opens in new window)