, but this code // executes before the first paint, when

ÇÑ×ÓÊÓÆµ

is not yet present. The // classes are added to so styling immediately reflects the current // toolbar state. The classes are removed after the toolbar completes // initialization. const classesToAdd = ['toolbar-loading', 'toolbar-anti-flicker']; if (toolbarState) { const { orientation, hasActiveTab, isFixed, activeTray, activeTabId, isOriented, userButtonMinWidth } = toolbarState; classesToAdd.push( orientation ? `toolbar-` + orientation + `` : 'toolbar-horizontal', ); if (hasActiveTab !== false) { classesToAdd.push('toolbar-tray-open'); } if (isFixed) { classesToAdd.push('toolbar-fixed'); } if (isOriented) { classesToAdd.push('toolbar-oriented'); } if (activeTray) { // These styles are added so the active tab/tray styles are present // immediately instead of "flickering" on as the toolbar initializes. In // instances where a tray is lazy loaded, these styles facilitate the // lazy loaded tray appearing gracefully and without reflow. const styleContent = ` .toolbar-loading #` + activeTabId + ` { background-image: linear-gradient(rgba(255, 255, 255, 0.25) 20%, transparent 200%); } .toolbar-loading #` + activeTabId + `-tray { display: block; box-shadow: -1px 0 5px 2px rgb(0 0 0 / 33%); border-right: 1px solid #aaa; background-color: #f5f5f5; z-index: 0; } .toolbar-loading.toolbar-vertical.toolbar-tray-open #` + activeTabId + `-tray { width: 15rem; height: 100vh; } .toolbar-loading.toolbar-horizontal :not(#` + activeTray + `) > .toolbar-lining {opacity: 0}`; const style = document.createElement('style'); style.textContent = styleContent; style.setAttribute('data-toolbar-anti-flicker-loading', true); document.querySelector('head').appendChild(style); if (userButtonMinWidth) { const userButtonStyle = document.createElement('style'); userButtonStyle.textContent = `#toolbar-item-user {min-width: ` + userButtonMinWidth +`px;}` document.querySelector('head').appendChild(userButtonStyle); } } } document.querySelector('html').classList.add(...classesToAdd); })(); Research - Computer Science | ÇÑ×ÓÊÓÆµ

ÇÑ×ÓÊÓÆµ

Skip to main content

Research

Image
Research Banner Image

The department maintains a number of active research and scholarship programs, including the following:

Faculty Research

  • Digital Libraries — Harry Plantinga built and maintains the following well-known Christian web services:
    • , a digital library of well-known Christian literature,
    • , a comprehensive repository of Christian hymns, 
    • , a worship planning web service.
  • High-Performance Computing — Joel Adams designs and builds high performance Beowulf clusters (see , & Microwulf), and applies their computational power to hard problems in the sciences. This work has been funded by the NSF, employs student interns, and serves as the basis for the high-performance computing course (see ).
  • Intelligent User Interfaces and Machine Learning — Ken Arnold studies studies how people use intelligent systems for creative productivity, which has led to ground-breaking work on how predictive typing affects what people write and how.
  • Christian Scholarship in Computing — Derek Schuurman and Fernando Pasquini Santos focus their work on the Christian underpinnings of computing. For details on this work, see Derek's book, , a  he did with Jason Thacker, and other materials available at Christianity and Computing.
  • Computer Science Education  — Vic Norman's research focuses on advanced pedagogical techniques for computer science. In addition, the department has written books and lab materials for courses using a variety of programming environments.

These research programs have brought in hundreds of thousands of dollars of grant funding for faculty and student research collaboration.

Student Research

In addition to participating in faculty research projects (listed above), students run their own research projects. One common place for this work is the senior projects course.