Difference between revisions of "User:Bhinesley"

From BRL-CAD
(Log: crossed out tasks, logged today)
(GSoC 2012 Project)
 
(3 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
== Who I am ==
 
== Who I am ==
My name is Brandon Hinesley. I am a 26 year old, unemployed, full-time student entering my junior year of a Bachelor of Science in Computer Science. I live in California. My preferred coding environment is in any *nix operating system, while using Vim and screen/tmux.
+
My name is Brandon Hinesley. I'm a 27 year old, unemployed, full-time student in my junior year of a Bachelor of Science in Computer Science. I live in Bakersfield, CA. My preferred coding environment is in any *nix operating system, while using Vim and screen/tmux.
  
 
== Contact ==
 
== Contact ==
 
*IRC nick: bhinesley
 
*IRC nick: bhinesley
*email: [mailto:bhinesley@gmail.com bhinesley@gmail.com]
+
*email: [mailto:bhinesley+brlcad@gmail.com bhinesley@gmail.com]
  
 
== Experience ==
 
== Experience ==
I have 5 years of experience designing [https://picasaweb.google.com/lh/photo/_dWpWLr1esGb16X7_4DlNHMyrgI048JfNwPx7Dl9cn0?feat=directlink commercial plumbing systems in 3d], using AutoCAD. My experience is minimal with C/C++, Java, Tcl/Tk/Itcl/Itk, and Python but I have coded dozens of VBA programs for several companies I have worked for. I was a Linux systems administrator for a small business network, as well, for about 3 years.
+
I participated in [[#GSoC 2011 Project|GSoC 2011 with BRL-CAD]], under Cliff, my official mentor. I have 5 years of experience designing [https://picasaweb.google.com/lh/photo/_dWpWLr1esGb16X7_4DlNHMyrgI048JfNwPx7Dl9cn0?feat=directlink commercial plumbing systems in 3d], using AutoCAD. I've also [https://picasaweb.google.com/lh/photo/uy-_CFMyTMVmso32iUyjV9MTjNZETYmyPJy0liipFm0?feat=directlink fooled around] a [https://picasaweb.google.com/lh/photo/HAuEHnoczzi-NEM0Gs5fM9MTjNZETYmyPJy0liipFm0?feat=directlink bit] in [https://picasaweb.google.com/lh/photo/RtLNLlTFSzjZHFWkb3lbZtMTjNZETYmyPJy0liipFm0?feat=directlink Blender]. I have experience in C/C++, and Tcl/Tk/Itcl/Itk. For 3 years I was a system administrator for a Linux/Windows based small business network.
  
 
== GSoC 2011 Project ==
 
== GSoC 2011 Project ==
I [http://www.google-melange.com/gsoc/project/google/gsoc2011/bhinesley/10001 migrated MGED commands to Archer/libged], and cleaned up existing commands. Later in the program, my focus shifted towards adding entirely new capabilities to the libged oed commands, rather than simply migrating them.
+
See the [[User:Bhinesley/gsoc2011|log and timeline]] or the [http://www.google-melange.com/gsoc/project/google/gsoc2011/bhinesley/1000 official GSoC project summary] for details. I migrated MGED commands to Archer/libged, and cleaned up existing commands. Later in the program, my focus shifted towards adding new capabilities to the libged oed commands, rather than simply migrating them.  
  
=== Log ===
+
== GSoC 2012 Project ==
*08/16/11
+
See my [[User:Bhinesley/gsoc2012|GSoC 2012 proposal drafts]].
**Fixed edit support for batch operations and accepting multiple arguments.
 
**I disabled support for the batch operator as an argument to -x/-y/-z options. It isn't going to work without significant changes to several functions.
 
**Finished migrated get_solid_keypoint() to libged; all primitive types have a default keypoint.
 
**Began testing/recording working argument sets to translate.
 
*08/15/11
 
**Started migrating get_solid_keypoint() to libged. BSPLINE and ARS are not working.
 
**Enabled -n option (use of natural origin, via get_solid_keypoint())
 
*08/14/11
 
**Fixed -x/-y/-z options. They seem to be fully functional now. I'll take a step back and test everything more thoroughly once the other major issues are resolved.
 
**Tracked down several bugs in edit.c
 
*08/13/11
 
*08/12/11
 
**Worked on getting -x/-y/-z options working
 
**Fixed several bugs in edit.c
 
**Fixed a couple ged_path_validate bugs
 
*08/11/11
 
**The translate command works for many (most?) cases now:
 
***translate 0 0 obj
 
***translate -a 5 0 10 obj
 
***translate -k obj -a obj2 obj3
 
***translate -k 21.7 3 -r 10 20 30 obj
 
***translate -k obj1 4 1 7 -r . obj
 
**Here are the translate features that don't work yet:
 
***<s>supplying multiple objects to translate (and obviously the "." batch operator isn't  incredibly useful until this is fixed)
 
***specifying individual coordinates is untested (-x/-y/-z), such as:
 
****translate -z 5 obj
 
****translate -k -y obj1 4 2 -r 3.78 9 obj2
 
***using the natural origin of objects (-n)</s>
 
*08/10/11
 
**Worked towards making -x/-y/-z options functional. This goes hand in hand with fixing multiple failures related to the simple "translate 5 obj" syntax. I basically forgot about those options when I was writing edit(); there is missing functionality all over the place. Lesson learned: put the full design in writing.
 
*08/09/11
 
**Got translate working for a few narrow cases; "translate -k obj1 -a obj2 obj3" and "translate -a obj1 obj2" are tested, but there are problems with many other cases. Automatic redrawing doesn't work, so translated objects have to be blasted (this is a TCL issue).
 
**edit() wasn't handling arguments built with -x/-y/-z options. I wrote a function that fills in any omitted coordinates in the argument vectors. There are still some issues preventing this from working. Until it is, commands like "translate 5 obj" won't work.
 
**In commands like "translate 5 obj", 5 and obj were mistakenly being paired (5 was treated as an offset to obj). Works properly now.
 
**Plan<s>
 
***Fix whatever is preventing translate from working (there may be an issue in the functions that get the apparent coordinates of objects).
 
***Test translate thoroughly
 
***This is an excellent waypoint; I'll test any odd/wrong combinations, trying to crash and find unhelpful/broken error messages.
 
***Begin work on the rotate subcommand</s>
 
*08/08/11
 
**Changed many edit.c variables/parameters to const's, which revealed several issues in edit.c and some in path.c.
 
**Batch arguments were expanding properly, but only the first set of arguments was being sent to the subcommands. I simply forgot about that.
 
**Several problems were revealed and resolved in adding the aforementioned capabilities to edit().
 
*08/06/11 - 08/07/11
 
*08/05/11
 
**Close to being done with the functions for converting arguments to coordinates; just need to test/debug. Actually, everything needs to be thoroughly tested/debugged now, since everything except the rotate/scale subcommands is practically done.
 
*08/04/11
 
**Fixed batch argument expansion functionality.
 
**Wrote the body of the edit_translate() function.
 
**Removed all dead/obsolete code.
 
**Worked on functions for converting arguments from {path + object + offset} to absolute coordinates, since vect_t's are all the subcommand functions are designed to accept.
 
*08/03/11
 
**Decided that the reason the bug from yesterday was so difficult to find, was that edit() was difficult to read/follow. I broke out the ability to perform batch argument expansion into another function, and created/modified several edit_arg helper functions.
 
*08/02/11
 
**Not-so-fun day trying to find a bug.
 
*08/01/11
 
**Many of the edit_cmd/edit_arg helper functions were out of date with recent changes. All known issues for code that existed prior to this week, were resolved this week.
 
**Added ability to expand batch arguments to edit().
 
**Further improvements to generic argument handling. Ex: enforcement of the rule that '-k' makes '-a/-r' mandatory for every command that uses those options.
 
*07/30/11 - 07/31/11
 
*07/25/11 - 07/29/11
 
**Set up subcommand functions, with pointers to those functions in the edit_cmd struct array.
 
**Improvements to ged_edit() option/argument parsing.
 
**Changed union edit_cmd args to pointers(which led to many other changes).
 
**Lots of debugging. Tracked down several edit.c bugs.
 
**Wrote the body of the command-specific argument handling function for translate, edit_translate_add_cl_args().
 
**Wrote several other command-specific functions for all currently planned subcommands (translate/rotate/scale), to help with initialization, looping through arguments, etc.
 
*07/18/11 - 07/22/11
 
**Worked on getting generic sub-argument handling working in ged_edit.
 
**Added a basic help subsystem for ged_edit and its subcommands.
 
**Implemented support for reading multiple sub-arguments per option.
 
*07/16/11 - 07/17/11
 
*07/15/11
 
**Changed how subcommands are added to the edit command.
 
**Added a help system to ged_edit, which displays the longest synopsis available for a given subcommand; the usage statement displays the  shortest.
 
*07/14/11
 
**Added validation of subcommand names
 
**Cleanup
 
*07/13/11
 
**Changed name of alter -> edit throughout BRL-CAD
 
**Add edit command to Archer/MGED, and to all the special areas :)
 
**Add edit subcommands to Archer; start on making ged_edit aware of what command is calling it.
 
*07/12/11
 
**Set up union, structs, and flags for subcommand handling
 
**Added helper functions for manipulating the argument structs
 
*07/11/11
 
**Added examples to manual for scale command
 
**More corrections to manuals
 
*07/10/11
 
**Made corrections to existing manuals
 
**Wrote manual for scale command
 
*07/09/11
 
*07/08/11
 
**Worked on manual for rotate command
 
*07/07/11
 
**Design/mock manual page for the rotate command seems to be mostly done. It could probably use some more examples to ensure that I haven't missed anything.
 
**Plan for the week
 
***<s>Finish all 3 command mock manuals</s>
 
***<s>Ensure the proposed operations are acceptable to everyone (asked on mailing list)
 
***Implement alter command syntax handling (WIP)
 
***Get translate working again (but through alter this time)</s>
 
*07/06/11
 
**Improved some things with the proposed translate command functionality.
 
**Resolved all known conflicts and ambiguities in rotate command manual page. Started adding to EXAMPLES section, to help define behavior further.
 
**Laid out skeleton of scale command's manual page
 
*07/05/11
 
**Started inventing new rotate command behavior by writing a mock manual page for it, as inspired by translate command. Much more complicated, though.
 
*07/02/11 - 07/04/11
 
*07/01/11
 
**Revised translate command manual page per conversation with Sean.
 
**Started setting up for consolidating translate/rotate/scale -> alter, for common syntax handling.
 
*06/30/11
 
**Proposed new functionality for the translate command, and wrote a mock manual page for it. Hashed out the details with Sean.
 
**Cleaned up some translate command logic.
 
*06/29/11
 
**translate now supports all 4 types of translations mentioned yesterday.
 
**Plan
 
***<s>Work on making ged_translate() support the remaining 3 main types of translations
 
***Add support for absolute positioning using preset or default keypoints
 
***Rename translate() (probably), and further prepare it for being exposed via ged_private.h
 
***Implement on ged_rotate() and ged_scale(). I may pull common functionality out of ged_translate() and put it into one large function or wrapper that handles all 3 commands, such as "ged_oed()", if they are similar enough.
 
***Implement one of the simpler commands on my list, to ensure that my GSoC milestone #2 is satisfied.</s>
 
*06/28/11
 
**Translation of all objects in a single combination's tree now works.
 
** Note: not including absolute translations using a keypoint, the mged oed equivalents of the 4 main types of translations are:
 
***<code><s>oed / comb1.c/kp.s ;# all instances of comb1.c</s></code>
 
***<code><s>oed comb1.c comb2.c/kp.s ;# only the instance of comb2.c in comb1.c</s></code>
 
***<code><s>oed / shape.s ;# all instances of shape.s</s></code>
 
***<code><s>oed comb1.c shape.s ;# only the instance of shape.s in comb1.c</s></code>
 
*06/27/11
 
**Isolated core of ged_translate functionality into a separate function, which will eventually be exposed so that other functions can use it (ex: otranslate)
 
*06/26/11
 
*06/25/11
 
*06/24/11
 
**Wrote ged_validate_path()
 
**Quieted all 511 warnings about using number formatting other than %zu for a size_t argument.
 
**Plan
 
***The next step for the translate command is to perform the actual translations.
 
*06/22/11, 06/23/11
 
**Created a ged_is_path function to determine if db_full_path structs contain valid paths (this will be used by the translate command, at least)
 
*06/21/11
 
*06/17/11, 06/20/11
 
**Fell behind on this log. I took the day off on Saturday, Sunday, and Tuesday.
 
**I've become more familiar with how the .g database is used internally, and also cleared up some misunderstandings of how the MGED oed operations work.
 
**Implemented fairly robust argument handling for translate command.
 
**Plan
 
***Continue working on 'translate'. The first target is a working command with defaults only.
 
*06/16/11
 
**Started setting up the translate command (temporarily translate2 for mged)
 
*06/15/11
 
**Reading code and messing around with MGED/Archer to get a handle on how oed works
 
**Replaced 'erase_all' command with 'erase -r'
 
*06/14/11
 
**Reading code; I couldn't really get anything accomplished today, so perhaps we'll call this my day off.
 
**Plan
 
***Start work on migrating next set of commands
 
*06/13/11
 
**Tried to fix a bug in Archer's ls command, where any arguments are echoed, regardless of whether they are objects. Identifying the problem was the easy part... it would be complex to fix it properly.
 
**Tracked down a commit that revealed a bug, which prevented ray-tracing.
 
*06/12/11
 
**Fixed a bug in Archer/MGED man command handling
 
**Fixed a bug in ManBrowser
 
**Fully documented and cleaned up ManBrowser
 
*06/11/11
 
*06/10/11
 
**Did a manual inspection of all 58 lsort calls, and ensured that any lsearch's that immediately followed them used the -sorted switch to force binary rather than linear searching.
 
**Plan
 
***Patch bugs, clean up Archer commands, etc.
 
***Continue reading code to figure out how a libged registry might work.
 
*06/09/11
 
**Spent about 1/2 the day trying to build with cmake (I've been using automake up until now). Ended doing a fresh checkout and building outside the source directory, as recommended by ``Eric.
 
**Committed all of the patches that I had submitted before I was given commit access.
 
**Reading code to gain an understanding of how a libged registry might be constructed.
 
*06/08/11
 
**Made ManBrowser fully operational as a replacement for existing faculties.
 
**Added -disabledPages and -enabledPages options to ManBrowser, to allow for fine-tuning of available pages.
 
**Modified Archer/MGED to use ManBrowser, and removed obsoleted faculties.
 
*06/07/11
 
**Changed ManBrowser to inherit from iwidgits::dialog. It now creates the window properly, activates, loads the table of contents and Introduction.html. Selection binding of the ToC is not working yet. Still some cleanup to do.r
 
**Plan: I'd really like to have ManBrowser done within a day or two, so that I still have about a week before my first milestone. We'll see.
 
*06/06/11
 
**Tried to figure out how to reliably center the Manual Page Browser without manually determining the center, etc. Could not get it working correctly if my life depended on it.
 
**Read a chapter on Itcl, and made some changes to ManBrowser because of it.
 
**I received commit access today, so I cleaned things up so that I could start committing regularly. I submitted my working changes to the man command, and my nonworking progress on the ManBrowser mega-widget.
 
*06/05/11
 
*06/04/11
 
**Reading documentation today.
 
*06/03/11
 
**Since the man command was made functional yesterday, today I started work on moving it into it's own file/class in tclscripts/man_browser.tcl. The class is now partially functional, and Archer.tcl has been mostly modified to work with it. I'm having problems with some Itcl/Itk stuff, so it's back to the books tomorrow.
 
*06/02/11
 
**I was still having problems today, but I knew that I really just need to read some more, so that's what I did. A couple hours later I figured out what I was doing wrong and made some progress.
 
**The man command only accepts commands that in fact have man pages as an argument, launches the man page browser,<s> but I'm not sure how to load the page for a particular command yet.</s> and loads the man page from the args. It appears to be fully working, plus improvements. There is still some refactoring/cleanup to do, though.
 
**Note: It would be nice if the man page browser TOC would jump to commands based on keyboard input, or if it had a filter. I've proposed it in #brlcad; I'll look into this once <s>I have a better handle on things</s> I'm done migrating it.
 
*06/01/11
 
**Reading documentation. Resuming migration of man command tomorrow.
 
*05/31/11
 
**Started logging progress to this wiki.
 
**Submitted patch [https://sourceforge.net/tracker/?func=detail&aid=3309910&group_id=105292&atid=640804 3309910]. This modifies Archer's opendb command, so that when no arguments are passed it behaves similarly to MGED. There is a small bug that I'm not sure how to fix yet.
 
**Taking (probably) the rest of the day to read Tcl/Tk and Itcl documentation.
 
*05/30/11
 
**Mostly done adding the man command to Archer; running into a wall with my Tcl/Tk and Itcl knowledge.
 
*05/29/11
 
**Submitted patch [https://sourceforge.net/tracker/?func=detail&aid=3309107&group_id=105292&atid=640804 3309107]. The Archer closedb command is an explicit part of my project.
 
**Submitted patch [https://sourceforge.net/tracker/?func=detail&aid=3309109&group_id=105292&atid=640804 3309109]. Changed MGED's new file input box to a dialog.
 
  
=== General plan ===
+
== Misc ==
<s>My development timeline is rear-loaded. My plan is to migrate the 2 commands in each of the first two milestones quickly. I can then focus on cleaning up Archer  commands in order to become proficient with the relevant code. The remaining commands will be more challenging, so this will help later on.</s>
 
  
The focus of my work during GSoC has changed from my submitted proposal. I am working not only on migrating the oed commands to libged, but on adding entirely new capabilities as well.
+
=== Edit command, TODO ===
 
+
# Getting help for the edit subcommands is confusing. ex: 'help translate' doesn't work, since translate is really just a subcommand of edit. The current workaround is to use 'edit help translate' or 'translate help'.
*What's left is:
+
# It is not possible to use the batch operator '.' as a particular coordinate, i.e. 'translate -k -y . -a cube.s sph1.s sph2.s sph3.s' will not work. It would increase orthogonality if this were supported, although it's not strictly necessary. A workaround for the aforementioned example is 'translate -k . -a -y cube.s sph1.s sph2.s sph3.s'. It would take some doing to get this working, but it could be viewed as an opportunity to refactor some poor design decisions along the way.
**<s>path + object + offset to vect_t conversion functions</s>
+
# All testing has been done by hand. There are so many possible combinations of options/args, surely some have been overlooked.
**resolve issues relating to batch operations
+
# Cleanup logic per TODO/FIXME's in edit.c. Minor impact.
**enable use of natural origins of objects as points
+
# The basic commands rotate and scale are not yet implemented
**most rotate functions
+
# Other subcommands could be written, for example:
**most scale functions
+
#* '''swap''' - switch one object out with another
**converting mock-manuals in edit.c into actual man pages
+
#* '''align''' - line several objects up with points on one or two axes (besides an intuitive name, it's not clear if this would be any better than using translate to perform this task, for ex: 'translate -k . -a -y cube.s sph1.s sph2.s sph3.s' moves sph[1-3].s to the same y-coordinate as cube.s, without changing x/z positions.)
 
+
#* other ideas?
My plan for the remainder of GSoC (and beyond) is as follows. <s>The first order of business is the object conversion functions. Once those are finished,</s> I will thoroughly test everything that is done so far using the translate command. The rotate command is next, which may be challenging due to the versatility of the design in performing rotations. I believe that it will be possible to complete it in phases, however, adding support for only a few argument groups during each phase. Therefore, the first phase will probably support arguments similar to the translate command. The translate and rotate commands are probably much more important than the scale command, so the remainder of GSoC may well be spent perfecting them. I estimate that I won't be able to start on the scale command and the mock-manuals until after GSoC has ended.
 
 
 
Having been a 3d modeler for several years, there are certain functions that I found to be of such value, that it seems that every modeling program should have them. Likewise, there are functions that I have never seen implemented, but would be of great use (ex: why is it so difficult to simultaneously rotate the same faces of a large number of objects towards the same point?). Once everything is completed, I ''may'' experiment with adding additional commands (ex: mirror, align) or additional options (ex: using the midpoint between two 'or more' objects as an argument).
 
 
 
=== Original Development timeline (from proposal) ===
 
*June 14th
 
**Milestone 1
 
***A minimum of 2 commands will have been migrated to Archer by this date.
 
*July 5th
 
**Milestone 2
 
***A minimum of 4 commands will have been migrated to Archer by this date.
 
*July 5th to 11th
 
**Prepare for mid-term evaluation: cleanup, review, handle of unanticipated issues
 
*July11th – July 15th
 
**Mid-term evaluations due
 
*August 2nd
 
**Milestone 3
 
***A minimum of 7 commands will have been migrated to Archer by this date.
 
*August 16th
 
**Suggested 'pencils down' date
 
**Milestone 4
 
***A minimum of 10 commands will have been migrated to Archer by this date.
 
*August 16th - 22nd
 
**Prepare for firm 'pencils down' date: cleanup, review, handle unanticipated issues
 
*August 22nd
 
**Firm 'pencils down' date
 

Latest revision as of 01:43, 28 March 2012

Who I am[edit]

My name is Brandon Hinesley. I'm a 27 year old, unemployed, full-time student in my junior year of a Bachelor of Science in Computer Science. I live in Bakersfield, CA. My preferred coding environment is in any *nix operating system, while using Vim and screen/tmux.

Contact[edit]

Experience[edit]

I participated in GSoC 2011 with BRL-CAD, under Cliff, my official mentor. I have 5 years of experience designing commercial plumbing systems in 3d, using AutoCAD. I've also fooled around a bit in Blender. I have experience in C/C++, and Tcl/Tk/Itcl/Itk. For 3 years I was a system administrator for a Linux/Windows based small business network.

GSoC 2011 Project[edit]

See the log and timeline or the official GSoC project summary for details. I migrated MGED commands to Archer/libged, and cleaned up existing commands. Later in the program, my focus shifted towards adding new capabilities to the libged oed commands, rather than simply migrating them.

GSoC 2012 Project[edit]

See my GSoC 2012 proposal drafts.

Misc[edit]

Edit command, TODO[edit]

  1. Getting help for the edit subcommands is confusing. ex: 'help translate' doesn't work, since translate is really just a subcommand of edit. The current workaround is to use 'edit help translate' or 'translate help'.
  2. It is not possible to use the batch operator '.' as a particular coordinate, i.e. 'translate -k -y . -a cube.s sph1.s sph2.s sph3.s' will not work. It would increase orthogonality if this were supported, although it's not strictly necessary. A workaround for the aforementioned example is 'translate -k . -a -y cube.s sph1.s sph2.s sph3.s'. It would take some doing to get this working, but it could be viewed as an opportunity to refactor some poor design decisions along the way.
  3. All testing has been done by hand. There are so many possible combinations of options/args, surely some have been overlooked.
  4. Cleanup logic per TODO/FIXME's in edit.c. Minor impact.
  5. The basic commands rotate and scale are not yet implemented
  6. Other subcommands could be written, for example:
    • swap - switch one object out with another
    • align - line several objects up with points on one or two axes (besides an intuitive name, it's not clear if this would be any better than using translate to perform this task, for ex: 'translate -k . -a -y cube.s sph1.s sph2.s sph3.s' moves sph[1-3].s to the same y-coordinate as cube.s, without changing x/z positions.)
    • other ideas?