This book shows how the web-based PhysGL programming environment (http://physgl.org) can be used to teach and learn elementary mechanics (physics) using simple coding exercises. The book's theme is that the lessons encountered in such a course can be used to generate physics-based animations, providing students with compelling and self-made visuals to aid their learning. Topics presented are parallel to those found in a traditional physics text, making for straightforward integration into a typical lecture-based physics course. Users will appreciate the ease at which compelling OpenGL-based graphics and animations can be produced using PhysGL, as well as its clean, simple language constructs. The author argues that coding should be a standard part of lower-division STEM courses, and provides many anecdotal experiences and observations, that include observed benefits of the coding work.
Is Internet software so different from “ordinary” software? This book practically answers this question through the presentation of a software design method based on the State Chart XML W3C standard along with Java. Web enterprise, Internet-of-Things, and Android applications, in particular, are seamlessly specified and implemented from “executable models.” Internet software puts forward the idea of event-driven or reactive programming, as pointed out in Bonér et al.’s “Reactive Manifesto” (http://www.reactivemanifesto.org). It tells us that reactiveness is a must. However, beyond concepts, software engineers require effective means with which to put reactive programming into practice. This book’s purpose is to outline and explain such means. The lack of professional examples in the literature that illustrate how reactive software should be shaped can be quite frustrating. Therefore, this book helps to fill in that gap by providing in-depth professional case studies that contain comprehensive details and meaningful alternatives. Furthermore, these case studies can be downloaded for further investigation. Internet software requires higher adaptation, at run time in particular. After reading Reactive Internet Programming, the reader therefore will be ready to enter the forthcoming Internet era.
Agda is an advanced programming language based on Type Theory. Agda's type system is expressive enough to support full functional verification of programs, in two styles. In external verification, we write pure functional programs and then write proofs of properties about them. The proofs are separate external artifacts, typically using structural induction. In internal verification, we specify properties of programs through rich types for the programs themselves. This often necessitates including proofs inside code, to show the type checker that the specified properties hold. The power to prove properties of programs in these two styles is a profound addition to the practice of programming, giving programmers the power to guarantee the absence of bugs, and thus improve the quality of software more than previously possible. Verified Functional Programming in Agda is the first book to provide a systematic exposition of external and internal verification in Agda, suitable for undergraduate students of Computer Science. No familiarity with functional programming or computer-checked proofs is presupposed. The book begins with an introduction to functional programming through familiar examples like booleans, natural numbers, and lists, and techniques for external verification. Internal verification is considered through the examples of vectors, binary search trees, and Braun trees. More advanced material on type-level computation, explicit reasoning about termination, and normalization by evaluation is also included. The book also includes a medium-sized case study on Huffman encoding and decoding.
Virtual reality (VR) potentially provides our minds with direct access to digital media in a way that at first seems to have no limits.However, creating compelling VR experiences is an incredibly complex challenge.When VR is done well, the results are brilliant and pleasurable experiences that go beyond what we can do in the real world.When VR is done badly, not only is the system frustrating to use, but sickness can result.Reasons for bad VR are numerous; some failures come from the limitations of technology, but many come from a lack of understanding perception, interaction, design principles, and real users. This book discusses such issues, focusing upon the human element of VR rather than technical implementation, for if we do not get the human element correct, then no amount of technology will make VR anything more than an interesting tool confined to research laboratories. Even when VR principles are fully understood, first implementations are rarely novel and never ideal due to the complex nature of VR and the countless possibilities. However, the VR principles discussed within enable us to intelligently experiment with the rules and iteratively design towards innovative experiences.
This book provides an introduction to the core features of the Python programming language and Matplotlib plotting routings for scientists and engineers (or students of either discipline) who want to use Python™ to analyse data, simulate physical processes, and render publication-quality plots. No previous programming experience is needed before reading the first page.
Readers will learn the core features of the Python programming language in under a day. They will be able to immediately use Python to implement codes that solve their own problems and make beautiful plots and animations. Python code is extremely fast to prototype, allowing users to achieve results quickly and accurately. The examples within the book are available for download at http://pythonessentials.com.
Python and Matplotlib Essentials for Scientists and Engineers is accessible for motivated high-school students, but will likely be most useful for undergraduate and graduate students as well as working professionals who have some background with the basic mathematical concepts. This book is intended for technical people who want to get things done.
Assistive Technology Design for Intelligence Augmentation presents a series of frameworks, perspectives, and design guidelines drawn from disciplines spanning urban design, artificial intelligence, sociology, and new forms of collaborative work, as well as the author's experience in designing systems for people with cognitive disabilities. Many of the topics explored came from the author's graduate studies at the Center for LifeLong Learning and Design, part of the Department of Computer Science and the Institute of Cognitive Science at the University of Colorado, Boulder. The members of the Center for LifeLong Learning and Design came from a wide range of design perspectives including computer science, molecular biology, journalism, architecture, assistive technology (AT), urban design, sociology, and psychology.
The main emphasis of this book is to provide leverage for understanding the problems that the AT designer faces rather than facilitating the design process itself. Looking at the designer's task with these lenses often changes the nature of the problem to be solved.
The main body of this book consists of a series of short chapters describing a particular approach, its applicability and relevance to design for intelligence augmentation in complex computationally supported systems, and examples in research and the marketplace. The final part of the book consists of listing source documents for each of the topics and a reading list for further exploration.
This book provides an introduction to perspectives and frameworks that are not commonly taught in presentations of AT design which may also provide valuable design insights to general human-computer interaction and computer-supported cooperative work researchers and practitioners.
In our digital age we can communicate, access, create, and share an abundance of information effortlessly, rapidly, and nearly ubiquitously. The consequence of having so many choices is that they compete for our attention: we continually switch our attention between different types of information while doing different types of tasks–in other words, we multitask. The activity of information workers in particular is characterized by the continual switching of attention throughout the day. In this book, empirical work is presented, based on ethnographic and sensor data collection, which reveals how multitasking affects information workers' activities, mood, and stress in real work environments.
Multitasking is discussed from various perspectives: activity switching, interruptions as triggers for activity switching, email as a major source of interruptions, and the converse of distractions: focused attention. All of these factors are components of information work. This book begins by defining multitasking and describing different research approaches used in studying multitasking. It then describes how multiple factors occur to encourage multitasking in the digitally-enabled workplace: the abundance and ease of accessing information, the number of different working spheres, the workplace environment, attentional state, habit, and social norms. Empirical work is presented describing the nature of multitasking, the relationship of different types of interruptions and email with overload and stress, and patterns of attention focus. The final chapter ties these factors together and discusses challenges that information workers in our digital age face.
Smartphone users have come to expect high-quality apps. This has increased the importance of software testing in mobile software development. Unfortunately, testing apps—particularly the GUI—can be very time-consuming. Exercising every user interface element and verifying transitions between different views of the app under test quickly becomes problematic. For example, execution of iOS GUI test suites using Apple’s UI Automation framework can take an hour or more if the app’s interface is complicated. The longer it takes to run a test, the less frequently the test can be run, which in turn reduces software quality.
This book describes how to accelerate the testing process for iOS apps using HadoopUnit, a distributed test execution environment that leverages the parallelism inherent in the Hadoop platform. HadoopUnit was previously used to run unit and system tests in the cloud. It has been modified to perform GUI testing of iOS apps on a small-scale cluster—a modest computing infrastructure available to almost every developer.
Experimental results have shown that distributed test execution with HadoopUnit can significantly outperform the test execution on a single machine, even if the size of the cluster used for the execution is as small as two nodes. This means that the approach described in this book could be adopted without a huge investment in IT resources. HadoopUnit is a cost-effective solution for reducing lengthy test execution times of system-level GUI testing of iOS apps.
Contextual Design is a user-centered design process that uses in-depth field research to drive innovative design. Contextual Design was first invented in 1988 and has since been used in a wide variety of industries and taught in universities all over the world. It is a complete front-end design process rooted in Contextual Inquiry, the widespread, industry-standard field data gathering technique. Contextual Design adds techniques to analyze and present user data, drive ideation from data, design specific product solutions, and iterate those solutions with customers.
In 2013, we overhauled the method to account for the way that technology has radically changed people’s lives since the invention of the touchscreen phones and other always-on, always-connected, and always-carried devices. This book describes the new Contextual Design, evolved to help teams design for the way technology now fits into peoples’ lives. We briefly describe the steps of the latest version of Contextual Design and show how they create a continual immersion in the world of the user for the purpose of innovative product design.
Table of Contents: Introduction / Design for Life / Field Research: Data Collection and Interpretation / Consolidation and Ideation: The Bridge to Design / Detailed Design and Validation / Conclusion / References / Author Biographies
This book summarizes the current hard problems in software testing as voiced by leading practitioners in the field. The problems were identified through a series of workshops, interviews, and surveys. Some of the problems are timeless, such as education and training, while others such as system security have recently emerged as increasingly important.
The book also provides an overview of the current state of Testing as a Service (TaaS) based on an exploration of existing commercial offerings and a survey of academic research. TaaS is a relatively new development that offers software testers the elastic computing capabilities and generous storage capacity of the cloud on an as-needed basis. Some of the potential benefits of TaaS include automated provisioning of test execution environments and support for rapid feedback in agile development via continuous regression testing.
The book includes a case study of a representative web application and three commercial TaaS tools to determine which hard problems in software testing are amenable to a TaaS solution. The findings suggest there remains a significant gap that must be addressed before TaaS can be fully embraced by the industry, particularly in the areas of tester education and training and a need for tools supporting more types of testing. The book includes a roadmap for enhancing TaaS to help bridge the gap between potential benefits and actual results.
Table of Contents: Introduction / Hard Problems in Software Testing / Testing as a Service (TaaS) / Case Study and Gap Analysis / Summary / Appendix A: Hard Problems in Software Testing Survey / Appendix B: Google App Engine Code Examples / Appendix C: Sauce Labs Code Examples / References / Author Biographies