Fusion: Opportunistic Web Prototyping with UI Mashups

Modern web development is rife with complexity at all layers, ranging from needing to configure backend services to grappling with frontend frameworks and dependencies. To lower these development barriers, we introduce a technique that enables people to prototype opportunistically by borrowing pieces of desired functionality from across the web without needing any access to their underlying codebases, build environments, or server backends. We implemented this technique in a browser extension called Fusion, which lets users create web UI mashups by extracting components from existing unmodified webpages and hooking them together using transclusion and JavaScript glue code. We demonstrate the generality and versatility of Fusion via a case study where we used it to create seven UI mashups in domains such as programming tools, data science, web design, and collaborative work. Our mashups include replicating portions of prior HCI systems (Blueprint for in-situ code search and DS.js for in-browser data science), extending the p5.js IDE for Processing with real-time collaborative editing, and integrating Python Tutor code visualizations into static tutorials. These UI mashups each took less than 15 lines of JavaScript glue code to create with Fusion.

[1]  David Gay,et al.  User-friendly functional programming for web mashups , 2007, ICFP '07.

[2]  Philip J. Guo,et al.  DS.js: Turn Any Webpage into an Example-Centric Live Programming Environment for Learning Data Science , 2017, UIST.

[3]  Wendy E. Mackay,et al.  Cracking the cocoa nut: user interface programming at runtime , 2011, UIST.

[4]  Mark Pilgrim Greasemonkey hacks - tips and tools for remixing the web with Firefox , 2005 .

[5]  Jeffrey Wong,et al.  Making mashups with marmite: towards end-user programming for the web , 2007, CHI.

[6]  Jeffrey Nichols,et al.  Here's what i did: sharing and reusing web activity with ActionShot , 2010, CHI.

[7]  Steve Ward,et al.  Clui: a platform for handles to rich objects , 2012, UIST.

[8]  Eser Kandogan,et al.  Koala: capture, share, automate, personalize business processes on the web , 2007, CHI.

[9]  Wendy E. Mackay,et al.  Webstrates: Shareable Dynamic Media , 2015, UIST.

[10]  Scott R. Klemmer,et al.  Hacking, Mashing, Gluing: Understanding Opportunistic Design , 2008, IEEE Pervasive Computing.

[11]  Brad A. Myers,et al.  Creating interactive web data applications with spreadsheets , 2014, UIST.

[12]  Scott R. Klemmer,et al.  Programming by a sample: rapidly creating web applications with d.mix , 2007, UIST.

[13]  Yuzuru Tanaka,et al.  Clip, connect, clone: combining application elements to build custom interfaces for information access , 2004, UIST '04.

[14]  Desney S. Tan,et al.  WinCuts: manipulating arbitrary window regions for more effective use of screen space , 2004, CHI EA '04.

[15]  Olivier Chapuis,et al.  User interface façades: towards fully adaptable user interfaces , 2006, UIST.

[16]  Eben M. Haber,et al.  CoScripter: automating & sharing how-to knowledge in the enterprise , 2008, CHI.

[17]  Philip J. Guo Online python tutor: embeddable web-based program visualization for cs education , 2013, SIGCSE '13.

[18]  Roman Rädle,et al.  Codestrates: Literate Computing with Webstrates , 2017, UIST.

[19]  Scott R. Klemmer,et al.  Example-centric programming: integrating web search into the development environment , 2010, CHI.

[20]  Morgan Dixon,et al.  Prefab: implementing advanced behaviors using pixel-based reverse engineering of interface structure , 2010, CHI.

[21]  Rob Miller,et al.  Automation and customization of rendered web pages , 2005, UIST.

[22]  Philip J. Guo,et al.  Two studies of opportunistic programming: interleaving web foraging, learning, and writing code , 2009, CHI.

[23]  Jeffrey Nichols,et al.  End-user programming of mashups with vegemite , 2009, IUI.