`a2) Patent Application Publication co) Pub. No.: US 2006/0161861 Al
`Holecek et al. Jul. 20, 2006 (43) Pub. Date:
`
`
`
`US 20060161861A1
`
`(54) SYSTEM AND METHOD FOR VISUALLY
`BROWSING OF OPEN WINDOWS
`
`(22)
`
`Filed:
`
`Jan. 18, 2005
`
`Publication Classification
`
`(75)
`
`Inventors: Ales Holecek, Bellevue, WA (US);
`Charles W. Stabb, Seattle, WA (US);
`Hillel N. Cooperman, Sammamish, WA
`(US); Jeffrey W. Pettiross, Seattle, WA
`(US); Mark R. Ligameri, Snohomish,
`WA (US); Kanwal VedBrat, Seattle,
`WA (US); Donald J. Lindsay,
`Mountain
`View,
`CA (US
`oma oN,
`(US)
`Correspondence Address:
`BANNER & WITCOFF LTD.,
`ATTORNEYS FOR CLIENT NOS. 003797 &
`013797
`1001 G STREET , N.W.
`SUITE 1100
`WASHINGTON, DC 20001-4597 (US)
`
`(73) Assignee: Microsoft Corporation, Redmond, WA
`
`(21) Appl. No.:
`
`11/036,611
`
`(51)
`
`Int. CL.
`(2006.01)
`GO6F 17/00
`(52) U.S. Ch.
`eeeeseesencenes 715/782; 715/794; 715/796;
`715/797
`
`(57)
`ABSTRACT
`A method referred to as visual window browsing allows a
`user to browse through windows on their desktop. Aspects
`of the invention include responsive to a command, moving
`open windows to form a visual stack with the topmost
`window in the stack being in focus. Responsive to a browse
`the windowsin the visual stack can be browsed, where the
`topmost window movesto the bottom ofthe visual stack and
`the other windows movehigher in the stack, with the second
`highest window becoming the topmost window and being in
`focus. Successive browse commands causes this behavior to
`repeat allowing a user to cycle through each of the open
`windows.
`
`202
`
`212
`
`210
`
`208
`
`204 [49 OD 00 IEF| © winsee rie
`
`202
`
`| @ window Tithe
`
`h @ Window Tita
`
`{| @ Window tine
`
`Hf @ window Tite
`
`206
`
`1
`
`APPLE 1020
`
`APPLE 1020
`
`1
`
`
`
`Jul. 20, 2006 Sheet 1 of 12
`
`US 2006/0161861 Al
`
`L6L
`
`161
`
`Patent Application Publication
`
`961Oz”ti(wst~—<‘is~—s*ési
`
`suayvadsNOILVONdd¥
`
`YaLNIMdLNdLNoONILead
`YOLINOWTEL(WO)
`Wau1907SébWVeOud
`
`
`YYOMLAN4asnF1AVAOWSY-NONSaINGOWTNaVAOWAY
`
` LAYOWANYYOMLINZ9l
`30m2Tt=
`NOILVONdd¥WLISIG
`
`b8L“7769-
`SWVeD0ddS8bVYeANVo
`
`O8lvaudvquvOgAdy
` FOVAYSINIiWasHdldadORCI™oNIssaD0udWALSAS
`
`
`JOVIAYSLNI:AYOWSIN
`
`YYOMLENJOA-NON
`
`
`3OVSYSLNI3OVSMSLNIJOVSYSLNI
`
`
`
`LNNIAMOWAW“OA-NON.
`OLVLAYNODIA
`
`LZbaxSWWuDONd
`
`Zt
`
`-
`
`NOILVOMddV
`
`SINWYSOud
`
`°o=
`-
`
`
`
`AXOWAWWALSAS
`
`O€t
`
`frsola
`
`
`
`zer(Wve)
`
`Y3HLO
`
`2
`
`
`
`
`
`
`Patent Application Publication Jul. 20,2006 Sheet 2 of 12
`
`US 2006/0161861 Al
`
`db3YNSIS
`
`pufanfen
`
`AdODGN2e
`
` LNAWS3S
`
`
`
`OlSYNOSIA
`
`dbANIA
`
`
`
`L|soeyaqu)
`
`
`
`LNAWS3S3AGO9LSI
`
`Ad09GNz
`
`LINANSAS
`
`
`
`Z|BoRHaU]
`
`
`
`LINAW9S3009ANz
`
`
`
`LNANSAS3009ANZ
`
`(=)
`
` =LINAWS3S30091S1
`
`
`Q-AYNSIS
`
`3
`
`
`
`Patent Application Publication Jul. 20,2006 Sheet 3 of 12
`
`US 2006/0161861 Al
`
`9}SYNSIs
`
`/L)
`
`ub|SOBLO}U]
`
`GOeHO}UI
`
`}]e0eLe}U}
`
`
`
`iC]BOEYO}U|
`
`AdODGNZ
`
`LNSW93S
`
`l|
`
`
`
`qz|eceyeyu|
`
`Aqd09GNZ
`
`LINAWS3S
`
`ILSYNSISslaeZ]
`eoepequy-|
`
`LNAWSASA009AGNZ
`
`Jq09Lst
`
`LNANSSS
`
`4}SYNdld
`
`
`
`HtSYNoOls
`
`
`
`LNAWOAS3G00LSI
`
`(--‘Indjno
`
`
` ‘---'nduijasenbsY
`
`(leuonippe‘yndyno
`
`‘ynduljasenbs
`
`‘sso|Bulueaw
`
`L.
`
`4
`
`
`
`
`
`
`Patent Application Publication Jul. 20,2006 Sheet 4 of 12
`
`US 2006/0161861 Al
`
`AqGODLS}
`
`LNAWS3S
`
`
`
`LNAWS3S3000LSb
`
`MLAYNOIA
`AGOOGHe
`
`LNAWSAS
`
`AGODGNz2
`
`LNAWS3AS
`
`
`
` LNAWOAS3009ANZ=
` =JOVAYALNIADYOAIC
`
`rlAYNSIA
`
`LO
`
`5
`
`
`
`
`
`Patent Application Publication Jul. 20,2006 Sheet 5 of 12
`
`US 2006/0161861 Al
`
`(INTERFACES
`AOVAYALNIADYOAIC
`
`LINAWS3AS3009GN2
`
`
`LINAWS3S3d09LS/
`nn(—wrenracezn
`
`/YAMdNODLIP
`
`YslaedddsalNi
`
`TEANDAs
`
`AqO09LSI
`
`LNANSAS
`
`AqGODANZ
`
`LNAWSAS
`
`6
`
`
`
`
`
`
`Patent Application Publication Jul. 20,2006 Sheet 6 of 12
`
`US 2006/0161861 Al
`
`paleo
`
`
`
`eat)azi]ect
`
`
`
`yuauodwoyGNZ
`
`WESends
`
`
`
`(—YaMdWODLIP(——
`
`LNANOdWODOANZ2eae
`LIheoenena,
`
`
`7
`
`
`
`
`
`Patent Application Publication Jul. 20,2006 Sheet 7 of 12
`
`US 2006/0161861 Al
`
`C07OS
`
`002
`
`vOz
`
`
`
`:.eeq;802
`
`oSeeu¢enMoBtian@|aomae@|!~51m0,~
`
`eZ>\ce(LZ
`
`
`
`22ZOccLzZLZ
`
`L0z
`
`OZ
`
`8
`
`
`
`
`Patent Application Publication Jul. 20,2006 Sheet 8 of 12
`
`US 2006/0161861 Al
`
` :onMODUINA|0€Z=}Ove
`
`déOla
`|.erenceen
`
`
`
`
`
`LOZ“_\s\n=y0c("(arMOpUIAAFmdfannmopum@|]DILMOpLIM@®itsnusmonunn@|i|SULMOP@ifonmonuim@&|)@@e«@#2|
`
`COG
`
`fi
`
`ole
`
`Ole
`
`80¢
`
`90¢
`
`9
`
`
`
`
`
`
`Patent Application Publication Jul. 20,2006 Sheet 9 of 12
`
`US 2006/0161861 Al
`
`eae
`
`eTOO\CYUANNLS
`
`-aN
`
` JeOlA
`onumopuM@‘faneMOP@ionyMOPUIAR@®IlandMOpUIA@{BLBORLA@®}EhCOO°Cey
`
`902
`
`c0Z
`
`cle
`
`Ole
`
`802
`
`10
`
`10
`
`
`
`Patent Application Publication Jul. 20,2006 Sheet 10 of 12
`
`US 2006/0161861 Al
`
`LO¢
`
`vO0d902
`
`€Ola
`
`
`
`Tep,mopuimn“>H
`
`(ey,anTaperwtSeNea
`
`aa:ormopliananyMopun@®{onimopsa!apMopulay@®>nuopus@-Lt@eae©F:\‘at4
`
`
`Ny
`
`COC
`
`cle
`
`Ole
`
`802
`
`11
`
`11
`
`
`
`
`Patent Application Publication Jul. 20,2006 Sheet 11 of 12
`
`US 2006/0161861 Al
`
`Receive command toinitiate
`
`visual window browsing
`
`window in focus
`
`Determine Z-ordering of
`windowsfor browsing
`
`Display windowsin visual
`stack representing Z-
`ordering with topmost
`
`401
`
`402
`
`403
`
`407
`
`Preview contents of
`specific window?
`
`Reveal additional content
`for specified window
`
`
`
`NO
`
`405
`
`409
`
`NO
`
`End browsing and move
`windowsto their position
`prior to initiating visual
`browsing keeping the same
`
`415
`
`
`
`
`Move next window to be
`in focus to top of stack,
`move windowlast in focus
`to bottom of stack and
`move other windowsupin
`stack
`
`_
`
`FIG. 4
`
`12
`
`Browse to another
`window
`
`
`
`411 S/S
`
`Determine next window to
`*
`bein focus
`
`
`window in focus 413
`
`
`
`
`12
`
`
`
`Patent Application Publication Jul. 20,2006 Sheet 12 of 12
`
`US 2006/0161861 Al
`
`
`
`201
`
`FIG. 5
`
`13
`
`13
`
`
`
`US 2006/0161861 Al
`
`Jul. 20, 2006
`
`SYSTEM AND METHOD FOR VISUALLY
`BROWSING OF OPEN WINDOWS
`
`FIELD OF THE INVENTION
`
`[0001] Aspects of the present invention are directed gen-
`erally to window arrangements in an operating system. More
`particularly, aspects of the present invention are directed to
`a methodand system for configuring the open windowsin a
`user interface that will allow a user to readily browse
`multiple windows.
`
`BACKGROUND OF THE INVENTION
`
`Asthe use of computers in both the workforce and
`[0002]
`personal life has increased, so has the desire to allow for
`easier use of them. Many operating systems today utilize a
`windows based configuration of application programs.
`Information is displayed on a display screen in what appears
`to be several sheets of paper.
`
`[0003] When multiple windowsare openat the sametime,
`switching quickly to the desired window canbe difficult. For
`example,
`the desired window may be partially or fully
`occluded by other open windows. Also, the desired window
`may be minimized or hidden.
`
`[0004] Windowselection interfaces have been proposed to
`minimize the necessity to sort through the various open
`windows. Current versions of the Windowsbrand operating
`system by Microsoft Corporation include the Alt-Tab key
`combination, Task List and Taskbar, which when selected
`presents a list of open windowsin a representation different
`from the primary window. Similar user interfaces exist in
`MACOSX brand operating system by Apple Computing,
`Inc. of Cupertino, Calif. including Apple-Tab and the Dock
`in whicha list of windowsin are providedin a representation
`different from the primary window. Each of the aforemen-
`tioned user interfaces restate or reformulate the open win-
`dows into a type of list. These interfaces however, do not
`allow the user to view content of a window without the
`
`window beingselected.
`
`introduced
`Inc.
`[0005] Recently, Apple Computing,
`Exposé in the MAC OS X brand operating system. Exposé
`provides a user with the ability to display all open windows
`as thumbnails on the desktop. In operation, when the user
`types the F9 key, Exposetiles all the open windows. Namely,
`Exposé scales the windows downto a size such that all the
`open windowsare displayed in a non-overlapping form. In
`another aspect, Exposé provides a user with the ability to
`display view all open windowsin a particular application in
`a non-overlapping manner. Specifically, when the user types
`the F10 key, Exposetiles all of the open windowsfor the
`current application in a non-overlapping form while fading
`to a gray all of the open windows associated with other
`applications.
`
`[0006] While Expose allows the user to view open win-
`dows simultaneously, multiple windows are tiled on the
`screen, which can still lead to some confusion. It would be
`helpful to provide an interface which allowsa user to scan
`quickly through open windows, oneat a time.
`
`SUMMARY OF THE INVENTION
`
`According to one aspect of the invention, open windows can
`be presented in a visual stack representing a Z-ordering of
`the windows. In response, to a browse command, windows
`can be navigated through where each input causes the
`windowat the top of the visual stack to move to the bottom
`of the stack and the remaining windows to move up in the
`stack with the window previously secondin the visual stack
`being in focus. Successive browse commandscauses this
`behavior to repeat allowing a user to cycle through each of
`the open windows.
`
`BRIEF DESCRIPTION OF THE DRAWINGS
`
`[0008] The foregoing summary ofthe invention, as well as
`the following detailed description of illustrative embodi-
`ments, is better understood when read in conjunction with
`the accompanying drawings, which are included by way of
`example, and not by way of limitation with regard to the
`claimed invention.
`
`[0009] FIG. 1Aillustrates a schematic diagram of a gen-
`eral-purpose digital computing environment in which cer-
`tain aspects of the present invention may be implemented;
`
`[0010] FIGS. 1B through 1M show a general-purpose
`computer environment supporting one or more aspects of the
`present invention;
`
`[0011] FIGS. 2A-2C illustrate a sequence of display
`screens to describe visual window browsing in accordance
`with at least one aspect of the present invention;
`
`FIG.3 illustrates a display screen showing visual
`[0012]
`window browsing in accordance with another aspect of the
`present invention; and
`
`FIG.4 is a flowchart of an illustrative example of
`[0013]
`a methodfor performing visual window browsing in accor-
`dance with at least one aspect of the present invention.
`
`FIG.5 is an illustrative display screen showing a
`[0014]
`configuration according to another aspect of the present
`invention.
`
`DETAILED DESCRIPTION OF ILLUSTRATIVE
`EMBODIMENTS
`
`In the following description of various illustrative
`[0015]
`embodiments, reference is made to the accompanying draw-
`ings, which form a part hereof, and in which is shown, by
`way of illustration, various embodiments in which the
`invention maybe practiced.It is to be understood that other
`embodiments may beutilized and structural and functional
`modifications may be made without departing from the
`scope of the present invention.
`
`[0016] FIG. 1 illustrates an example of a suitable com-
`puting system environment 100 on which the invention may
`be implemented. The computing system environment 100 is
`only one example of a suitable computing environment and
`is not intended to suggest any limitation as to the scope of
`use or functionality of the invention. Neither should the
`computing system environment 100 be interpreted as having
`any dependency nor requirement relating to any one or
`combination of components illustrated in the exemplary
`computing system environment 100.
`
`[0007] There is therefore a need for a method to allow
`users to quickly scan through open windowsoneat a time.
`
`[0017] The invention is operational with numerous other
`general purpose or special purpose computing system envi-
`
`14
`
`14
`
`
`
`US 2006/0161861 Al
`
`Jul. 20, 2006
`
`ronments or configurations. Examples of well known com-
`puting systems, environments, and/or configurations that
`maybe suitable for use with the invention include, but are
`not limited to, personal computers, server computers, hand-
`held or laptop devices, multiprocessor systems, micropro-
`cessor-based systems, set top boxes, programmable con-
`sumerelectronics, network PCs, minicomputers, mainframe
`computers, distributed computing environments that include
`any of the above systems or devices, and the like.
`
`[0018] The invention may be described in the general
`context of computer-executable instructions, such as pro-
`gram modules, being executed by a computer. Generally,
`program modules include routines, programs, objects, com-
`ponents, data structures, etc. that perform particular tasks or
`implementparticular abstract data types. The invention may
`also be practiced in distributed computing environments
`wheretasks are performed by remote processing devices that
`are linked through a communications network. In a distrib-
`uted computing environment, program modules may be
`located in both local and remote computer storage media
`including memory storage devices.
`
`[0019] With reference to FIG. 1A, an exemplary system
`for implementing the invention includes a general-purpose
`computing device in the form of a computer 110. Compo-
`nents of computer 110 may include, but are not limited to,
`a processing unit 120, a system memory 130, and a system
`bus 121 that couples various system components including
`the system memory to the processing unit 120. The system
`bus 121 may be any of several types of bus structures
`including a memory bus or memory controller, a peripheral
`bus, and a local bus using any of a variety of bus architec-
`tures. By way of example, and not limitation, such archi-
`tectures include Industry Standard Architecture (ISA) bus,
`Micro Channel Architecture (MCA) bus, Enhanced ISA
`(EISA) bus, Video Electronics Standards Association
`(VESA)local bus, and Peripheral Component Interconnect
`(PCI) bus also known as Mezzanine bus.
`
`[0020] Computer 110 typically includes a variety of com-
`puter readable media. Computer readable media can be any
`available media that can be accessed by computer 110 and
`includesboth volatile and nonvolatile media, removable and
`non-removable media. By way of example, and not limita-
`tion, computer readable media may comprise computer
`storage media and communication media. Computer storage
`media includes volatile and nonvolatile, removable and
`non-removable media implemented in any methodor tech-
`nology for storage of information such as computer readable
`instructions, data structures, program modulesor other data.
`Computer storage media includes, but is not limited to,
`random access memory (RAM), read only memory (ROM),
`electronically erasable programmable read only memory
`(EEPROM), flash memory or other memory technology,
`CD-ROM,digital versatile disks (DVD)or other optical disk
`storage, magnetic cassettes, magnetic tape, magnetic disk
`storage or other magnetic storage devices, or any other
`medium which can be usedto store the desired information
`and which can accessed by computer 110. Communication
`media typically embodies computer readable instructions,
`data structures, program modules or other data in a modu-
`lated data signal such as a carrier wave or other transport
`mechanism and includes any information delivery media.
`The term “modulated data signal” means a signal that has
`one or moreof its characteristics set or changed in such a
`
`manner as to encode information in the signal. By way of
`example, and not limitation, communication media includes
`wired media such as a wired network or direct-wired con-
`nection, and wireless media such as acoustic, RF, infrared
`and other wireless media. Combinations of the any of the
`above should also be included within the scope of computer
`readable media.
`
`[0021] The system memory 130 includes computer stor-
`age media in the form of volatile and/or nonvolatile memory
`such as ROM 131 and RAM 132. A basic input/output
`system 133 (BIOS), containing the basic routines that help
`to transfer information between elements within computer
`110, such as during start-up, is typically stored in ROM 131.
`RAM 132typically contains data and/or program modules
`that are immediately accessible to and/or presently being
`operated on by processing unit 120. By way of example, and
`not limitation, FIG. 1A illustrates operating system 134,
`application programs 135, other program modules 136, and
`program data 137.
`
`[0022] The computer 110 may also include other remov-
`able/non-removable, volatile/nonvolatile computer storage
`media. By way of example only, FIG. 1A illustrates a hard
`disk drive 141 that reads from or writes to non-removable,
`nonvolatile magnetic media, a magnetic disk drive 151 that
`reads from or writes to a removable, nonvolatile magnetic
`disk 152, and an optical disc drive 155 that reads from or
`writes to a removable, nonvolatile optical disc 156 such as
`a CD ROMorother optical media. Other removable/non-
`removable, volatile/nonvolatile computer storage media that
`can be used in the exemplary operating environment
`include, but are not limited to, magnetic tape cassettes, flash
`memory cards, digital versatile disks, digital video tape,
`solid state RAM, solid state ROM,and the like. The hard
`disk drive 141 is typically connected to the system bus 121
`through a non-removable memory interface such as interface
`140, and magnetic disk drive 151 and optical disc drive 155
`are typically connected to the system bus 121 by a remov-
`able memory interface, such as interface 150.
`
`[0023] The drives and their associated computer storage
`media discussed aboveandillustrated in FIG. 1A, provide
`storage of computer readable instructions, data structures,
`program modules and other data for the computer 110. In
`FIG.1A, for example, hard disk drive 141 is illustrated as
`storing operating system 144, application programs 145,
`other program modules 146, and program data 147. Note
`that these components can either be the sameasor different
`from operating system 134, application programs 135, other
`program modules 136, and program data 137. Operating
`system 144, application programs 145, other program mod-
`ules 146, and program data 147 are given different numbers
`here to illustrate that, at a minimum,
`they are different
`copies. A user may enter commandsand information into the
`computer 110 through input devices such as a digital camera
`163, a keyboard 162, and pointing device 161, commonly
`referred to as a mouse, trackball or touch pad. Other input
`devices (not shown) may include a pen, stylus andtablet,
`microphone, joystick, game pad, satellite dish, scanner, or
`the like. These and other input devices are often connected
`to the processing unit 120 through a userinput interface 160
`that is coupled to the system bus 121, but may be connected
`by other interface and busstructures, such asa parallel port,
`gameport or a universal serial bus (USB). A monitor 191 or
`other type of display device is also connected to the system
`
`15
`
`15
`
`
`
`US 2006/0161861 Al
`
`Jul. 20, 2006
`
`bus 121 via an interface, such as a video interface 190. In
`addition to the monitor, computers may also include other
`peripheral output devices such as speakers 197 and printer
`196, which may be connected through an output peripheral
`interface 195.
`
`[0024] The computer 110 may operate in a networked
`environment using logical connections to one or more
`remote computers, such as a remote computer 180. The
`remote computer 180 may be a personal computer, a server,
`a router, a network PC, a peer device or other common
`network node, and typically includes many or all of the
`elements described above relative to the computer 110,
`although only a memory storage device 181 has been
`illustrated in FIG. 1A. The logical connections depicted in
`FIG.1A include a local area network (LAN) 171 and a wide
`area network (WAN) 173, but may also include other
`networks. Such networking environments are commonplace
`in offices, enterprise-wide computer networks, intranets and
`the Internet.
`
`[0025] When used in a LAN networking environment, the
`computer 110 is connected to the LAN 171 through a
`network interface or adapter 170. When used in a WAN
`networking environment,
`the computer 110 typically
`includes a modem 172 or other means for establishing
`communications over the WAN 173, such as the Internet.
`The modem 172, which may beinternal or external, may be
`connected to the system bus 121 via the user input interface
`160, or other appropriate mechanism. In a networked envi-
`ronment, program modules depicted relative to the computer
`110, or portions thereof, may be stored in the remote
`memory storage device. By way of example, and not limi-
`tation, FIG. 1A illustrates remote application programs 185
`as residing on memory device 181. It will be appreciated that
`the network connections shown are exemplary and other
`means ofestablishing a communications link between the
`computers may be used.
`
`It will be appreciated that the network connections
`[0026]
`shown are exemplary and other means of establishing a
`communications link between the computers can be used.
`The existence of any of various well-knownprotocols such
`as TCP/IP, Ethernet, FTP, HTTP andthe like is presumed,
`and the system can be operated in a client-server configu-
`ration to permit a user to retrieve web pages from a web-
`based server. Any of various conventional web browsers can
`be used to display and manipulate data on web pages.
`
`[0027] A programming interface (or more simply, inter-
`face) may be viewed as any mechanism,process, protocol
`for enabling one or more segment(s) of code to communi-
`cate with or access the functionality provided by one or more
`other segment(s) of code. Alternatively, a programming
`interface may be viewed as one or more mechanism(s),
`method(s), function call(s), module(s), object(s), etc. of a
`componentof a system capable of communicative coupling
`to one or more mechanism(s), method(s), function call(s),
`module(s), etc. of other component(s). The term “segment of
`code”in the preceding sentence is intended to include one or
`more instructions or lines of code, and includes, e.g., code
`modules, objects, subroutines, functions, and so on, regard-
`less of the terminology applied or whether the code seg-
`ments are separately compiled, or whether the code seg-
`ments are provided as source, intermediate, or object code,
`whether the code segments are utilized in a runtime system
`
`or process, or whether they are located on the same or
`different machines or distributed across multiple machines,
`or whetherthe functionality represented by the segments of
`code are implemented wholly in software, wholly in hard-
`ware, or a combination of hardware and software.
`
`a programming interface may be
`[0028] Notionally,
`viewed generically, as shown in FIG. 1B or FIG. 1C. FIG.
`1B illustrates an interface Interfacel as a conduit through
`which first and second code segments communicate. FIG.
`1C illustrates an interface as comprising interface objects I1
`and 12 (which may or maynotbepart ofthefirst and second
`code segments), which enable first and second code seg-
`ments of a system to communicate via medium M.In the
`view of FIG. 1C, one may considerinterface objects I1 and
`I2 as separate interfaces of the same system and one may
`also consider that objects 11 and 12 plus medium M comprise
`the interface. Although FIGS. 1B and 1C show bi-direc-
`tional flow and interfaces on each side of the flow, certain
`implementations may only have information flow in one
`direction (or no information flow as described below) or
`may only have an interface object on one side. By way of
`example, and not
`limitation,
`terms such as application
`programming interface (API), entry point, method, function,
`subroutine, remote procedure call, and component object
`model (COM)interface, are encompassed within the defi-
`nition of programming interface.
`
`[0029] Aspects of such a programming interface may
`include the method wherebythefirst code segment transmits
`information (where “information” is used in its broadest
`sense and includes data, commands, requests, etc.) to the
`second code segment; the method whereby the second code
`segment
`receives
`the information;
`and the structure,
`sequence, syntax, organization, schema, timing and content
`of the information. In this regard, the underlying transport
`medium itself may be unimportant to the operation of the
`interface, whether the medium be wired or wireless, or a
`combination of both, as long as the information is trans-
`ported in the manner defined by the interface. In certain
`situations, information may not be passed in one or both
`directions in the conventional sense, as the information
`transfer may be either via another mechanism (e.g. infor-
`mation placed in a buffer, file, etc. separate from information
`flow between the code segments) or non-existent, as when
`one code segment simply accesses functionality performed
`by a second code segment. Anyorall of these aspects may
`be importantin a givensituation, e.g., depending on whether
`the code segments are part of a system in a loosely coupled
`or tightly coupled configuration, and so this list should be
`considered illustrative and non-limiting.
`
`[0030] This notion ofa programminginterface is known to
`those skilled in the art and is clear from the foregoing
`detailed description of the invention. There are, however,
`other ways to implement a programming interface, and,
`unless expressly excluded,
`these too are intended to be
`encompassed by the claims set forth at the end of this
`specification. Such other ways may appear to be more
`sophisticated or complex than the simplistic view of FIGS.
`1B and 1C, but they nonetheless perform a similar function
`to accomplish the same overall result. We will now briefly
`describe someillustrative alternative implementations of a
`programming interface.
`
`16
`
`16
`
`
`
`US 2006/0161861 Al
`
`Jul. 20, 2006
`
`A. Factoring
`
`to
`[0031] A communication from one code segment
`another may be accomplished indirectly by breaking the
`communication into multiple discrete communications. This
`is depicted schematically in FIGS. 1D and 1E. As shown,
`some interfaces can be described in termsof divisible sets of
`
`functionality. Thus, the interface functionality of FIGS. 1B
`and 1C may befactored to achieve the sameresult, just as
`one may mathematically provide 24, or 2 times 2 times 3
`times 2. Accordingly, as illustrated in FIG. 1D, the function
`provided by interface Interfacel may be subdivided to
`convert the communications of the interface into multiple
`interfaces Interface1A, Interface1B, Interface1C, etc. while
`achieving the same result. As illustrated in FIG. 1K, the
`function provided by interface I1 may be subdivided into
`multiple interfaces I1a, 11, I1c, etc. while achieving the
`same result. Similarly,
`interface 12 of the second code
`segment which receives information from the first code
`segment may be factored into multiple interfaces I2a, 126,
`2c, etc. When factoring, the numberof interfaces included
`with the Ist code segment need not match the number of
`interfaces included with the 2nd code segment. In either of
`the cases of FIGS. 1D and 1K, the functional spirit of
`interfaces Interfacel and I1 remain the same as with FIGS.
`1B and 1C, respectively. The factoring of interfaces may
`also follow associative, commutative, and other mathemati-
`cal properties such that the factoring may be difficult to
`recognize. For instance, ordering of operations may be
`unimportant, and consequently, a function carried out by an
`interface may be carried out well in advance of reaching the
`interface, by another piece of codeor interface, or performed
`by a separate component of the system. Moreover, one of
`ordinary skill in the programming arts can appreciate that
`there are a variety of ways of making different function calls
`that achieve the sameresult.
`
`B. Redefinition
`
`In somecases, it may be possible to ignore, add or
`[0032]
`redefine certain aspects (e.g., parameters) of a programming
`interface while still accomplishing the intended result. This
`is illustrated in FIGS. 1F and 1G. For example, assume
`interface Interfacel of FIG. 1B includes a function call
`
`Square (input, precision, output), a call that includes three
`parameters, input, precision and output, and which is issued
`from the 1st Code Segmentto the 2nd Code Segment. If the
`middle parameter precision is of no concer in a given
`scenario, as shown in FIG. 1F,
`it could just as well be
`ignored or even replaced with a meaningless (in this situa-
`tion) parameter. One may also add an additional parameter
`of no concern.In either event, the functionality of square can
`be achieved, so long as output is returned after input is
`squared by the second code segment. Precision may very
`well be a meaningful parameter to some downstream or
`other portion of the computing system; however, onceit is
`recognized that precision is not necessary for the narrow
`purpose of calculating the square,
`it may be replaced or
`ignored. For example, instead of passing a valid precision
`value, a meaningless value such as a birth date could be
`passed without adversely affecting the result. Similarly, as
`shown in FIG. 1G,interface I1 is replaced by interface I1’,
`redefined to ignore or add parameters to the interface.
`Interface I2 may similarly be redefined as interface 12',
`redefined to ignore unnecessary parameters, or parameters
`that may be processed elsewhere. The point here is that in
`
`some cases a programming interface may include aspects,
`such as parameters, which are not needed for some purpose,
`and so they may be ignored or redefined, or processed
`elsewhere for other purposes.
`
`C. Inline Coding
`
`It may also be feasible to merge someor all of the
`[0033]
`functionality of two separate code modules such that the
`“interface” between them changes form. For example, the
`functionality of FIGS. 1B and 1C maybe converted to the
`functionality of FIGS. 1H and 11,respectively. In FIG. 1H,
`the previous 1st and 2nd Code Segments of FIG. 1B are
`merged into a module containing both of them. In this case,
`the code segments maystill be communicating with each
`other but the interface may be adapted to a form which is
`more suitable to the single module. Thus, for example,
`formal Call and Return statements may no longer be nec-
`essary, but similar processing or response(s) pursuant to
`interface Interface1 maystill be in effect. Similarly, shown
`in FIG.11, part (or all) of interface I2 from FIG. 1C may
`be written inline into interface [1 to form interface J1". As
`illustrated,
`interface ]2 is divided into I2a and 124, and
`interface portion I2a@ has been codedin-line with interface I1
`to form interface I1". For a concrete example, consider that
`the interface 11 from FIG. 1C performs a function call
`square (input, output), which is received by interface I2,
`whichafter processing the value passed with input (to square
`it) by the second code segment, passes back the squared
`result with output. In such a case, the processing performed
`by the second code segment (squaring input) can be per-
`formed by the first code segment without a call
`to the
`interface.
`
`D. Divorce
`
`to
`[0034] A communication from one code segment
`another may be accomplished indirectly by breaking the
`communication into multiple discrete communications. This
`is depicted schematically in FIGS. 1J and 1K. As shown in
`FIG. 1J, one or more piece(s) of middleware (Divorce
`Interface(s), since they divorce functionality and/or interface
`functions from the original interface) are provided to convert
`the communications on the first
`interface, Interfacel,
`to
`conform them to a different interface, in this case interfaces
`Interface2A, Interface2B and Interface2C. This might be
`done, e.g., where there is an installed base of applications
`designed to communicate with, say, an operating system in
`accordance with an Interfacel protocol, but then the oper-
`ating system is changed to use a different interface, in this
`case interfaces Interface2A, Interface2B and Interface2C.
`The pointis that the original interface used by the 2nd Code
`Segment is changed suchthat it is no longer compatible with
`the interface used by the 1st Code Segment, and so an
`intermediary is used to make the old and new interfaces
`compatible. Similarly, as shown in FIG. 1K, a third code
`segment can be introduced with divorce interface DI1 to
`receive the communications from interface I1 and with
`divorce interface DI2 to transmit the interface functionality
`to, for example, interfaces 12a and 126, redesigned to work
`with DI2, but to provide the same functional result. Simi-
`larly, DI1 and DI2 may work together to translate the
`functionality of interfaces [1 and 12 of FIG. 1C to a new
`operating system, while providing the sameor similar func-
`tional result.
`
`17
`
`17
`
`
`
`US 2006/0161861 Al
`
`Jul. 20, 2006
`
`E. Rewriting
`
`is to dynamically
`[0035] Yet another possible variant
`rewrite the code to replace the interface functionality with
`something else but which achieves the same overall result.
`For example, there may be a system in which a code segment
`presented in an intermediate language (e.g. Microsoft IL,
`Java ByteCode, etc.) is provided to a Just-in-Time (JIT)
`compiler or interpreter in an executio