CS 240: Lecture 3 – Measuring Algorithms
Dear students: We talked last week about the arsenal of tools we computer scientists have at our disposal and how each tool has its strengths and weaknesses. To be able to choose which tool to use, we need a way of judging them. Here are a few possible ways we might measure algorithms: Correctness. A […]
CS 240: Lecture 2 – Generics Lab
Dear students: Today we will devote our entire time together to a lab on generic programming in Java. Find the lab on the schedule on the main Canvas page. Follow these guidelines: You may work with one other person. If there’s an odd number of people, one group of three is permitted. Complete the lab […]
CS 240: Lecture 1 – Introduction
Welcome to CS 240: Algorithms and Data Structures. I’m Chris, and I’ve never felt less prepared for a semester than I do right now. Part of it’s because the summer was busy. I put on a few summer camps. Part of it’s because I’m still new to JMU. This is my second year here, and […]
CS 430: Lecture 11 – History
Dear students, We’ve spent the semester lifting up the hood on programming languages to see their technical details. Today we do something different: we look at the languages through a more historical lens. Mechanical Computers The earliest computers used machinery like gears and springs to perform mathematical calculations. The most famous of these was the […]
CS 488: Lecture 25 – THREE.js
Dear students: Managers and experts like to tell their juniors not to reinvent the wheel. That’s because they are more interested in getting a product to market than in your learning. In an educational setting, our goals are very different. In a classroom, the product is you. If an activity helps you learn, then we […]
CS 488: Lecture 24 – Shadow Mapping
Dear students: Today is the culmination of many topics we’ve discussed earlier: perspective projections, projective texturing, and rendering to textures. It’s also a day I dread. We are talking about implementing shadows. Shadows are an important to realism. They communicate size and depth, and our visual system is accustomed to having them to reinforce or […]
CS 430: Lecture 10 – Concurrency and Exceptions
Dear students, When you’re converting Celsius to Fahrenheit, a single machine with a single thread of execution can handle the job done. However, many of the computational problems that will earn you a living will require a more sophisticated approach to problem solving. Perhaps you will have to enlist many computers to get the job […]
CS 488: Lecture 23 – Framebuffer Objects and Billboards
Dear students: Normally we draw our objects directly into the framebuffer that shows up on our screens. Sometimes, however, we’d like to draw into some other raster, perhaps because we’re doing offline rendering or because we want to synthetically generate textures. To change the destination of our pixels in WebGL, we use framebuffer objects (FBOs). […]
CS 430: Lecture 9 – Abstraction and Object-oriented Programming
Dear students, Computer scientists spend considerable time tinkering under the hood of their systems. Their clients, however, are happy to only have a few buttons to push to make those systems work. A simpler view of a complex system is called an abstraction. When a humane abstraction is available, clients can ignore irrelevant and low-level […]
CS 488: Lecture 21 – Perspective
Dear students: Why do things farther away appear smaller? And how do we achieve that effect in our renderers? We answer these questions today as we explore the perspective matrix. How Real Eyes Work Our eyes are complex organs, and we will reduce them to an abstraction that is easier to model in code. In […]