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
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
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
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
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
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
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
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
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