Exploration Sessions

Each week we will offer a different opportunity to explore extra topics in computer science with one of our TAs. There will be a homework assigned each week. You will accumulate one "exploration point" for each week that you attend the lecture and do the homework. At the end of the quarter, your total exploration points will be divided by 3 and will be added to your homework points. There will be 166 homework points total, so this isn't adding a lot to your potential score. As an example, if you were to participate in 3 exploration sessions, you would have 1 point added to your homework points, which is like getting one more point on a weekly programming assignment. The idea is to give people a small reward, but not something that is so large that people feel obligated to participate in these optional sessions.

Week 9 (Cryptography) - Wednesday, March 13 3:30-4:20 in EEB105 icon Turn in Exploration HW

How do people communicate securely? In an age when huge computing resources can be used to break codes, privacy is a big concern. We'll look at some of the basics of cryptography and learn about RSA encryption, one of the most secure and widely-used cryptographic algorithms.
  • Session slides
  • Homework -- due MONDAY March 18 - 3:30pm
    • Crack this code and answer the question: 230801200118052515211819161809140702180501111612011419?
    • Click here for a hint.
    • Click here for a second hint.
    • Turn in your response in answers.txt to the link above.

Week 8 (Reflection) - Wednesday, March 6 3:30-4:20 in EEB105 icon Turn in Exploration HW

This week's exploration session will be taught by TA Zach Cava. We will talk about the powerful topic of Reflection in Java. How can I use a class that I don't have at compile time? How do I find out if a class has a method or not? How can I look at all the fields of a class regardless of whether or no they are public or private? Reflection answers all these questions and more, by letting us inspect and change classes at runtime without seeing any of the other source code. The purpose of this session is to give you an introduction to the basics of reflection and its common use cases through examples and demos
  • Reflection Slides (ppt)
  • Reflection Slides (pdf)
  • Homework -- due March 13 - 3:30pm
    • Use the information from the slides and a little bit of playing around on your own to discover the fields and methods of the ATM class. With this knowledge make a Card.java file that when loaded into the ATM will cause it to do something it shouldn't, examples of possible things include:
      • Print 1,000,000 dollar bills
      • Activate the debug mode flag in the ATM to get special options and settings
      • Display messages on screen claiming the hack
      • Steal secrets stored in the machine
      • Something else you can think of!
    • Your Card.java file must call at least one of the private ATM methods and access one of the private fields of the ATM object (you can just print the contents)
    • To run the ATM, just compile/run the ATMRunner.java file, be sure to have all the .class files in the zip in the same folder as ATMRunner.
    • To use your Card.java file with the ATM, make sure all files are in the same folder, compile your card (you can do this in jGrasp by clicking the +), run the ATM, and click the card slot on the ATM.
    • ATM.zip
  • If you have any problems or questions let me know zcava@cs

Week 7 (Computational biology) - Wednesday, February 27 3:30-4:20 in EEB105 icon Turn in Exploration HW

How can we use the power of computers to improve our understanding of the biological world? We'll look at the role of computational tools in understanding our DNA and in programming molecules.

Week 6 (Video Games) - Wednesday, February 20 3:30-4:20 in EEB105 icon Turn in Exploration HW

