The present disclosure relates generally to the field of cloud computing; more particularly, to automated systems and methods for visualizing the interaction between a large number of performance datapoints on a website.
For years, enterprises and developers have sought an easy and affordable way to use cloud computing as a way to load and performance test their web-based applications. Business enterprises are also interested in real user measurement (RUM) data analysis that captures and collects data about present, real user experiences when actual users visit and navigate through a website or web application. Traditional analytical tools have been able to provide data analysis solutions that collect data about past events, it has been more problematic to deliver real-time business intelligence information based on actual mobile and desktop user experience as it occurs.
Technical professionals and business managers need a comprehensive solution to test, monitor and measure real user behavior to ensure customers get the most out of their app or site—whether it's mobile, on the web, or both. For an e-Commerce business or website owner, capturing and properly analyzing RUM information from a website has been a daunting task. In recent years, developers have attempted to solve this problem by creating software and analytic tools that can monitor real user experiences on websites in real-time. By way of example, U.S. Pat. No. 9,450,834 teaches a cloud-based RUM system and method for websites and web applications that provides a user with a graphical view that shows real-time performance information obtained from RUM data.
One of the difficulties with such systems is collecting and presenting efficient visualizations of RUM data obtained from the Web. Due to the very large volume of data collected, often involving tens of millions or even billions of user measurements, visualizing the interactions between such a large numbers of datapoints on a website can quickly exceed limits on memory, network capacity, CPU resources, and available pixels of display screens. Rendering such large numbers of RUM data beacons or nodes is extremely memory intensive. In addition, calculating the interactions between nodes within and across different beacon clusters is typically an O(n2) algorithm, which slows down CPU performance with the square of the number of nodes (n). Bandwidth constraints arise as the amount of data that needs to be transferred over the network to the client increases. Furthermore, even on a large display monitor having a resolution of 2560×1440 pixels, approximately 400,000 data points all spread out would completely cover the screen, making it virtually impossible for the user to notice any patterns.
The present disclosure will be understood more fully from the detailed description that follows and from the accompanying drawings, which however, should not be taken to limit the invention to the specific embodiments shown, but are for explanation and understanding only.
In the following description specific details are set forth, such as data analysis platforms, method steps, algorithms, metrics, statistics, formulas, etc., in order to provide a thorough understanding of the subject matter disclosed herein. However, persons having ordinary skill in the relevant arts will appreciate that these specific details may not be needed to practice the present invention. It should also be understood that the elements in the FIGS. are representational, and are not drawn to scale in the interest of clarity.
References throughout this description to “one embodiment”, “an embodiment”, “one example” or “an example” means that a particular feature, structure or characteristic described in connection with the embodiment or example is included in at least one embodiment. The phrases “in one embodiment”, “in an embodiment”, “one example” or “an example” in various places throughout this description are not necessarily all referring to the same embodiment or example. Furthermore, the particular features, structures or characteristics may be combined in any suitable combinations and/or sub-combinations in one or more embodiments or examples.
In the context of the present application, the term “cloud” broadly refers to a collection of machine instances, storage and/or network devices that work together in concert. The term “cloud computing” refers to a paradigm in which machine, storage, and application resources exist on a “cloud” of servers. In cloud computing shared resources, software and information are provided on-demand, like a public utility, via the Internet. Thus, cloud computing provides computation, data access, and storage resources without requiring users to know the location and other physical details of the computing infrastructure.
The term “server” broadly refers to any combination of hardware or software embodied in a computer designed to provide services to client devices or processes. A server therefore can refer to a computer that runs a server operating system from computer-executable code stored in a memory, and which is provided to the user as a virtualized or non-virtualized machine; it can also refer to any software or dedicated hardware capable of providing computing services. A web server is an information technology that processes requests via HTTP, the basic protocol used to distribute information on the World Wide Web. A webpage is a web document that is suitable for the World Wide Web. A web browser running on a client or user computing device displays a web page on a monitor or mobile device screen.
In the context of the present disclosure, a “mobile computing device” or “mobile device” (for short) refers to any one of a number of different portable electronic devices having a touch-sensitive display with a graphical user interface (GUI), one or more processors, memory and one or more modules, programs or sets of instructions for performing methods associated with the operations described herein. A mobile computing device typically runs on an operating system executed on one or more processors, and may also run one or more applications installed or resident in memory (e.g., firmware, RAM, EEPROM, etc.) In some embodiments, the mobile computing device may provide a plurality of functions including wireless communication, thereby allowing a user of the mobile device access data and information via connection to the Internet. Mobile computing devices include smartphones, tablet computers, wearable computers, ultra-mobile PCs, personal digital assistants, other hand-held devices, as well as other mobile computers (e.g., carputers) that have touch screen interfaces with wireless capabilities.
A “load time” of a webpage is defined as the time (usually in milliseconds or seconds) from the start of the page navigation to the Page Onload event, i.e., when the webpage is considered ready.
The term “real-time” refers to a level of computer responsiveness that a user senses as sufficiently immediate or that enables the computer to keep up with some external process (for example, to present visualizations of aggregated user session paths that constantly change responsive to new beacon data). Thus, real-time is a mode of computer operation in which the computer collects data, analyzes or computes with the data, reports (e.g., visually displays) and/or stores the results nearly simultaneously, i.e., within milliseconds or a few seconds (e.g., 1-10 seconds) of measurements being beaconed, or uploaded from a database, to a server.
A “mouseover” or “mouse hover” is computer function in which one or more images or hyperlinks may be generated or activated when a user moves or “hovers” the cursor or pointer over at least one of a node, cluster or link appearing in a web browser window, usually with a mouse, but also possible using a digital pen or touch command.
In the context of the present disclosure, the term “beacon” refers to data related to a user's experience on a particular website or web application collected by a library running on the browser of a client device, and sent to a server (e.g., a collector server) via Hypertext Transfer (or Transport) Protocol (HTTP), or some other protocol. In the case of a mobile app, the data gathered may be based on definitions contained in a configuration file that is periodically downloaded to the mobile device running the mobile app. For example, every user who runs a particular mobile app on their mobile device may also automatically download a configuration file every few minutes that defines the various metrics and/or timers to be gathered and beaconed back to a server from the user's mobile device in real-time as the user runs or uses the mobile app. In the case of a website, the library may, in one embodiment, be a JavaScript library running on the browser of a client device.
A graphical representation of a beacon is also referred to as a “node”. A graphical representation of a group of closely-related beacons is commonly referred to as a “cluster” or “cell”. The relatedness of a given dimension as between a pair of beacons is depicted graphically by a line, also known as an “edge” or “link”, connecting the two beacons or nodes.
The server receiving the beacon information may aggregate that data along with similar data received from other users accessing the same website, web application, or mobile application. Any HTTP headers sent by the browser as part of the HTTP protocol may also be considered part of the beacon. A beacon may therefore be thought of as a page view on a website or application, but without a corresponding page. For every user who visits that website, the browser running the library on the user's client device measures various metrics (e.g., webpage load time) and records data that is then sent or “beaconed” back to a results server in real-time as the user navigates through or uses the website or application.
An “mPulse™ domain” refers to a web domain of a client or customer of a data analysis platform or program that provides an analytic dashboard window with visual information from real user measurement (RUM) data captured, collected and aggregated by a server-based system. The RUM data is typically beaconed from a user's mobile device, or other computing device, to a results server that collects and aggregates the data. The results server, or another server, may also perform statistical analysis on the RUM data, e.g., calculate an average or median load time.
In the context of the present disclosure, a “page group” refers to a logical collection of related webpages from a website. Page groups are defined by the website stakeholders, business analysts, operations engineers, or anyone else who may be an mPulse end user. For example, a typical partition of an online retailer's website might have the homepage(s) put into a page group called “Homepage”, the product pages of a group called “Product Page”, the search result pages in a group called “Search Results”, etc.
A “message” generally refers to a unit of data that can be sent via an electronics communications network, e.g., the Internet, to another computational or communications system or device, e.g., to a server. By way of example, a message could represent a communication sent to a queuing system, a REST call, or a Hypertext Transfer Protocol (HTTP) request. A message could also be instantiated entirely or partially as a single operation, such as a web service call in any one of a variety of forms, e.g., XML, JMS, HTML, JSON, etc. A “message clip” (or “clip” for short) comprises a set of one or more messages that includes a specification of the location, timing and/or dependencies of objects or elements specified within that set of messages. A clip typically comprises a plurality (e.g., hundreds or thousands) of sequenced messages that form part of a larger load test composition.
In one embodiment, a system, method, and computer program product for efficiently visualizing commonalities among large numbers of different types of beacons is provided. The commonalities may be expressed in terms of a variety of different dimensions, which could include geographic location, browser, operating system (OS) of the user's client device, webpage performance, size (bytes), network, JavaScripts, or anything else that can be described about a webpage or client device. The visualization provides a quick way to determine patterns among clusters of beacons or nodes for a website or web application. The visualization allows a viewer to easily identify patterns that could lead to performance issues that would not be apparent or visible to a person just looking at the beacon data itself.
In one embodiment, an animated visualization is generated by execution of a computer-implemented algorithm on an entire dataset of beacons collected and stored in a database over a given time period (e.g., weeks, months, etc.). Execution of the algorithm creates an animated visualization that accurately and proportionately represents all beacons across the entire dataset, but with a markedly reduced number of nodes and links, thereby reducing memory usage, network utilization (bandwidth), and CPU usage.
In one embodiment, performance gains are achieved through an algorithm that reduces the number of nodes rendered on the display screen. Further improvement is achieved utilizing another algorithm that reduces the number of links between nodes, which reduces the number of nodes that interact with each other. The resulting data structure is rendered in a sequence of visualizations as a force-directed chart that moves all beacons/nodes into relative position on a display screen.
In one embodiment, a convex hull is drawn around all points in a cluster of beacons, which makes the visualization clearer and more easily comprehensible. In another embodiment, labels are rendered using a separate force-directed graph. In one embodiment, the beacons or nodes are rendered as circles, with the radius of the circle being based on the complexity of the beacon, which may include byte size, node count, script count and image count. In a specific embodiment, the circles are colored-coded based on beacon performance (e.g., webpage load time).
The sequence illustrated in
Note that although the example animated sequence is shown in six frames/drawings, in actual implementation the number of iterations where the display screen changes may be consist of a greater or fewer number of screen changes. In one implementation, the movement and positioning of the nodes, clusters, and links may appear to change continuously until the visualization achieves a stable equilibrium. In one embodiment, the animated sequence is generated from historical data. In another embodiment, the animated sequence is generated in real-time, based on real-time mPulse beacon data. In yet another embodiment, the animated sequence is initially generated from historical data (e.g., the past 30 days) and then is augmented with real-time mPulse beacon data, so that the visualization may continue to change over time.
It is appreciated that the computer program executing the algorithm on a server that generates the visualization has access to the entire dataset of beacons over a given time period, but the number of nodes 11 sent from the server to the client, and which are actually rendered in window 10 is greatly reduced. That is, to reduce clutter and improve the efficiency of the animation, only a representative subset of all available beacons is rendered. This rendering approach takes advantage of the fact that the human eye cannot easily discern between two very large numbers (e.g., 40,000 versus 400,000) of small objects even if they differ by orders of magnitude. The algorithm for reducing the number of nodes sent from the server to the client device is discussed below in connection with
It should also be understood that the initial visualization shown in
It is further appreciated that the distribution of nodes 11 shown in
Beacons are clustered into groups or cells based on their relatedness. For instance, one cluster may consist of beacons collected from client devices running iOS on Mobile Safari. Another cluster may consist of beacons from Android OS on Chrome Mobile, etc. In one embodiment, methods such as K-Means, K-Medoids, and Density-Based Spatial Clustering of Applications with Noise (DBSCAN) may be used to turn a large number of web performance beacons into a plurality of clusters. The clusters for the client side visualization may be created by a server side process using any suitable clustering method.
In one embodiment, for each cluster, a single representative node is identified and marked as immutable. For example, if a group or cluster consists of Chrome users on Windows OS from California, the representative node may be selected as the node having a webpage load time that is closest to the average or median load time for that group. Alternatively, the representative node may be selected as one that is closest to the median DOM size, or some other dimension.
All cluster representative nodes are each assigned a high negative charge of −850 units. All nodes within a given cluster are each assigned a negative charge between −10 to −40 units, based on their relative complexity. The link distance between unrelated clusters is set to 800 units. The link distance between related clusters is set to 1 unit. The link strength for related beacons is set to 1 unit. The link strength for unrelated beacons is set to 0.2 units. The center of the visualization (i.e., the center of the browser window) is assigned an elastic force that simulates a gravitational attraction between all of the nodes and a center of the visualization. This attractive force works in a similar fashion to having an invisible spring between each beacon or node and the center of the visualization. The purpose of this simulated gravitational attraction is to prevent nodes from “escaping” from the visualization or display screen. It is appreciated that in other embodiments different force and charge units may be assigned to the nodes and links.
In a specific embodiment, three different laws of physics are then applied to all nodes sent to the client to determine their relative position on the display screen of the client device. These laws include: (1) Newton's law of gravitational attraction that pulls all nodes towards the center, e.g., https://en.wikipedia.org/wiki/Newton's_law_of_universal_gravitation; (2) Coulomb's inverse-square law for the forces that push apart similarly charged particles, e.g., https://en.wikipedia.org/wiki/Coulomb's_law; and (3) Hooke's law of elasticity for the force required to pull apart particles linked by an elastic band, e.g., https://en.wikipedia.org/wiki/Hook's_law.
Persons of skill in the art will understand that application of these laws and forces allows unrelated clusters to pull apart from each other, while related clusters stay relatively close together, and related beacons within a given cluster stay even closer. Given the complexity of calculating the above forces between large numbers of nodes, the process may be performed iteratively over the interactions. In one embodiment, the iterations are performed using Verlet Integration until the forces reach a stable state. A variety of methods may be utilized for calculating the forces, e.g., http://users.monash.edu/˜tdwyer/Dwyer2009FastConstraints.pdf, which provides a scalable technique for graph layout, and http://www.gamasutra.com/resource_guide/20030121/jacobson_pfv.htm, which provides an approach to physically-based modeling that is well-suited for interactive use. In a specific embodiment, the interactions between distant clusters is reduced using a Barnes-Hut simulation which treats all distant points in a certain direction as being a single cumulative point. This has the effect of reducing the algorithmic complexity from O(n2) to an O(n log n).
Continuing with the animated sequence,
Persons of skill will appreciate that even though clusters 17-26 are reasonably segregated, without the addition of the convex hulls it may be difficult to tell where one cluster ends and another cluster starts. In other words, the addition of the convex hulls makes the visualization dearer.
The convex hulls may be drawn using a variety of methods. In one embodiment, each convex hull is drawn around all points in the cluster using a method described in an article found at https://en.wikipedia.org/wiki/Convex_hull. In a specific embodiment the hull's transparency is set to a value of 0.6, and the corners are rounded to make it appear smooth, which helps with clarity in the event that adjacent clusters overlap. As discussed above, the interior of the hull is colored based on the median load time of all beacons contained in the cluster. In one embodiment, convex hulls are only drawn around clusters that have more than 0.12% of all nodes displayed in window 10. This enhances the appearance of the largest clusters.
Although not shown in
The example of
As discussed above, to avoid having too much activity early on while beacons are in a more chaotic state, rendering of the hulls, labels and label links is delayed until the visualization is in a more stable state. For instance, in one embodiment labels and links are drawn when the state activity drops below a predetermined activity threshold, wherein clusters do not move much relative to each other. Label positions may be calculated throughout the animated sequence of visualizations, but they are only made visible when the visualization is close to an equilibrium state.
Each of the labels shown in
As discussed previously, each beacon within a cluster is colored based on its load time, and sized based on the DOM size of the page or page group they represent. The cluster hull is colored based on the median load time of all beacons within the cluster. If a beacon within the cluster has a color too similar to the hull color, then that beacon includes a translucent black border to clarify its position. Text labels are placed above all clusters, and all text has a translucent outline to make the text more legible when it overlaps other content. All lines that connect two clusters or labels to clusters are placed below the hull, the text and beacons so that the most important information is in the foreground. The line that joins labels to their clusters is positioned on one end at the weighted center of beacons in the cluster, while the other end is positioned within the label near the text edge or corner closest to the cluster it is related to. Labels repel each other to ensure they do not overlap. In one embodiment, label force directed graph has a high charge (−1000) for all nodes that forces them as far away from each other as possible while keeping all fixed nodes fixed to group centers.
In the example of
Persons of skill in the art will understand that the software which generates the visualizations may also be downloaded to the user's computer or implemented on a separate hardware appliance unit located either at the user's premises (e.g., behind the firewall) or anywhere in the cloud.
In the embodiment shown, the algorithms for generating the visualizations described above comprise a computer program that executes on server 172 for automatically generating the animated visualized sequence for display on the client-side device (e.g., laptop 174). In other embodiments, the computer program may be downloaded to execute on laptop 174. Database 173 may comprise any memory or storage device that may be accessed by server 172 and/or laptop 174.
Server 172 communicates with laptop 174 via a browser application running on laptop 174. In one implementation, the computer program running on server 172 operates to create a graphical user interface (GUI) that allows a user of laptop 174 to remotely interact with the visualization program. In this way, a user of laptop computer 174 may enter input parameters (e.g., date/time range for the beacons stored in dBase 173) needed for creating the visualization in a matter of seconds (e.g., 10-30 seconds). The resulting animated visualization created by the program may be displayed on the display screen of laptop 174.
As discussed above, reducing the number of nodes that are actually rendered on the display screen provides significant performance advantages. This takes advantage of the fact that humans cannot visually tell the difference between large numbers of closely packed objects even if they differ in magnitude. Reducing the number of links between nodes, which reduces the number of nodes that interact with each other, also provides a big performance improvement. Together, reducing the number of nodes and links significantly reduces the value of n in the O(n2) algorithm. Even for visualizations with millions of datapoints, the resulting visualization might have only a few tens of clusters, which reduces n2 by 10 orders of magnitude.
The next step in the process of
For each sub-group, the number of nodes is then reduced proportionately based on the size of the cluster as a whole. (Block 193) By way of example, for a cluster with 500,000 nodes and 5 sub-groups with 50,000, 80,000, 100,000, 120,000 and 150,000 nodes each, each sub-group is reduced by 95% to sub-groups of 2,500, 4,000, 5,000, 6,000 and 7,500, respectively, resulting in a cluster of 25,000 representative nodes. In the example of a smaller cluster with 50,000 nodes, the reduction may only be 75%, resulting in a cluster of 12,500 representative nodes.
Next, the value that each cluster has been reduced or shrunk by is stored in a memory or other data storage device. These values may be used as a weighting factor for how closely packed the cluster should be rendered in a subsequent method step. (Block 194) Finally, the reduced sub-groups are merged back to form a shrunken cluster along with the shrinking factors associated with each sub-group. (Block 195) After all of the clusters have been shrunken, the reduced cluster list may be sent to the client.
In one embodiment, Kruskal's algorithm is used to create the minimum spanning tree. Kruskal's algorithm is a minimum-spanning-tree algorithm which finds an edge of the least possible weight that connects any two trees in the forest. In other embodiments, any one of a number of different suitable algorithms may be utilized to create the minimum spanning tree.
The next step in the process is the adding of back links to the most closely related clusters. (Block 203) In addition, the highest weighted links between the cluster representative and all other beacons in the cluster are added with a weighting factor based on the shrinking factor described above in connection with the reduction of nodes. (Block 204)
Once the forces have been set for each node and edge or link, a set of physical laws are applied to all nodes and links to determine the relative position of the nodes and clusters on the display screen. (Block 212) In one embodiment, these laws include: (1) Newton's law of gravitational attraction that pulls all nodes towards the center; (2) Coulomb's inverse-square law for the forces that push apart similarly charged particles; in this case, the negatively charged nodes; and (3) Hooke's law of elasticity for the force required to pull apart particles linked by an elastic band or spring having a stiffness and length corresponding to the link strength and link distance, respectively.
In one embodiment, due to the complexity of calculating the forces between large numbers of points, the interactions are iterated using Verlet Integration until the forces and the movement of the clusters/beacons reaches a substantially stable state. (Block 213) In the example of
It should be understood that elements of the disclosed subject matter may also be provided as a computer program product which may include a machine-readable medium having stored thereon instructions which may be used to program a computer (e.g., a processor or other electronic device) to perform a sequence of operations, such as those described above. Alternatively, the operations may be performed by a combination of hardware, firmware, and software. The machine-readable medium may include, but is not limited to, floppy diskettes, optical disks, CD-ROMs, and magneto-optical disks, ROMs, RAMs, EPROMs, EEPROMs, magnet or optical cards, or other type of machine-readable medium suitable for storing electronic instructions.
Additionally, although the present invention has been described in conjunction with specific embodiments, numerous modifications and alterations are well within the scope of the present invention. Accordingly, the specification and drawings are to be regarded in an illustrative rather than a restrictive sense.
Number | Name | Date | Kind |
---|---|---|---|
6738933 | Fraenkel et al. | May 2004 | B2 |
7050056 | Meyringer | May 2006 | B2 |
7743128 | Mullarkey | Jun 2010 | B2 |
8060581 | Day et al. | Nov 2011 | B2 |
8479122 | Hotelling et al. | Jul 2013 | B2 |
8510600 | Gardner et al. | Aug 2013 | B2 |
9015348 | Hofmann et al. | Apr 2015 | B2 |
9021362 | Tellis et al. | Apr 2015 | B2 |
9026661 | Swildens et al. | May 2015 | B2 |
9154611 | Jackson et al. | Oct 2015 | B1 |
9251035 | Vazac et al. | Feb 2016 | B1 |
9384121 | Jackson et al. | Jul 2016 | B2 |
9436579 | Hemmert et al. | Sep 2016 | B2 |
9450834 | Gardner et al. | Sep 2016 | B2 |
9491248 | Broda et al. | Nov 2016 | B2 |
9495473 | Gardner et al. | Nov 2016 | B2 |
9720569 | Gardner et al. | Aug 2017 | B2 |
9740368 | Love | Aug 2017 | B1 |
9836183 | Love | Dec 2017 | B1 |
9882793 | Broda et al. | Jan 2018 | B2 |
9911211 | Damaraju | Mar 2018 | B1 |
9923782 | Bindle | Mar 2018 | B1 |
9942105 | Gardner et al. | Apr 2018 | B2 |
D820297 | Gardner et al. | Jun 2018 | S |
9990110 | Lounibos et al. | Jun 2018 | B1 |
10037393 | Polovick et al. | Jul 2018 | B1 |
10067850 | Vazac et al. | Sep 2018 | B2 |
D832283 | Tellis et al. | Oct 2018 | S |
10114915 | Polovick et al. | Oct 2018 | B2 |
10177999 | Broda et al. | Jan 2019 | B2 |
10346431 | Broda et al. | Jul 2019 | B1 |
20020147937 | Wolf | Oct 2002 | A1 |
20030074161 | Smocha et al. | Apr 2003 | A1 |
20030109951 | Hsiung et al. | Jun 2003 | A1 |
20040039550 | Myers | Feb 2004 | A1 |
20040059544 | Smocha et al. | Mar 2004 | A1 |
20040123320 | Daily et al. | Jun 2004 | A1 |
20050216234 | Glas et al. | Sep 2005 | A1 |
20060229931 | Fligler et al. | Oct 2006 | A1 |
20070288205 | Vazquez et al. | Dec 2007 | A1 |
20080066009 | Gardner et al. | Mar 2008 | A1 |
20080140347 | Ramsey et al. | Jun 2008 | A1 |
20080189408 | Cancel et al. | Aug 2008 | A1 |
20100023867 | Coldiron et al. | Jan 2010 | A1 |
20100088273 | Donaldson | Apr 2010 | A1 |
20100262576 | Stockwell | Oct 2010 | A1 |
20100274818 | Chauvin | Oct 2010 | A1 |
20110066892 | Gardner et al. | Mar 2011 | A1 |
20110202517 | Reddy et al. | Aug 2011 | A1 |
20110283205 | Nie | Nov 2011 | A1 |
20120017165 | Gardner et al. | Jan 2012 | A1 |
20120023429 | Medhi | Jan 2012 | A1 |
20120166634 | Baumback et al. | Jun 2012 | A1 |
20120246310 | Broda et al. | Sep 2012 | A1 |
20130030851 | Rahmouni | Jan 2013 | A1 |
20130097307 | Vazac et al. | Apr 2013 | A1 |
20130116976 | Kanemasa et al. | May 2013 | A1 |
20130166634 | Holland | Jun 2013 | A1 |
20140033055 | Gardner et al. | Jan 2014 | A1 |
20140089287 | Connolly | Mar 2014 | A1 |
20140189320 | Kuo | Jul 2014 | A1 |
20140280880 | Tellis et al. | Sep 2014 | A1 |
20140297690 | Osoekawa | Oct 2014 | A1 |
20150067527 | Gardner et al. | Mar 2015 | A1 |
20150154787 | Morikawa | Jun 2015 | A1 |
20150222494 | Broda et al. | Aug 2015 | A1 |
20150319071 | Kaasila et al. | Nov 2015 | A1 |
20170103556 | Glover | Apr 2017 | A1 |
20180011774 | Vazac et al. | Jan 2018 | A1 |
20180137155 | Majumdar | May 2018 | A1 |
20180165400 | Feld | Jun 2018 | A1 |
20180246626 | Lounibos et al. | Aug 2018 | A1 |
Entry |
---|
U.S. Appl. No. 14/668,928, filed Mar. 25, 2015. |
U.S. Appl. No. 15/066,969, filed Mar. 10, 2016. |
U.S. Appl. No. 15/155,185, filed May 16, 2016. |
U.S. Appl. No. 15/441,718, filed Feb. 24, 2017. |
U.S. Appl. No. 15/448,954, filed Mar. 3, 2017. |
U.S. Appl. No. 15/449,061, filed Mar. 3, 2017. |
U.S. Appl. No. 15/591,353, filed May 10, 2017. |
U.S. Appl. No. 15/668,002, filed Aug. 3, 2017. |
U.S. Appl. No. 15/862,503, filed Jan. 4, 2018. |