Abstract:
A mechanism for the rapid prototyping of code whereby a user selects a subsection of code and runs multiple evaluations on the selected code and altered versions of the code without first saving and naming the code subsection is disclosed. The selected subsection of code, referred to as a code cell, groups multiple lines of code together and evaluates them together. Output from the analysis is displayed to a user. Algorithms may be altered and variable values may be modified in-place as required to achieve an optimal result for the user. Once a desired version of the code is established, the code may be saved and then published in multiple user-selected formats with a single command. Each code cell in the program code may be used to generate a separate publication thus creating a narrative effect when sequentially viewing a grouping of the publications in the user-selected format.

Description:
FIELD OF THE INVENTION 
     The illustrative embodiment of the present invention relates generally to interactive development of program code and more particularly to cell-based code editing. 
     BACKGROUND 
     Program development is an iterative process engaged in by a program developer in a program development environment. The process of creating executable code requires a significant amount of time on the part of the developer in running different versions of the code. The developer will frequently add or subtract different lines of code and or alter values for variables in the code in an effort to reach a desired result or optimize the execution of a piece of code. For developers in an interpreted language development environment, this editing and execution process will frequently take place either from a command line or from an editor. An interpreted language environment executes code line by line with an interpreter without first compiling the entirety of the code. The command line in an interpreted language development environment allows a line by line execution of the code and may allow the code to be resolved to a small number of commands appearing in a command window. The editor groups many lines of code together for the program developer to access and alter as needed. 
     Unfortunately, both the command line and the editor have drawbacks for developers in an interpreted program development environment. With the command line, output appears in place, but there is no line-by-line grouping. As a result, the scope of the code is difficult to track. With the editor, many lines may be grouped together, but the developer/user is required to name and save the file each time prior to attempting to execute the code so that it can be analyzed. This requires the developer&#39;s mental effort and also generates large amounts of unwanted data on the system from leftover code versions. 
     BRIEF SUMMARY 
     The illustrative embodiment of the present invention allows for the rapid prototyping of program code. A user selects a subsection of code and is able to run multiple evaluations on the selected code and altered versions of the code without first saving and naming the code subsection. The selected subsection of code, referred to as a code cell, groups multiple lines of code together and evaluates them together. Output from the analysis is displayed to a user. Algorithms may be altered and variable values may be modified in-place as required to achieve an optimal result for the user. Once a desired version of the code is established, the code may be saved and then published in multiple user-selected formats with a single command. Each code cell in the program code may be used to generate a publication thus creating a narrative effect when all the cells are published together into a single document and viewed sequentially. 
     In one embodiment in an electronic device hosting a technical computing environment, a method of interactive editing of computer code includes the step of providing a first view of program code to a user in an editor. The method also includes the steps of initiating an evaluation process that will be used to evaluate a subsection of the code and the step of selecting a code cell from the program code to be evaluated. The code cell is a contiguous subsection of code in the program code. The method additionally analyzes the selected code cell with the evaluation process without first saving the code to a separate file and displays a result of the analysis to a user via a second view. 
     In another embodiment, in a technical computing environment hosted by an electronic device, a system for a high-level interpreted language includes a first view displaying program code to a user. The system also includes an evaluation process evaluating a contiguous subsection of the program code selected by the user. The evaluation of the subsection of the code occurs without first saving the code to a separate file. The system further includes a second view displaying a result of the evaluating to a user. 
     In an embodiment in an electronic device hosting a technical computing environment, a method of interactive editing includes the step of providing a first view of program code to a user. The method also includes the step of selecting a code cell from the program code, the selected code cell being a contiguous subsection of code from the program code. The method further includes the steps of evaluating the selected code cell without first saving the program code to a separate file and displaying a result of the analysis to a user via a second view. 
     In a different embodiment in a network with a technical computing environment a method of interactive editing includes the step of providing a first view of program code to a user over a network. The method also includes the step of selecting a code cell from the program code, the selected code cell being a contiguous subsection of code from the program code. The method additionally evaluates at a server the selected code cell without first saving the program code to a separate file and displays a result of the analysis to a user over a network via a second view. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       These and other aspects of this invention will be readily apparent from the detailed description below and the appended drawings, which are meant to illustrate and not to limit the invention, and in which: 
         FIG. 1  depicts a block diagram of an environment suitable for practicing the illustrative embodiment of the present invention; 
         FIG. 2  is a flowchart of the sequence of steps followed by the illustrative embodiment of the present invention to analyze a selected code cell; 
         FIG. 3  is a flowchart of the sequence of steps followed by the illustrative embodiment of the present invention to analyze a selected code cell containing an updated value; 
         FIG. 4  is a flowchart of the sequence of steps followed by the illustrative embodiment of the present invention to analyze a second selected code cell; 
         FIG. 5  is a block diagram representation of the conversion process engaged in by the illustrative embodiment of the present invention to publish code in a user-selected format; 
         FIG. 6  is a representation of a GUI suitable for use in the illustrative embodiment of the present invention indicating operations available to be performed on the code cell; 
         FIG. 7A  is a GUI suitable for use in the present invention showing a collection of program code being displayed to a user prior to the selection of a code cell; 
         FIG. 7B  is a GUI suitable for use in the present invention showing a collection of program code being displayed to a user after the selection of a code cell; 
         FIG. 7C  is a block diagram of a control in the GUI of  FIGS. 7A and 7B  which is used to alter variables in a selected code cell in the illustrative embodiment of the present invention; 
         FIG. 8  is a plot of a sine wave generated by evaluating a selected code cell; 
         FIG. 9  depicts the correspondence between marked up program code and documents published in a format selected by a user. 
     
    
    
     DETAILED DESCRIPTION 
     Interactive coding allows a user to focus on a solution by repeatedly modifying instructions and/or altering values in the program code, followed by the re-running of the computer code. The cell-based code editing enabled by the present invention improves the speed of interactive coding by allowing the interactive process to be run without saving code every time instructions are altered, a process known as rapid prototyping, and by allowing the in-place modification of code values. Once the program code has been optimized, the code in the selected cells may be marked-up and published to a particular format in response to a single command. 
       FIG. 1  depicts a block diagram of an environment suitable for practicing the illustrative embodiment of the present invention. An electronic device  2  includes an interpreted language development environment  4 . The electronic device  2  may be a server, laptop, workstation, client device, PDA or some other type of electronic device equipped with a processor and capable of supporting the interpreted language development environment  4 . An exemplary interpreted language development environment  4  is MATLAB from The MathWorks of Natick, Mass. The interpreted language development environment  4  includes an interpreter  5  and an editor  6 . The editor  6  includes an evaluation process  8 , and a conversion process  10 . As set forth in further detail below, when triggered from the editing environment, the evaluation process  8  is able to evaluate selected code in the editor without first saving the code to a separate file. The conversion process  10  utilizes an XML parser  12  and XSL (eXtensible Stylesheet Language) templates  14 . The XML parser  12  is used to parse saved code into a document object model. The XSL templates  14  are used to convert the document object model into documents of a user-specified format. 
     As depicted herein, the evaluation process is built into an editor such as the editor in MATLAB. The evaluation process in the built-in editor may be triggered by the user as set forth in further detail below. It will be appreciated that other implementations of the present invention may utilize a standalone evaluation process communicating with the other components described herein. 
     The electronic device  2  is in communication with a display  20 . The display  20  includes a first view  22  and a second view  24  generated by the interpreted language development environment  4 . The first view  22  is utilized by the illustrative embodiment of the present invention to display a collection of program code selected by a user  30  to the user. The second view  24  is used by the illustrative embodiment of the present invention to display the results of evaluation of a code cell and/or a published document based on the code cell, to the user  30  in the manner set forth below. The second view may be textual, as in the case of program text output to the command line, or it may be graphical, as in the plot of curve defined by a variable, or it may be both textual and graphical. The second view may also include audio output resulting from the evaluation of code. When the second view displays a published document the first view (code input) and the second view (code output) are joined into a single and unified published and documented view. 
     Those skilled in the art will recognize that the combination of elements depicted in the environment of  FIG. 1  is shown in an illustrative sense and not as a limiting depiction. For example, the user  30  may be remotely located from the electronic device  2  over a network. Similarly, the conversion process  10  may be located in the interpreted language development environment  4  but not be contained within the editor  6 . Likewise, the interpreted language development environment  4  may generate one or three or more views to display output to the user rather than the two views shown in  FIG. 1 . These and other implementations are within the scope of the present invention. 
     The illustrative embodiment of the present invention allows the rapid prototyping of code selected by a user without resorting to saving the code subsections between each evaluation iteration.  FIG. 2  is the sequence of steps followed by the illustrative embodiment of the present invention to perform rapid prototyping of selected code cells and the subsequent rapid conversion of selected code to a user-selected format. The sequence begins with providing of a first view containing program code to the user (step  40 ). A user initiates an evaluation process  6  by selecting a control within the first view  22  which triggers the rapid prototyping mode (step  42 ). The user then selects a code cell from among the lines of contiguous program code displayed in the first view (step  44 ). The code cell may be comprised of one or more contiguous lines of code. Code within the cell will be interpreted. The evaluation process  6  then analyzes the selected code cells (step  46 ) and the results of the analysis are displayed to the user in the second view  24  (step  48 ). Unlike conventional editors, the illustrative embodiment of the present invention allows the rapid prototyping of program code without first saving the program code to a separate file. The rapid prototyping may be continued indefinitely until the user is satisfied with the result. Once the program code has been determined by the user to be acceptable, the user may then save the result (step  50 ). The saved results may then be published in a document in a specified file format selected by the user (step  52 ). The conversion process by which the saved code is converted into the selected document format is discussed further below. 
     Interactive coding requires frequent iteration of code segments until optimized code is achieved. The illustrative embodiment of the present invention provides the ability to streamline the editing of values in the program code by allowing for in-place modification of values prior to analysis.  FIG. 3  depicts the sequence of steps followed by the illustrative embodiment of the present invention to provide an in-place modification of a variable value in the program code prior to evaluating the code cell. The sequence begins when the program code is displayed to the user in the first view by the editor  6  (step  60 ). Upon entering the rapid prototyping mode following the user selection of the mode, a code cell is selected by the user from among the lines of contiguous code (step  62 ). It should be noted that in circumstances where the user does not affirmatively indicate a code cell division in the first view, the illustrative embodiment of the present invention may still evaluate the entire displayed code as a single cell. Following the selection of the code cell, the code cell is analyzed without first saving the code to the separate file and the results are then displayed to the user (step  64 ). Upon viewing the results, the user may decide the results are sub-optimal and desire an analysis of a different version of the code cell. The illustrative embodiment of the present invention allows a user to provide alternative values for variables in the code cell in a-number of ways including in-place modification (step  66 ). In one aspect of the present invention, the user may select a value variable in the program code being displayed and by utilizing tool bar controls, enter a new value without having to re-type the code. In one implementation of the present invention, a single click on the toolbar or + key can increment a variable and evaluate the cell. Exemplary tool bar controls allowing in-place modification of the code values are discussed further below. Once the variable value has been altered the code cell may be analyzed again without saving (step  68 ). The updated result is then displayed to the user in a second view (step  70 ). Those skilled in the art will recognize that the in-place or other modification of the values may be continued until such time that the user is satisfied with the results or decides not to enter additional values. 
     The present invention also supports the sequential analysis of multiple code cells selected by a user.  FIG. 4  depicts the sequence of steps followed by the illustrative embodiment of the present invention for a user to select multiple code cells. The sequence begins when the program code is displayed to the user in the first view (step  80 ). The user selects the first code cell (step  82 ) and may select a second code cell from the program code displayed to the user in the first view (step  84 ). The first code cell is then analyzed with the end results displayed to the user (step  86 ). Subsequently, the second code cell is analyzed in the same manner, and the results displayed to the user (step  88 ). Since each code cell may be individually saved following the evaluation and then converted into a document of a type specified by the user, the ability to select multiple code cells from the program code displayed in the first view enables the user to convert accepted saved versions of the code cells into published documents showing a narrative effect of the running of the code. The use of the multiple code cells to display sequential views of the code analysis is discussed further below. 
     The second view  24  is utilized to display results to a user  30 . As noted above, the second view  24  being displayed to the user  30  may render the textual, graphical or audio results of a code cell being executed. Alternatively, the second view may display a published document to the user  30 . For example when evaluating a cell with a statement “a=3+4”, the result appears in the second view (such as the MATLAB command window) as “a=7”. Similarly, a graphical result could be displayed showing the result of the calculation. The second view  24  may also be used to display a published view to the user with both the input “a=3+4” and the output “a=7” being joined in a static document such as an HTML document. Those skilled in the art will recognize that both a view of the output of the execution and a published view may be displayed to a user at the same time by displaying a third view without departing from the scope of the present invention. 
       FIG. 5  is a block diagram of the XML-based architecture utilized by the illustrative embodiment of the present invention to convert program code to a published document in a format selected by a user. Following the evaluation process discussed above, the program code is saved to a file such as an .m file in MATLAB. The saved .m file, foo.m  100  in  FIG. 5 , is used as the basis of a document object model  102 . An XML parser is used to section the code for the document object model. By way of toolbar controls or menu commands, the user is able to select a desired format and convert the document object model into a published document of a single format with a single click. For example, the user may choose to convert the code to a published foo.html  104  document displayed to the user on the second view. 
     Alternatively, the user may choose to publish an XML document  106 , a LaTeX document  108 , a PDF document  110 , a WORD document  112 , a POWERPOINT document  114  or some other type of document. XSL templates are used to transform the document object model  102  into the user-selected format. With POWERPOINT documents, each code cell is displayed as a separate slide. A slideshow of the published slide allows a user to view the sequential execution of each code cell thus presenting a narrative effect. The illustrative embodiment of the present invention also allows M-code to be extracted from a published HTML file and converted and imported back to the M-code editor. 
       FIG. 6  depicts a screen shot of a user interface suitable for the first view used by the illustrative embodiment of the present invention to display program code to the user. The window  120  includes a cell pull-down menu  122  which displays various code cells operations available once the user has initiated cell mode. For example, the code cell menu may include a menu command to disable cell-mode  121 . Such a command would convert the editor back into normal editing mode. The code cell menu may also include a command to reevaluate the current cell  123  or evaluate the current cell and advance to the next cell  125 . Similarly, the code cell menu  122  may include a command to evaluate the entire file  127 . The code cell menu  122  additionally includes a command to insert a cell divider  129  marking either the beginning or ending of a code cell. The command inserts two percentage signs at an indicated point in the code. It will be appreciated that a user may also manually type the two percentage signs directly into the code to mark a cell boundary. Commands are also available allowing the user to insert text markup  131 , change the active cell to the next cell  133 , or change the active cell to the previous cell  135 . 
     The user initiates cell editing mode by clicking an icon  128  on a cell tool that provides various operations that may be selected by the user during code cell mode. Those skilled in the art will recognize that other options to initiate cell mode may also be provided to a user such as a menu command. The window  120  displays the collection of program code  124 . Within the displayed program code are the code cell indicators  128 ,  130  and  132  marking the borders of the code cells selected by the user. The code cell dividers may be marked using double percentage signs such as those indicated in  FIG. 6 . It will be recognized by those skilled in the art that the actual form of the indicator is an implementation choice and may vary without departing from the scope of the current invention. A current code cell, such as code cell  126  may be marked with an indicator such as by highlighting the cell to demonstrate to the user that the cell that is currently active. 
       FIGS. 7A ,  7 B and  7 C depict the changing views of the illustrative embodiment of the present invention during the performance of rapid prototyping of code.  FIG. 7A  depicts the first view window  140  displaying the program code viewed by the user  142 .  FIG. 7B  includes the first view window  150  displaying the program code of  FIG. 7A  which has now been subdivided by the user placing code cell indicators  152  and  154 . The code cell indicators, double percentage signs, indicate the formation of two code cells  152  and  154 . The program code includes a plot function  151  which is discussed further below. The window  150  also includes a tool bar control  156  allowing for in-place modification of variable values displayed in the program code. 
     The tool bar control  156  is depicted further in  FIG. 7C . The tool bar control  156  includes a window  158  for incrementing and decrementing a selected value. The incrementing and decrementing for the window  158  may be performed via the user manipulating decrement and increment buttons  162  which causes the selected value in the code to increment/decrement by the displayed amount. The tool bar control  156  also includes a window  160  allowing a user to modify a multiplier or divisor number for depicted value. Similarly to the increment and decrement function, the divisor/multiplier buttons  164  may be used to modify the multiplier/divisor number for a selected value rather than the user directly typing a value into the window. Those skilled in the art will recognize that other mechanisms may be used for in-place modification of code values. For example, a selected code value may be changed using the plus and minus keys on the keyboard or the manipulation of a mouse wheel. 
     The plot function  151  depicted in window  150  of  FIG. 7B  creates an output when the evaluation process evaluates the selected code cell. The output from the plot function, a sine wave, is displayed to the user in a second window  180  depicted in  FIG. 8 . The results of the plot function are displayed to the user using a graph  182 . 
     As mentioned above, once the user has adjusted the code to an optimal point, the code may be saved and used to generate a published document in a user-selected format. The elements of the code in the first view are utilized to produce the published document displayed to the viewer in a second view.  FIG. 9  shows a depiction of the correspondence between the program code which undergoes rapid prototyping by user using the methods of the present invention and a published document which converts the saved code to a user selected format. A display  190  includes a first view window  200  and second view window  300 . The first view window  200  displays the program code and multiple cell indicators  202 ,  212 , and  222  added by the user. The code cell section indicators,  202 ,  212 , and  222  are all followed by spaces and then section labels  204 ,  214 , and  224 . 
     An HTML representation of the evaluated program code is shown in the second view window  300 . Elements of the window  200  correspond to elements depicted in the window  300 . Thus the code section labels  204 ,  214 , and  224  are reflected in the window  300  as headers  304 ,  314 , and  324 . Similarly the comments in the first view  206 ,  216 ,  226 , and  228  (denoted by a single percentage sign which causes the text not to be interpreted during evaluation) are reflected in window  300  as text  306 ,  316 ,  326  and  328 . Program code  218  from the code section is reflected as code  318  in window  300 . Additionally, the output from the code  218 , specifically the output from running the plot command  220 , is depicted in the graph  320  showing the sine wave in window  300 . The illustrative embodiment of the present invention also allows command line output to be captured. Thus the code a=magic (3)(230) depicted in window  200  is displayed as command  330  and output matrix  332  in the window  300 . 
     In one aspect of the present invention, a published document may automatically be saved to a networked electronic repository. Users may select code directly from the networked electronic repository and put it immediately into the first view for use with cell-based editing and publishing, thereby enabling roundtrip publishing and subscribing from a coding session to a shared network code repository. In one implementation, a user navigates to a web page with published code on it and clicks on a link, thereby making the code available for editing from within the editor of the present invention, edits the selected code and clicks on a button to republish the result back to the web. 
     The present invention may be provided as one or more computer-readable programs embodied on or in one or more mediums. The mediums may be a floppy disk, a hard disk, a compact disc, a digital versatile disc, a flash memory card, a PROM, a RAM, a ROM, or a magnetic tape. In general, the computer-readable programs may be implemented in any programming language. Some examples of languages that can be used include C, C++, C#, or JAVA. The software programs may be stored on or in one or more mediums as object code. 
     Since certain changes may be made without departing from the scope of the present invention, it is intended that all matter contained in the above description or shown in the accompanying drawings be interpreted as illustrative and not in a literal sense. Practitioners of the art will realize that the sequence of steps and architectures depicted in the figures may be altered without departing from the scope of the present invention and that the illustrations contained herein are singular examples of a multitude of possible depictions of the present invention.