This week we will have a guest session given by Alex Miller (see his work on games here). Do you like to play video games? Why not try making one? In this session, we'll build a simple 2-dimensional game. We'll cover how game code organization, basics of object interaction, and implementation of user controlled characters.
  • Processing
  • Processing Reference
  • Processing Tutorial
  • ExplorationGame code we wrote
  • Hero code we wrote
  • Homework -- due Wednesday, February 27 - 3:30pm
    • During the exploration session, we wrote a basic game using Processing. For this assignment, you will be adding to this game. You must first download Processing and open up the .pde files we wrote in the session. Then implement the three following add-ons:
      • Pacman style borders. Rather than bouncing off the walls, the Hero should pass through the walls and appear on the other side of the world. For example, if the Hero hits the bottom of the world, they should reappear at the top of the world, but with the same x-coordinate.
      • Better graphics. Use the Processing shape and color methods to make your game more visually appealing. Create a background for the universe that consists of at least three shapes or lines, and render the Hero using at least three shapes or lines rather than just a red circle. Remember that when rendering the Hero, all shapes need to be drawn relative to the Hero's x and y-coordinates.
      • Create another game object. For this, you will need to write another class which has at least a "render" method. You will also need to instantiate the new game object in Processing's setup method and render the game object in Processing's draw method. You are encouraged to make this secondary game object move around or interact with the Hero in some way, but this is not necessary for full points.
      You may want to test to see if your secondary game object is colliding with the Hero. We did not cover this in the session, but if you are motivated, you can figure out the code on your own. Take a look at how to implement collision detection between circles.
    • Feel free to implement any other add-ons you want. This homework assignment will require you to write Processing code, which you might not be familiar with. Remember that Processing has an excellent reference. In addition, there are great tutorials for learning Processing.
    • Turn in your response in answers.txt to the link above.

Week 5 (No Session) - go to the review session or study for your exam!

Week 4 (Search and Google) - Wednesday, February 6 3:30-4:20 in EEB105 icon Turn in Exploration HW3

What exactly does Google do and why is it such a big deal? What problems can arise in this field? We'll look at Google's PageRank algorithm for sorting search results and see how it helps refine the search for your query through an "inverted index". We'll write some code together to build a mini search engine, and we'll see that building an Inverted Index uses the same Collections ideas (maps and sets) we have been discussing in class.
  • Seminar slides
  • Google Trends
  • Google Flu Trends
  • Inverted index code we wrote
  • Homework -- due Wednesday, February 13 - 3:30pm
    • Visit Google Insights and play around with the tool. Find a search term that satisfies each of the following conditions (you should have 4 separate search terms):
      • there is a steady increase in the term's interest over time
      • there is a steady decrease in the term's interest over time
      • the highest regional interest in the term is from Australia
      • there is a periodic cycle of interest in the term over time
    • Turn in your response in answers.txt to the link above.

Week 3 (Networking) - Wednesday, January 30 3:30-4:20 in EEB105 icon Turn in Exploration HW3

This week we'll discuss the wide world of computer networking. How do two computers talk to each other? How does the Internet work? How do wireless and RFID work? How has the world change with the ever-increasing number of connected devices and the rise of mobile devices? We'll consider these questions and others.

Week 2 (Human computation) - Wednesday, January 23 3:30-4:20 in EEB105 icon Turn in Exploration HW2

This week we'll talk about the limits of computers and the power of human computation. Computers can do very powerful things, but what are they still poor at doing? In what ways are humans computationally better or more efficient than computers? Can we leverage this fact toward any useful end? We will take a look at some of the ways that people are already doing this to improve accessibility and our ability to search.

Week 1 (Security) - Wednesday, January 16 3:30-4:20 in EEB105 icon Turn in Exploration HW1

How do we protect information's privacy, availability, and integrity? We will talk about the security mindset and design attacks against a few real-world systems. We'll also learn about some specific issues in user authentication, social engineering, and current research in the UW Computer Science Department.
  • Seminar slides
  • Professor Tadayoshi Kohno and his team on Nova Science Now
  • Wired article on the Palin email hacker
  • Homework -- due Wednesday, January 23 - 3:30pm
    • We talked about the timing attack against a password-checking method. Design a quick experiment that demonstrates that this attack actually exists. The attack should use the given starter code (below) that already has the good and bad versions of the method, as well as the timing code.
    • Hints: Print out your results for analysis. Average over multiple runs. Like we saw in class on Wednesday, you may also need to "warm up" before you start timing so that Java optimizations don't affect your timing. You should use strings of at least length 10 in order to see results.
    • Write a few sentences about your results. Was the timing attack effective? Would it work? What differences did you see?
    • Turn in your code (TimingAttack.java) and your results (answers.txt).
    • Starter code