Embodiments described herein generally relate to a method and apparatus for automatically generating and incorporating code in development environments.
While composing a program (or “programming”) in a development environment (DE), programmers add one or more functionalities to a program. The users may code such functionalities themselves using the DE. However, coding functionalities for a wide variety of target devices for which the program is being created in the DE can be challenging for an average user who is not an expert in programming. Different target devices may have different system requirements for supporting implementation of a function. Even a user expert in one programming language, or in programming for one type of target device may find it challenging to create fully functional and optimized programs in a variety of programming languages, and/or for a variety of target devices.
Further, programming for target devices such as field programmable gate arrays (FPGAs) and other controller-based devices (e.g. microcontroller or microprocessor based devices), for example memory controller unit (MCU) and system on a chip (SoC) is even more complex, given the wide variety of device types, varied system requirements, configurations, applications, and programming languages used. To add to the complexity, such devices are deployed in remote locations, and usually adjunct to conventional systems, making programming for such target devices for adding functionalities very challenging for an average user.
Thus, there is a need in the art for simplifying programming in development environments, while automatically generating code for being incorporated in programs generated in such development environments.
Embodiments described herein generally relate to a method and apparatus for automatically generating and incorporating code in development environments, substantially as shown in and/or described in connection with at least one of the figures, as set forth more completely in the claims.
These and other features and advantages of the present disclosure may be appreciated from a review of the following detailed description of the present disclosure, along with the accompanying figures in which like reference numerals refer to like parts throughout.
So that the manner in which the above-recited features of the embodiments described herein can be understood in detail, a more particular description of the embodiments, briefly summarized above, may be had by reference to embodiments, some of which are illustrated in the appended drawings. It is to be noted, however, that the appended drawings illustrate only typical embodiments and are therefore not to be considered limiting of its scope.
Embodiments described herein relate to method and apparatus for automatically generating and incorporating code in development environments, and more specifically to enabling automatic creation of code corresponding to a desired functionality, while a user is creating or composing a program for a target device in a development environment (DE), and to incorporating or injecting, manually or automatically, the automatically generated code in the program. The DE can be on a device remote to the target device, and for example, a web-based DE accessible via a browser. While programming or creating the program using the DE on the user device, the user accesses an automatic code generation user interface (ACGUI) on the user device. The ACGUI is available either in the context of the DE or as a separate interface from the DE. The ACGUI presents a library of available functionalities for which automatic generation of code is available. The ACGUI may be populated by a coding and virtualization server (CVS) remote to the user device, a process library stored on the user device, a process library stored local to the user device, or a process library stored on a server which hosts the DE on the user device, where the DE server may be local or remote to the user device.
The user selects a desired function in the ACGUI, specifies parameters and provides other inputs as may be required for the automatic generation of code for the desired function. Based on the provided inputs, the CVS automatically generates code corresponding to the desired function. The automatically generated code is then injected or otherwise incorporated, manually or automatically, into the program being created by the user on the DE. As used herein, the terms “inject” or “incorporate” are used interchangeably in the context of code being injected or incorporated in a program being developed for an application in a DE, and refer to appropriately importing the code into the program, such that the program including the automatically generated code may be executed without additional modifications. For example, the CVS and the DE are configured for the CVS to send the automatically generated code to the DE, in a manner configured by the user, or the automatically generated code generated is generated in the context of DE, and imported into a program being created in the DE based on user instructions from within the DE, or pre-defined instructions. The program comprising the automatically generated code, also referred to as automatically generated program (AGP) is then sent to the target device for installation and execution. In some embodiments, the functionality to generate code automatically, for example, code and software development kit (SDK) generator, is included in the DE on the user device, a device local to the DE, or the DE server remote to the DE. In some embodiments, the automatically generated code comprises a call from the target device to the CVS for executing a program on the CVS, referred to as the CVS program (CVSP), execution of which on the CVS performs the desired function. By executing the CVSP on the CVS, the call incorporated in the automatically generated code imparts additional functionality to the AGP. In some embodiments, the CVSP may further initiate a remote service executed by remote servers based on the call. In some embodiments, the call included in the automatically generated code is made from the target device directly to a device capable of performing the remote service, which also imparts additional functionality to the AGP.
Parameters and other inputs are also specified along with the desired function, and include information for operation of the automatically generated code on the target device such as target device type, power requirements, network equipment configuration, network details, authentication details for additional services or devices if required for execution of the desired function, among several other parameters and inputs as will be readily appreciated by persons skilled in the art. Parameters may also include information for operation of the call, for example, routing the call appropriately to the CVS or to a remote service. Parameters may also include information required for executing the CVSP or the remote service.
Commonly assigned U.S. Pat. No. 8,726,285, filed 28 Jan. 2011; U.S. Pat. No. 9,436,439, filed 17 Jun. 2014; U.S. Pat. No. 9,239,705, filed 17 Jun. 2014; U.S. Pat. No. 9,235,383, filed 17 Jun. 2014; and U.S. Patent Application Publication Numbers 2009/0070121, filed 11 Sep. 2007; 2009/0070162, filed 11 Sep. 2007; 2015/0199088, filed 9 Jan. 2015; 2015/0286362, filed 13 Apr. 2015; 2016/0327925, filed 8 Mar. 2016; 2016/0328216, filed 6 May 2016; 2017/0344921, filed May 24, 2016; and 2017/0180462, filed Dec. 21, 2016, each of which is incorporated herein by reference in their entireties, describe techniques for developing software for a device incorporating a controller, and executing, managing, reprogramming or changing the behavior of the software, e.g. remotely, to extend the capabilities of such a device via defined workflows.
These techniques function by generating, automatically, an entire program code or a code snippet in a desired programming language, for a desired platform, to enable the capability of performing a desired functional. If a code snippet is generated, it is incorporated or injected into a complete program, as desired. In some embodiments, the snippet or the entire program, when executed on a target device for which the program is generated, additionally places a call for one or more processes to be executed on a remote device, e.g., the CVS, and/or sends (directly or via the code virtualization server) data to a remote service provider, and/or further calls a function to be remotely performed on the data by the remote service provider. Embodiments described herein use these techniques to automatically generate code corresponding to a desired functionality, and inject such code in a program for a target device, where the program is created using a DE on a user device. With such embodiments, functionalities can be added conveniently while creating the program in a familiar DE. For example, in some embodiments, the functionalities may be added by accessing an ACGUI on the user device, where the ACGUI is separate from the DE. In some embodiments, the ACGUI is available in the context of the DE, thereby enabling a user to add functionalities without leaving the DE, greatly enhancing the ease with which functionalities may be programmed for target devices. Functionalities added in this manner, that is, via programs on devices remote to the target device and executed based on a call from the remote device, enhances the capabilities of the target device. For example, the target device may be incapable of performing such functionalities itself due to lack of processing resources, otherwise restricted in performing the functionality(ies), or in order to keep the functionalities updated by updating such programs on remote devices, without having to update the code on the target devices.
In some embodiments, the AGP, when executed on the target device, places calls to a remote device, for example the CVS, for executing the CVSP. In some embodiments, such calls from the controller device are made for interacting with one or more remote services, such as FACEBOOK (by FACEBOOK INC. of Menlo Park, Calif. TWITTER (by TWITTER INC. of San Francisco, Calif.), AMAZON (by AMAZON, INC. of Seattle, Wash.), data storage service, and the like, that are not provided by the CVS. The remote calls can be implemented as a call directly from the target device to the remote services, or as a call to a program on the CVS (CVSP), which in turn interacts with the remote services and provides the data to the target device for further execution of the AGP.
Embodiments described herein are thus capable of automatically generating and injecting code in development environments (DE), enabling a user or programmer to do from the same user device on which the DE is hosted. Non-limiting examples of DEs include Integrated Development Environments (IDE) such as ECLIPSE.ORG (by ECLIPSE FOUNDATION of Ottawa, Ontario, Canada), MICROSOFT VISUAL STUDIO (by MICROSOFT CORP. of Redmond, Wash.) and the like for generating programs, 3D Modeling editors and tools such as AUTODESK (by AUTODESK, INC. of San Rafael, Calif.), CINEMA 4D (by MAXON COMPUTER GMBH of Friedrichsdorf, Germany), ZBRUSH (by PIXOLOGIC, INC. of Los Angeles, Calif.) for designing objects and devices, and thereafter program such object or devices according to the embodiments described herein.
The target device 158 comprises a CPU 160, support circuits 162 and a memory 164. The CPU 160 may be any commercially available processor, microprocessor, microcontroller, controllers including programmable sub-systems such as ARDUINO, TEXAS INSTRUMENTS LAUNCHPAD, FREESCALE BOARDS KINETIS, ST MICROELECTRONICS STM32, INTEL, AMD, and the like. The controllers may also be a System on a Chip (SoC) such as a RASPBERRY PI and the like. Some embodiments of controllers include programmed controllers of other assembled devices and systems such as NEST THERMOSTAT, PHILIPPS HUE, BELKIN, WITHINGS, and the like. The support circuits 162 comprise well-known circuits that provide functionality to the CPU such as a user interface, clock circuits, network communications, cache, power supplies, I/O circuits, and the like. In some embodiments, the user interface comprises a keypad, electronic buttons, speaker, touchscreen, display, camera, microphone, or other user interaction mechanisms. The memory 164 may be any form of digital storage used for storing data and executable software. Such memory includes, but is not limited to, random access memory, read only memory, disk storage, optical storage, and the like. The memory 164 stores computer readable instructions corresponding to an operating system (not shown), and an automatically generated program (AGP) 166 or a program AGP 166 comprising an automatically generated code snippet injected therein, optionally, a call 168, for example, a call to a function to be executed on a remote device such as the CVS 170 or a device for performing the remote service 198, and other code components 169, including program libraries, software development kit (SDK), necessary for executing the code including the AGP 166 and the call 168 included in the AGP 166. According to some embodiments, the AGP 166 is received from the CVS 170, or from the user device 120 or from the DE server 140, and installed in the memory 164.
The user device 120 comprises a CPU 122, support circuits 124 and a memory 126. The CPU 122 may be any commercially available processor, microprocessor, microcontroller, and the like. The support circuits 124 comprise well-known circuits that provide functionality to the CPU such as a user interface, clock circuits, network communications, cache, power supplies, I/O circuits, and the like. In some embodiments, the user interface comprises a keypad, electronic buttons, speaker, touchscreen, display, camera, microphone or other user interaction mechanisms. The memory 126 may be any form of digital storage used for storing data and executable software. Such memory includes, but is not limited to, random access memory, read only memory, disk storage, optical storage, and the like. The memory 126 stores computer readable instructions corresponding to an operating system (not shown), and a development environment (DE) 128, for example, for being used to generate a program for target devices, for example, the target device 158. The DE 128 provides a user interface to a user to create a program, for example, a program for execution on the target device 158. In some embodiments, the DE 128 is a standalone DE, installed on the user device 120. In some embodiments, the DE 128 is made available on the user device 120 via a DE server, accessible through the network 110, for example, a cloud DE server, or a DE server local to the user device 128, or a DE server otherwise communicably coupled to the user device 120. The DE 128 may also include a process library 130 and an automatic code generation user interface (ACGUI) 132 for receiving inputs from the user for automatically generating code to include in the program for the target device 158. In some embodiments, the process library 130 comprises code libraries, in different programming languages, corresponding to one or more functionalities made available for automatic code generation. In some embodiments, the process library 130 comprises an index of functionalities made available for automatic code generation. In some embodiments, the process library 130 comprises routines for optimal execution of the desired functionality according to one or more platforms, for example, routines for power management, network connectivity, errors management, sanity checks and the like. In some embodiments, the process library 128 may be updated by accessing a corresponding process library at a remote location, for example, to update the code libraries, or to include additional code corresponding to additional functionalities. In some embodiments, the DE 128 includes a code and SDK generator 134 for automatically generating code based on the inputs received via the ACGUI 132, using the process library 130. The DE 128 also includes a code injector 135 for injecting or incorporating code generated by the code and SDK generator 134 into the DE 128, and more specifically in context of a program being developed by a user (or developer) composing the program using the DE 128 on the user device 120. In some embodiments, the code injector 135 receives a selection of a location within the DE 128 (for example, via the ACGUI 132) or a location within the program, at which the automatically generated code needs to be injected to or incorporated at.
The DE server 140 comprises a CPU 142, support circuits 144 and a memory 146. The CPU 142 may be any commercially available processor, microprocessor, microcontroller, and the like. The support circuits 144 comprise well-known circuits that provide functionality to the CPU such as a user interface, clock circuits, network communications, cache, power supplies, I/O circuits, and the like. In some embodiments, the user interface comprises a keypad, electronic buttons, speaker, touchscreen, display, camera, microphone, or other user interaction mechanisms. The memory 146 may be any form of digital storage used for storing data and executable software. Such memory includes, but is not limited to, random access memory, read only memory, disk storage, optical storage, and the like. The memory 146 stores computer readable instructions corresponding to an operating system (not shown), and a development environment (DE) module 148, for providing a development environment to a user device, for example, the user device 120. The DE server 140 may be local or remote to the user device 120, or be configured as a cloud based DE server 140. The memory 146 also comprises a process library 149. In some embodiments, the process library 149 is made available as the process library 130 to the DE 128 of the user device 120. In some embodiments, the process library 149 comprises code libraries, in different programming languages, corresponding to desired functionalities, while the process library 128 comprises an index of such functionalities linked to the corresponding code in the process library 149. In some embodiments, the process library 149 comprises an index of functionalities made available for automatic code generation. In some embodiments, the process library 149 comprises routines for optimal execution of the desired functionality according to one or more platforms, for example, routines for power management, network connectivity, errors management, sanity checks and the like. In some embodiments, the process library 149 may be updated by accessing a corresponding process library at a remote location, for example, to update the code libraries, or to include additional code corresponding to additional functionalities. In some embodiments, the DE module 148 includes a code and SDK generator 150 for automatically generating code based on the inputs received via the ACGUI 132, using the process library 149. The memory 146 also includes a code injector 151 for injecting or incorporating code generated by the code and SDK generator 150 into the DE 128 (via the DE module 148), and more specifically in context of a program being developed by a user (or developer) using the DE 128 or a DE rendered using the DE module 148. In some embodiments, the code injector 151 receives a selection of a location within the DE 128 (for example, via the ACGUI 132) or the location within the program at which the automatically generated code needs to be injected to or incorporated at. In some embodiments, the DE server 140 is optional, and the DE 128 on the user device is sufficient in providing any required functionality of a development environment.
The CVS 170 comprises a CPU 172, support circuits 174, and memory 176 containing instructions and algorithms. The CPU 172 processes inputs and outputs to/from the devices. The CPU 172 may be any commercially available processor, microprocessor, microcontroller, and the like. The support circuits 174 comprise well-known circuits that provide functionality to the CPU such as a user interface, clock circuits, network communications, cache, power supplies, I/O circuits, and the like. Alternative embodiments may use control algorithms on a custom Application Specific Integrated Circuit (ASIC). In some embodiments, the user interface comprises a keypad, electronic buttons, speaker, touchscreen, display, camera, microphone, or other user interaction mechanisms. The memory 176 may be any form of digital storage used for storing data and executable software. Such memory includes, but is not limited to, random access memory, read only memory, disk storage, optical storage, and the like. The memory 176 stores computer readable instructions corresponding to an operating system (not shown), an interface 176, a code and software development kit (SDK) generator 182, a code injector 184, a process library 186, parameter store 190, authentication module 192, and an execution engine 194.
In some embodiments, the interface 178 is capable of producing a GUI 180 which may contain graphical widgets representing functions and/or widgets representing sequence of executing multiple functions. The GUI 180 is sent to user device 120 in real-time, pre-loaded to the user device 120, available as an application installable on the user device 120 by a user, or otherwise made available using known techniques, for presentation as the ACGUI 132 on the user device. Using the ACGUI 132 presented on the user device 120 in the context of DE 128, or in association with the DE 128 (e.g., by alternating between the DE 128 and the ACGUI 132), the user provides inputs regarding one or more of the desired solution. The input regarding the desired solution is received as input by the code and the SDK generator 182 to generate automatically, code corresponding to the desired functionality. In addition to receiving a selection of the desired functionality, the ACGUI 132 also receives parameters and other inputs at the user device 120, and such parameters and other inputs may be stored in the parameter store 190. The automatically generated code is generated by the code and SDK generator 182 using the process library 186, which comprises code templates corresponding to desired functionalities presented as available for automatic code generation via the ACGUI 132, and the parameter store 190, or parameter data received directly via the ACGUI 132. In some embodiments, the code and SDK generator 182 automatically generates a custom SDK for supporting the execution of the automatically generated code using the process library 186 and the parameters store 190. The custom SDK is also installed along with the automatically generated code on the target device 158, for example, as components 169. The code injector 184 injects or incorporates code generated by the code and SDK generator 182 into the DE 128, and more specifically in context of a program being developed by a user (or developer) using the DE 128 or a DE rendered using the DE module 148 on the user device 120. In some embodiments, the code injector 184 receives a selection of a location within the DE 128 (for example, via the ACGUI 132) at which the automatically generated code needs to be injected to or incorporated at.
The parameters include custom inputs to configure further the desired functionality, for example, for desired inputs/outputs, specific device(s) involved, specific connectivity, among several other operational parameters. A non-exhaustive list of parameters is presented in TABLE 1:
Such parameters may be stored in the parameter store 190, and utilized along with the process library 186 to generate code automatically at the CVS 170, or at the user device 120 or the DE server 140, where the information from the parameter store 190 is exchanged with the user device 120 or the DE server 140, respectively.
In some embodiments, the process library 186 is made available as the process library 130 to the DE 128 of the user device 120. In some embodiments, the process library 186 comprises code libraries, in different programming languages, corresponding to desired functionalities, while the process library 128 comprises an index of such functionalities linked to the corresponding code in the process library 186. In some embodiments, the process library 186 comprises an index of functionalities made available via the interface 178 to the ACGUI 132. In some embodiments, the process library 186 comprises routines for optimal execution of the desired functionality according to one or platforms, for example, routines for power management, network connectivity, errors management, sanity checks and the like. In some embodiments, the process library 186 may be used to update corresponding process library(ies) at a remote location(s), for example, to update the code libraries, or to include additional code corresponding to additional functionalities at the process library 130 or the process library 149.
In some embodiments, the ACGUI 132 also includes additional routines to allow for testing the automatically generated code or the entire program comprising the automatically generated code and various routines associated with the code. Such additional routines may include modules, for example, for simulating target devices, and executing the automatically generated code on the simulated target devices. The additional routines may also include modules for displaying the results of the aforesaid testing. The testing may be initiated upon receiving such instructions via the ACGUI. The results of the testing are displayed, for example, on the user device in the ACGUI. The testing results may be displayed live, that is, when the testing is being conducted, displaying outcomes of the testing as the outcomes occur. In some embodiments, the ACGUI 132 is used by the user to modify or reprogram the automatically generated code. In some embodiments, the ACGUI 132 is configured to track the automatically generated code, its performance, any runtime errors, modifications made, and thereby manage such automatically generated code.
In some embodiments, the access to the user device 120 and/or the DE server 140 is enabled by an authentication module 192, which comprises preconfigured credentials allowing the CVS 170 to exchange data with the user device 120 and/or the DE server 140, and particularly with the DE 128.
In some embodiments, the automatically generated code, for example, generated at the CVS 170, the user device 120, or the DE server 140 according to the techniques described herein, comprises a call to the CVS 170 from the target device 158 to execute a CVS program (CVSP) 188 at the CVS 170. The process library 188 also includes one or more such CVSPs.
The execution engine 194 supports all the foregoing functions of the CVS, including rendering the GUI 180 to the user device 120 as the ACGUI 132 (if the GUI 180 is sent to the user device 120 in real-time), executing CVSP 188, exchanging data with a remote service 198, among several others.
The remote service 198 is a service provided by a service provider device remote to the target device 158. For example, remote services include services provided by AMAZON, EBAY (by EBAY, INC. of San Jose, Calif.), FACEBOOK, APPLE PUSH NOTIFICATION (by APPLE, INC. of Cupertino, Calif.), text message servers, email servers, data storage, and the like.
The network 110 comprises the Internet, or a wide area network (WAN) or a combination, and may include one or more such networks. In some embodiments, the network 110 includes one to one communication channels between any two various components of the system. For example, between the user device 120 and the DE server 140, between the user device 120 and the CVS 170, between the DE server 140 and the CVS 170, or between the target device 158 and any of the user device 120, the DE server 140 or the CVS 170.
The method 200 begins at step 202, and proceeds to step 204, at which the user accesses an automatic code generation user interface (ACGUI). The ACGUI, for example, the ACGUI 132 is rendered by the interface 178 of the CVS 170. The method proceeds to step 206, at which the user selects a desired function and a programming language in which to generate code automatically for enabling the selected functionality. The function is selected from multiple available functions for which code can be generated automatically. In some embodiments, the programming language is auto-detected or made available by the DE. The method 200 proceeds to step 208, at which the user specifies at least one parameter for the functionality, including operational routines as discussed above. The user may additionally select routines from a library of such routines, for example, incorporated in the process library, as discussed above, and presented via the ACGUI 132, for the desired functionality at step 208.
The method 200 proceeds to step 210, at which the method 200 generates code automatically for the desired functionality. For example, the code and SDK generator automatically generate code and supporting components (e.g. SDK) for the automatically generated code, using the code templates and routine definitions stored in the process library, the parameters received via the ACGUI or the parameter store 190. According to some embodiments, the automatically generated code comprises a call from the target device to a remote device to initiate a program or service on the remote device. The call is executed when the automatically generated code, as a program or a part of a program, is executed on the target device. For example, upon execution of the program on the target device, the call is placed from the target device to the CVS, to initiate a CVSP for execution on the CVS. The call includes the at least one parameter, for example, usable for executing the CVSP. Automatically generated code is also illustrated in the GUI screen 300 of
The method 200 proceeds to step 212, at which the user manipulates the ACGUI 132 to send the automatically generated code to the DE 128 to be injected in the complete program developed using the DE 128. In the illustrations of
The method 200 proceeds to step 216, at which the method 200 sends the AGP to the target device 158. The method 200 then ends at step 218.
The method 600 begins at step 602, and proceeds to step 604, at which the user, in the DE 128, invokes the ACGUI 132, for example, by activating a context menu within the DE 128. For example, the GUI screen 700 of
The method 600 proceeds to step 610, at which at which the method 600 generates code automatically for the desired functionality. For example, the code and SDK generator automatically generate code and supporting components (e.g. SDK) for the automatically generated code, using the code templates and routine definitions stored in the process library, the parameters received via the ACGUI or the parameter store 190. According to some embodiments, the automatically generated code comprises a call from the target device to a remote device to initiate a program or service on the remote device. The call is executed when the automatically generated code, as a program or a part of a program, is executed on the target device. For example, upon execution of the program on the target device, the call is placed from the target device to the CVS, to initiate a CVSP for execution on the CVS. The call includes the at least one parameter, for example, usable for executing the CVSP. Automatically generated code is then automatically populated within the DE 128, for example, as illustrated in the GUI screen 800 of
The method 600 then proceeds to step 612, at which the automatically generated code is injected in the program generated using the DE 128, for example by a code injector, such as one of the code injectors 135, 151 or 184. The code injector comprises instructions to inject the code generated automatically by the code and SDK generator, into a program being developed in the DE. In some embodiments, the code injector may be a part of the code generator on any of the user device 120, the DE server 140 or the CVS 170. For example,
The ability to generate code automatically, while staying within the context of a DE has several applications in addition to those described above. For example,
The method 600 proceeds to step 614 at which the method 600 sends the AGP to the target device 158. The method 600 then ends at step 616.
In some embodiments, the user has an option to edit the automatically generated code, one or more parameters, or change the function for which the automatically generated code is generated. For example, the user can select the automatically generated code using the ACGUI, and edit the automatically generated code, or the parameters. In some embodiments, the user can select a different function from the multiple available functions, and generate code automatically for this different function, which is then inserted in the program for the target device, for example, using one or more steps of the methods 200 or 600.
As another example,
The automatically generated code is injected by a code injector (135, 151, 184) into an app or a program being developed in ECLIPSE.ORG using Java, for example, based on user instructions, or automatically, according to the methods 200 or 600.
The ACGUI may take various forms to provide tools for receiving inputs for designing, testing, monitoring, and modifying controller based solutions for application systems. The ACGUI may include selectable text, form fields, icons representing elements or parameters of the solution, widgets representing functions and the sequence of execution thereof, graphs and tables to display a state of the solution, among several other elements used in GUIs for the purpose of receiving inputs and presenting information or outputs. As would occur readily to those of ordinary skill, several such variations of the GUIs may be used in order to practice the embodiments described, without departing from the scope and spirit of the embodiments described herein. While the embodiments are described with respect to Internet of things (IoT) devices, those skilled in the art will readily appreciate that the techniques exemplified by the disclosed embodiments are applicable to several other programming environments and devices, including mobile, desktop, server, web-based applications.
The embodiments directed herein may be directed to any programming languages or frameworks, including, but not limited to JAVA, C, C #, IOS, PHP, ANDROID, JAVASCRIPT, NODE.JS, RUBY, PYTHON, among several others. The target device could be any processor based device, and the automatically generated code could be used could be used as, or when generating code for insertion into, applications for IoT, mobile, web, desktop, and server devices. While reference to IoT devices, programs and parameters is made as an example, the embodiments described herein are not limited to such examples. Those of ordinary skill would appreciate that the embodiments described herein are applicable to programming for various other processor based devices equally well, which are within the scope and spirit of the present invention. For example, embodiments described herein are usable to build a desktop application, and in some embodiments, the desktop application so generated may be installed on user device, that is, in such a scenario, the user device and target device would be the same. In some embodiments, the embodiments described herein are usable to build a web application installed on a web server, which is the target device in this example.
The methods described herein may be implemented in software, hardware, or a combination thereof, in different embodiments. The methods may be incorporated in processor executable instructions stored on non-transitory computer readable media. In addition, the order of methods may be changed, and various elements may be added, reordered, combined, omitted or otherwise modified. All examples described herein are presented in a non-limiting manner. Various modifications and changes may be made as would be obvious to a person skilled in the art having benefit of this disclosure. Realizations in accordance with embodiments have been described in the context of particular embodiments. These embodiments are meant to be illustrative and not limiting. Many variations, modifications, additions, and improvements are possible. Accordingly, plural instances may be provided for components described herein as a single instance. Boundaries between various components, operations and data stores are somewhat arbitrary, and particular operations are illustrated in the context of specific illustrative configurations. Other allocations of functionality are envisioned and may fall within the scope of claims that follow. Finally, structures and functionality presented as discrete components in the example configurations may be implemented as a combined structure or component. These and other variations, modifications, additions, and improvements may fall within the scope of embodiments as defined in the claims that follow.
While the foregoing is directed to embodiments described herein, other and further embodiments may be devised without departing from the basic scope thereof, and the scope thereof is determined by the claims that follow.
This application claims the benefit of the U.S. Provisional Application No. 62/471,071, having the same title and filed on Mar. 14, 2017, the contents of which are hereby incorporated by reference in its entirety.
| Number | Name | Date | Kind |
|---|---|---|---|
| 5012402 | Akiyama | Apr 1991 | A |
| 5623604 | Russell et al. | Apr 1997 | A |
| 5852733 | Chien et al. | Dec 1998 | A |
| 5887172 | Vasudevan et al. | Mar 1999 | A |
| 6065053 | Nouri et al. | May 2000 | A |
| 6108715 | Leach et al. | Aug 2000 | A |
| 6158031 | Mack et al. | Dec 2000 | A |
| 6266809 | Craig et al. | Jul 2001 | B1 |
| 6324681 | Sebesta et al. | Nov 2001 | B1 |
| 6366300 | Ohara et al. | Apr 2002 | B1 |
| 6388683 | Ishai et al. | May 2002 | B1 |
| 6401156 | Mergard et al. | Jun 2002 | B1 |
| 6490723 | Bearden et al. | Dec 2002 | B1 |
| 6715132 | Bartz et al. | Mar 2004 | B1 |
| 6889002 | Hayashi et al. | May 2005 | B1 |
| 6894991 | Ayyagari et al. | May 2005 | B2 |
| 6895573 | Norgaard et al. | May 2005 | B2 |
| 6931288 | Lee et al. | Aug 2005 | B1 |
| 6966039 | Bartz et al. | Nov 2005 | B1 |
| 7010773 | Bartz et al. | Mar 2006 | B1 |
| 7043715 | Bauer et al. | May 2006 | B1 |
| 7069536 | Yaung | Jun 2006 | B2 |
| 7086014 | Bartz et al. | Aug 2006 | B1 |
| 7114154 | Crohn | Sep 2006 | B1 |
| 7127705 | Christfort et al. | Oct 2006 | B2 |
| 7136709 | Arling et al. | Nov 2006 | B2 |
| 7143360 | Ogami et al. | Nov 2006 | B1 |
| 7152229 | Chong et al. | Dec 2006 | B2 |
| 7246319 | Alden et al. | Jul 2007 | B2 |
| 7281236 | Galvin et al. | Oct 2007 | B1 |
| 7293255 | Kumar | Nov 2007 | B2 |
| 7475107 | Maconi et al. | Jan 2009 | B2 |
| 7752556 | Forstall et al. | Jul 2010 | B2 |
| 7784030 | Christfort et al. | Aug 2010 | B2 |
| 7890925 | Wyatt | Feb 2011 | B1 |
| 7934197 | Thorell | Apr 2011 | B2 |
| 7954150 | Croft et al. | May 2011 | B2 |
| 8028258 | Ogami et al. | Sep 2011 | B1 |
| 8055386 | McCoy et al. | Nov 2011 | B2 |
| 8086744 | Abdullah et al. | Dec 2011 | B2 |
| 8245186 | Gryko et al. | Aug 2012 | B2 |
| 8332809 | Mauceri et al. | Dec 2012 | B2 |
| 8352903 | Friedman | Jan 2013 | B1 |
| 8386610 | Yahalom | Feb 2013 | B2 |
| 8387005 | Ghosh-Roy | Feb 2013 | B1 |
| 8458653 | Hudson, III | Jun 2013 | B2 |
| 8508367 | Shafer | Aug 2013 | B2 |
| 8544007 | Al-Aziz | Sep 2013 | B2 |
| 8572560 | Drissi et al. | Oct 2013 | B2 |
| 8578347 | Carrick | Nov 2013 | B1 |
| 8639644 | Hickman et al. | Jan 2014 | B1 |
| 8694954 | Ortiz | Apr 2014 | B2 |
| 8752033 | Mohammed et al. | Jun 2014 | B2 |
| 8904299 | Owen | Dec 2014 | B1 |
| 8959477 | Mueller | Feb 2015 | B2 |
| 8990787 | Balassanian | Mar 2015 | B2 |
| 9063753 | Schaude | Jun 2015 | B2 |
| 9148413 | Marr et al. | Sep 2015 | B1 |
| 9229842 | Broda | Jan 2016 | B2 |
| 9239705 | Chandaria | Jan 2016 | B2 |
| 9262140 | Rangan | Feb 2016 | B2 |
| 9372785 | Wang et al. | Jun 2016 | B2 |
| 9495473 | Gardner | Nov 2016 | B2 |
| 9626207 | Graham | Apr 2017 | B2 |
| 9678747 | Beckett | Jun 2017 | B2 |
| 9696971 | Wierda | Jul 2017 | B1 |
| 9898393 | Moorthi | Feb 2018 | B2 |
| 9921827 | Evans | Mar 2018 | B1 |
| 20020078168 | Christfort et al. | Jun 2002 | A1 |
| 20020169850 | Batke et al. | Nov 2002 | A1 |
| 20020184610 | Chong et al. | Dec 2002 | A1 |
| 20020188597 | Kern et al. | Dec 2002 | A1 |
| 20020194313 | Brannock | Dec 2002 | A1 |
| 20030023839 | Burkhardt et al. | Jan 2003 | A1 |
| 20030037181 | Freed | Feb 2003 | A1 |
| 20030051021 | Hirschfeld et al. | Mar 2003 | A1 |
| 20030061274 | Lo | Mar 2003 | A1 |
| 20030120707 | Bogdan et al. | Jun 2003 | A1 |
| 20030177208 | Harvey | Sep 2003 | A1 |
| 20030204560 | Chen et al. | Oct 2003 | A1 |
| 20040010734 | Ghercioiu et al. | Jan 2004 | A1 |
| 20040034842 | Mantey et al. | Feb 2004 | A1 |
| 20040040028 | Moreau | Feb 2004 | A1 |
| 20040080770 | Hirose et al. | Apr 2004 | A1 |
| 20040193635 | Hsu et al. | Sep 2004 | A1 |
| 20040221238 | Cifra et al. | Nov 2004 | A1 |
| 20040249944 | Hosking et al. | Dec 2004 | A1 |
| 20040267926 | Rothman et al. | Dec 2004 | A1 |
| 20050057436 | Alden et al. | Mar 2005 | A1 |
| 20050114644 | Chu et al. | May 2005 | A1 |
| 20050114854 | Padisetty et al. | May 2005 | A1 |
| 20050177269 | Funk | Aug 2005 | A1 |
| 20050198624 | Chipman | Sep 2005 | A1 |
| 20050256964 | Dube | Nov 2005 | A1 |
| 20050283786 | Dettinger et al. | Dec 2005 | A1 |
| 20060020910 | Schlanger et al. | Jan 2006 | A1 |
| 20060036799 | Shah et al. | Feb 2006 | A1 |
| 20060041644 | Henseler | Feb 2006 | A1 |
| 20060041854 | Schlanger et al. | Feb 2006 | A1 |
| 20060059447 | Ariyama et al. | Mar 2006 | A1 |
| 20060074733 | Shukla et al. | Apr 2006 | A1 |
| 20060122730 | Niemela et al. | Jun 2006 | A1 |
| 20060229924 | Aron et al. | Oct 2006 | A1 |
| 20060259588 | Lerman et al. | Nov 2006 | A1 |
| 20060271537 | Chandrasekharan et al. | Nov 2006 | A1 |
| 20060277158 | Kim | Dec 2006 | A1 |
| 20060277328 | Cherian et al. | Dec 2006 | A1 |
| 20070017995 | Good | Jan 2007 | A1 |
| 20070044086 | Sampath | Feb 2007 | A1 |
| 20070079282 | Nachnani et al. | Apr 2007 | A1 |
| 20070096757 | Puente et al. | May 2007 | A1 |
| 20070142929 | Pereira | Jun 2007 | A1 |
| 20070150749 | Monaghan et al. | Jun 2007 | A1 |
| 20070174037 | Ling | Jul 2007 | A1 |
| 20070179955 | Croft et al. | Aug 2007 | A1 |
| 20070186246 | Goldhor | Aug 2007 | A1 |
| 20070234341 | Chang et al. | Oct 2007 | A1 |
| 20070250800 | Keswick | Oct 2007 | A1 |
| 20070283072 | Johnson | Dec 2007 | A1 |
| 20080021994 | Grelewicz et al. | Jan 2008 | A1 |
| 20080040093 | Sargaison et al. | Feb 2008 | A1 |
| 20080082603 | Mansour et al. | Apr 2008 | A1 |
| 20080092073 | Shih et al. | Apr 2008 | A1 |
| 20080109782 | Adelman et al. | May 2008 | A1 |
| 20080137572 | Park et al. | Jun 2008 | A1 |
| 20080163269 | Goto | Jul 2008 | A1 |
| 20080189697 | Kachroo et al. | Aug 2008 | A1 |
| 20080222715 | Bansal et al. | Sep 2008 | A1 |
| 20080288621 | Snell et al. | Nov 2008 | A1 |
| 20090070121 | Leonelli et al. | Mar 2009 | A1 |
| 20090095807 | Dickerson et al. | Apr 2009 | A1 |
| 20090171484 | Birze et al. | Jul 2009 | A1 |
| 20090198770 | Jiang | Aug 2009 | A1 |
| 20090254880 | Gryko et al. | Oct 2009 | A1 |
| 20100010908 | Pasupulati et al. | Jan 2010 | A1 |
| 20100205273 | Shim | Aug 2010 | A1 |
| 20100271989 | Chernoguzov et al. | Oct 2010 | A1 |
| 20100287571 | Mohammed et al. | Nov 2010 | A1 |
| 20100299187 | Duggal | Nov 2010 | A1 |
| 20100333088 | Rogel et al. | Dec 2010 | A1 |
| 20110023031 | Bonola et al. | Jan 2011 | A1 |
| 20110046792 | Imes et al. | Feb 2011 | A1 |
| 20110154305 | Leroux et al. | Jun 2011 | A1 |
| 20110179347 | Proctor et al. | Jul 2011 | A1 |
| 20110238969 | Warkentin et al. | Sep 2011 | A1 |
| 20110246891 | Schubert et al. | Oct 2011 | A1 |
| 20110271269 | Tazzari et al. | Nov 2011 | A1 |
| 20110295391 | Schneider et al. | Dec 2011 | A1 |
| 20110314457 | Schaude | Dec 2011 | A1 |
| 20120022674 | Choo | Jan 2012 | A1 |
| 20120036493 | Moosmann et al. | Feb 2012 | A1 |
| 20120233588 | Mruthyunjaya et al. | Sep 2012 | A1 |
| 20120233589 | Mruthyunjaya et al. | Sep 2012 | A1 |
| 20120233612 | Beckett | Sep 2012 | A1 |
| 20120311526 | DeAnna et al. | Dec 2012 | A1 |
| 20130104100 | Mueller | Apr 2013 | A1 |
| 20130125089 | Mohammed et al. | May 2013 | A1 |
| 20130125107 | Bandakka et al. | May 2013 | A1 |
| 20130201316 | Binder et al. | Aug 2013 | A1 |
| 20130271659 | Na et al. | Oct 2013 | A1 |
| 20130275560 | Bestmann et al. | Oct 2013 | A1 |
| 20130290856 | Beveridge et al. | Oct 2013 | A1 |
| 20140013299 | Bordeaux et al. | Jan 2014 | A1 |
| 20140040182 | Gilder et al. | Feb 2014 | A1 |
| 20140052945 | Ashok et al. | Feb 2014 | A1 |
| 20140109057 | Gibbens et al. | Apr 2014 | A1 |
| 20140123124 | Gray et al. | May 2014 | A1 |
| 20140215433 | Bergamaschi et al. | Jul 2014 | A1 |
| 20140258986 | Wang et al. | Sep 2014 | A1 |
| 20140289699 | Paterson et al. | Sep 2014 | A1 |
| 20140372963 | Chandaria et al. | Dec 2014 | A1 |
| 20140372975 | Chandaria et al. | Dec 2014 | A1 |
| 20150045960 | Caron et al. | Feb 2015 | A1 |
| 20150046902 | Kumar et al. | Feb 2015 | A1 |
| 20150127192 | Phatak et al. | May 2015 | A1 |
| 20150199088 | Chandaria et al. | Jul 2015 | A1 |
| 20150286362 | Chandaria et al. | Oct 2015 | A1 |
| 20150331406 | Wang | Nov 2015 | A1 |
| 20160012026 | Baikov et al. | Jan 2016 | A1 |
| 20160043991 | Eizadi et al. | Feb 2016 | A1 |
| 20160315872 | Eizadi et al. | Oct 2016 | A1 |
| 20160327925 | Leonelli et al. | Nov 2016 | A1 |
| 20160357526 | Soffer et al. | Dec 2016 | A1 |
| Number | Date | Country |
|---|---|---|
| 1821964 | Aug 2006 | CN |
| 201017215 | Feb 2008 | CN |
| 101373441 | Feb 2009 | CN |
| 101438299 | May 2009 | CN |
| 102177501 | Sep 2011 | CN |
| 102262557 | Nov 2011 | CN |
| 102271153 | Dec 2011 | CN |
| 102479079 | May 2012 | CN |
| 102999322 | Mar 2013 | CN |
| 2498178 | Sep 2012 | EP |
| 3092561 | Nov 2016 | EP |
| 08083173 | Mar 1996 | JP |
| 2001005672 | Jan 2001 | JP |
| 2001350885 | Dec 2001 | JP |
| 2004151893 | May 2004 | JP |
| 2006107481 | Apr 2006 | JP |
| 2006216048 | Aug 2006 | JP |
| 2006350529 | Dec 2006 | JP |
| 2008021095 | Jan 2008 | JP |
| 2010539600 | Dec 2010 | JP |
| 2011150430 | Aug 2011 | JP |
| 2016112651 | Jun 2016 | JP |
| 20080044576 | May 2008 | KR |
| WO-2005050503 | Jun 2005 | WO |
| WO-2006080078 | Aug 2006 | WO |
| WO-2013058768 | Apr 2013 | WO |
| WO-2014204989 | Dec 2014 | WO |
| Entry |
|---|
| Karpuzcu, “Automatic Verilog Code Generation through Grammatical Evolution”, ACM, pp. 394-397, 2005 (Year: 2005). |
| Strumer et al, “Overview of Existing Safeguarding Techniques for Automatically Generated Code”, ACM, pp. 1-6, 2005 (Year: 2005). |
| Jelineck et al, “GUI Generation from Annotated Source Code”, ACM, pp. 129-136 (Year: 2004). |
| Hamri et al, “Automatic Generation of Object-Oriented Code From DEVS Graphical Specifications”, IEEE, pp. 1-11 (Year: 2012). |
| Murakami, et al, “A Proposal of an Installation Manual Generation Method for Open Source Software Using Operation Logs”, IEEE, pp. 547-554 (Year: 2008). |
| Bozzon et al, “Conceptual Modeling and Code Generation for RichInternet Applications”, ACM, pp. 353-360 (Year: 2006). |
| Marshall, “Remote Procedure Calls (RPC)”, <https://www.cs.cf.ac.uk/Dave/C/node33.html>, pp. 1-14, Jan. 5, 1999. |
| Benso et al., “A Software Development Kit for Dependable Applications in Embedded Systems”, Conference: Proceedings IEEE International Test Conference, 2000. |
| Alonso et al., “Computer Networks Exercise 4”, ETH, pp. 1-6, 2006. |
| Rutkowska “Security Challenges in Virtualized Environments” Proc. RSA Conference, pp. 1-97, 2008. |
| Zhang et al., “CCOA: Cloud Computing Open Architecture”, IEEE International Conference on Web Services, ICWS, pp. 607-616, 2009. |
| International Search Report and Written Opinion dated Mar. 31, 2009 for PCT Application No. PCT/US2008/075880. |
| International Search Report and Written Opinion dated Mar. 31, 2009 for PCT Application No. PCT/US2008/075878. |
| Battaglia et al., “An Open and Portable Software Development Kit for Handheld Devices with Proprietary Operating Systems”, IEEE Transactions on Consumer Electronics, vol. 55, Issue 4, pp. 2436-2444, Nov. 2009. |
| Kosta, et al. “Thinkair: Dynamic Resource Allocation and Parallel Execution in the Cloud for Mobile Code Offloading.” Infocom, Proceedings IEEE, pp. 945-953, 2012. |
| Krzyzanowski, “Remote Procedure Calls”, pp. 27, Oct. 30, 2012. |
| Bergen et al., “RPC Automation: Making Legacy Code Relevant”, 8th International Symposium on Software Engineering for Adaptive and Self-Managing Systems (SEAMS), pp. 175-180, 2013. |
| Kasai, “Embedded Middleware and Software Development Kit for Area-Based Distributed Mobile Cache System”, IEEE Transactions on Consumer Electronics, vol. 59, Issue 1, pp. 281-289, Feb. 2013. |
| Liu, “Android Native development Kit Cookbook”, Mar. 1, 2013, XP055326992, ISBN: 9781-84969-150-5, retrieved on Dec. 7, 2016 from: http://file.alitebooks.com/20150520/Android%20Native%20Development%20Kit%20Cookbook.pdf, pp. 1-331. |
| Zhongcheng et al., Web-based Remote Networked Control for Smart homes, Wuhan University, pp. 6567-6571, Jul. 26-28, 2013. |
| International Search Report and Written Opinion dated Oct. 30, 2014 for PCT Application No. PCT/US2014/046215. |
| International Search Report and Written Opinion dated Oct. 31, 2014 for PCT Application No. PCT/US2014/042783. |
| International Search Report and Written Opinion dated Oct. 31, 2014 for PCT Application No. PCT/US2014/042774. |
| International Search Report and Written Opinion dated Nov. 3, 2014 for PCT Application No. PCT/US2014/042780. |
| International Search Report and Written Opinion dated Apr. 22, 2015 for PCT Application No. PCT/US2015/010562. |
| International Search Report and Written Opinion dated Aug. 11, 2016 for PCT Application No. PCT/US2016/031217. |
| International Search Report and Written Opinion dated Oct. 4, 2016 for PCT Application No. PCT/US2016/041573. |
| International Search Report and written Opinion dated Apr. 13, 2017 for PCT Application No. PCT/US2016/067944. |
| Extended European Search Report dated Oct. 23, 2017 for Application No. 15735508.2. |
| International Search Report and Written Opinion dated Nov. 15, 2017 for PCT Application No. PCT/US2017/047944. |
| International Search Report and Written Opinion dated Nov. 24, 2017 for PCT Application No. PCT/US2017/047964. |
| International Search Report and Written Opinion dated Jun. 15, 2018 for PCT Application No. PCT/US2018/022359. |
| Haruyoshi Maruyama, “How to Use Device Driver Configurator,” Interface, CQ Publishing Co., Ltd., vol. 33, No. 6, Jun. 1, 2007, pp. 57-70. |
| International Search Report and Written Opinion dated Apr. 22, 2019 for PCT Application No. PCT/US18/63704. |
| Kreger, Heather, “Web Services Conceptual Architecture (WSCA 1.0),” Internet Citation, May 2001. |
| Number | Date | Country | |
|---|---|---|---|
| 20180267779 A1 | Sep 2018 | US |
| Number | Date | Country | |
|---|---|---|---|
| 62471071 | Mar 2017 | US |