Category: Longform
You are viewing all posts from this category, beginning with the most recent.
john riedl tribute
Hi, I'm Brad Miller. For those of you who don't know me, I was one of John's PhD students, and a co-founder of Net Perceptions, but more importantly he was someone I admired, respected, and called my friend.
Me: Yeah, luckily choosing a new name was "just a simple matter of coding"
runestone interactive announces new editions of interactive textbooks
Today I'm really pleased to announce that have launched version 2.0 of our interactive computer science textbooks:
- How to Think Like a Computer Scientist: Interactive Edition 2.0 (CS 1)
- Problem Solving with Algorithms and Data Structures using Python (CS 2)
We first launched these books on our interactivepython.org website in May of 2012, after around a year of private testing in the classroom. Since then we have had 1.3 million page views by a quarter of a million unique visitors. Daily, we get around 2,000 unique visitors. Not bad for a site with zero dollars for an advertising budget.
What Makes these Books Unique?
These books are unique because they are interactive. We have developed a set of authoring tools that make it really easy to write an interactive textbook with many interactive features. We call these the Runestone tools. Some of the interactive features that are possible include:
- Activecode: Using a Javascript implementation of Python you can run and modify the examples in the textbook right in the book. No server connection is required since it is based on javascript and runs right in the browser.
- Codelens: Using the amazing power of the pythontutor.com tools you can step through examples one line at a time, forward and backward. While you are stepping through the code you can see variables and other data structures change values.
- Parsons Problems: For beginning programmers Parson's problems are like refrigerator magnet poetry. You can provide your students with the statements needed to write a program, but they must put the statements in the correct order.
- Inline Quizzes: Each section of the book contains some inline quizzes that allow students to check their understanding of the material. The quizzes have different feedback for each correct or incorrect answer that try to point students in the right direction.
- Online Homework: At the end of each chapter are programming assignments. In this new edition we have provided the answers to the odd numbered questions, and discussion forums for students to exchange ideas or ask questions about the homework problems. As an instructor, you can grade your students programs on one convenient page.
- Highlighting This is another much requested new feature. Students can highlight text using the mouse and the highlights magically reappear on any supported browser. In addition we will remember the students last location in the book and offer to return them to that position when they return.
- There are many other features but the best way to understand what we are doing is to actually have a look at our overview page, which shows everything I have mentioned here and a lot more in action.
Over this past year we have discovered that we serve two different audiences with these books.
- Instructors looking for a textbook to use in their own course
- People who are interested in teaching themselves some computer science and have found our books through google search, the Python wiki, or some other word of mouth source.
Textbooks as a Service
When we launched the site last year we decided to not only provide the books free and open for anyone who wanted to read them, but also as a service for instructors who wanted to have their own custom copy of the book where they could track their students progress, review their answers to quizzes, and grade their students homework. If you want to use our books in your class you are welcome to do so. You have two options:
- You can use a copy of either book as is with the order of the chapters just as they are on the books linked to above.
- You can try our custom interface where you can mix and match chapters from both books to create your own custom textbook.
Once you have created your own course then you will be able to see the assignments your students have completed right in the textbook. I find this to be very valuable as an instructor. For example if I have assigned the students to read and do the quizzes for a particular section, I can simply go to the quiz question and click on the 'Compare Me' button. As an instructor I will see a summary of the answers my students gave, as well as the details of the answers that each student tried.
Supporting the Independent Learner
Perhaps the biggest surprise of this project is the number of people that have found one of the books through google, and are simply teaching themselves to program. We are hopeful that some of the new features we have added will help foster a community of learners so that people just learning to program can talk to others in the same situation. Some things we hope are particularly helpful include:
- Answers to odd numbered questions. This was probably the number one request I got through email all last year. How do I know if I did it right? We decided to risk it and provide the answers, but only to the odd numbered problems. In addition a student must try to answer the problem at least once before the answer becomes "unlocked"
- Discussion threads for homework problems. Again this may seem like a risky move where students can just publish their answer and others can copy. But, what we are hoping for is that students will see that there are many ways to get to the "right answer" There are different approaches and programming styles that can be used to solve the same problem.
- Compare Me Although we aren't sure about the title on the button, the idea is that after answering one of the quiz questions a learner can check on their overall 'grade' for all quiz questions, and see how their answer compared to all the other learners. We haven't gone so far as to give out badges, but we think this is a nice intermediate approach.
The Runestone Tools
The books above were built using our Runestone Interactive toolkit. These tools are freely available on github. If you want to write your own interactive book, or even just use the tools to create some interactive labs for your students you are welcome to do so. You can write your materials in an easy to use markup language called restructuredText and add examples or quizzes using very simple tags. Complete documentation for our extensions to restructuredText is provided on the website. In addition to our own books, the team at Harvey Mudd College has published CS for All another introductory textbook using our tools. I know of at least two other books in progress!
If you are interested in following our development or getting involved You can do so in several ways:
- Twitter, follow iRunestone
- Facebook, facebook.com/RunestoneInteractive
- Google Groups
Acknowledgements
I am grateful to the many people who have provided us with feedback over the last year. And I am especially grateful to the ACM SIGCSE social projects committee for providing me with a special projects grant that allowed me to work with a student (Isaac Dontje Lindell) this summer. He did a ton of work and will be graduating next year. You should hire him. In addition this project relies on many open source components which I will mention and link to below.
- The original text for How to Think Like a Computer Scientist comes from Allen Downey, Jeff Elkner and Chris Meyers. We have modified it a lot, but without a starting point for us to experiment with our interactive ideas this project never would have taken off.
- The Problem Solving with Algorithms and Data Structures text is published as a paper textbook by Franklin Beedle and Associates. Without the forward thinking of Jim Leisy this book would be stuck. Thankfully Jim freed us to use the text in an interactive form online.
- Mark Guzdial, Barbara Ericson and the rest of the CSLearning4U research group at Georgia Tech have provided questions, assessments, and many other features and ideas.
- The Activecode examples are made possible by skulpt
- The Codelens examples are made possible by Philip Guo and his pythontutor.com
- The look and feel of the book is based on the bootstrap templates
- The system that builds the website from source is called Sphinx and is really the backbone of the system that allows us to write our interactive extensions.
- Ville Karavirta wrote the original js-parsons library and Mike Hewner integrated it into the Runestone Tools.
making python3 my default
I'm finally there. After a long time of writing books using Python 3, and teaching in Python 3 on a daily basis, I'm finally at the point where I'm changing my work environment to use Python 3 by default.
Here are the signs that convinced me it was time:
- The release of Pillow to provide PIL functionality!
- Django 1.5
- IPython and IPython notebook are fully supported -- I Love IPython Notebook
- matplotlib !!
- Sphinx, Jinja, SQLAlchemy, and many others are supported. See: https://python3wos.appspot.com/
There are a couple of projects that I use a lot that are not yet on Python3 (web2py) but I'm not going to let that stop me.
It turns out to be pretty easy to get yourself up and running on all of this stuff with Python 3. I'm on a Mac running 10.8.3. The first and most important step is to get a working version of pip for Python3. First you need to install distribute.
curl -O http://python-distribute.org/distribute_setup.py
sudo python3 distribute_setup.py
This will install easy_install in your Python home, but go one more step and install pip.
curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py
sudo python3 get-pip.py
This will create a pip in your /Library/Frameworks/Python.framework/Versions/3.3/bin directory.
From there you can begin pip installing pretty much everything you need!
From my history today as I was setting everything up:
10393* pip3 install ipython
10409* pip3 install numpy
10410* pip3 install matplotlib
10429* pip3 install tornado
10430* pip3 install pyzmq
10455 pip3 install Sphinx
If you are on a Mac you will need to use easy_install to install one thing, for IPython. For some reason pip installing the readline library puts it too late in the load path to work with IPython, so you need to use easy_install-3.3 readline to get the history in IPython working just right.
Finally, you will want to add the Python 3 bin directory to your PATH. Edit your .bashrc or .zshenv file. Note that the following puts the Python 3 bin directory at the front of your PATH, making it the default when you type pip, python, or ipython. If you need to revert back to python2.7 for some task you will need to be explicit about it.
export PATH=/Library/Frameworks/Python.framework/Versions/3.3/bin:$PATH
Easy! You were expecting this to be a long and arduous process fraught with hacks and silly edits to config files. Nope, just a few basic commands. I take this as the final sign that Python 3 is here and ready to be your day to day Python.
to infinity and beyond

We passed 3 million entries in our log data for InteractivePython.org which got me to wondering about how we are growing. The site has been live for 275 days. You can really see how the site took off after day 100, which makes sense because that was bout the time fall classes started around the country. The tiny plateau between day 225 and 250 corresponds to Christmas/winter break for most schools, and now that Spring semester is in full swing it looks like the slope has gotten steeper again.
The dotted line is the linear best fit line with a slope of 12,836.7. Even if our log database is not growing exponentially thats an impressively steep slope.
And just because this is all about Python and education, here's the Python code that created the graph. I love matplotlib, it is such a powerful tool for quickly looking at your data.
import matplotlib.pyplot as plt from numpy import polyfit, arange f = open('bydate','r') days = f.readlines() totals = [0] for d in days: day,count = d.split('|') count = int(count) totals.append(totals[-1]+count) x = arange(len(totals)) m,b = polyfit(x,totals,1) print m plt.plot(x,totals,x,m*x+b, '--k') plt.ylim(ymin=0) plt.show()
The data file is simple. One day per line with the date in one column and the number of actions in the other column. Here are the last few days:
2013-02-14 | 24349 2013-02-15 | 17396 2013-02-16 | 12645
and now it can be told
Loyal readers will remember that last summer we cruised to Alaska, and some very secretive things were happening on that cruise that I could only refer to rather cryptically. Well, with the airing of last nights episode of Top Chef the story can now be told.
We were on the set for the filming of the Quickfire challenge onboard the ship! Although the filming took several hours, we got less than 1 second of screen time. But here we are! Brian and I happened to be in a pretty good spot as the camera flashes past us several times. The ladies we were talking to turned out to be from Wisconsin, in fact from right by our cabin! The two in the print shirts actually got an additional 2 seconds of screen time along with their comments on the food.
Jane, Brian, and I all made it on again towards the end of the challenge. Sadly there is no sign of Holly.
Of course since this was all way before the show started we had no idea who any of the chefs really were. I do remember really liking Sheldon's lettuce cups as well as Stefan's little potato soup cup. I could swear that I remember seeing Kristin on the ship, so maybe she got to come along since she would be competing in last chance kitchen in Juneau.
Right now I'm looking forward to the finale. I'm not sure who I want to win the most, with Stefan and Josie gone all the villains are off the show. I think it would be awesome if Kristin makes it through LCK and gets to compete against Sheldon or Josh in the Finale. Thats Josh, by the way, in the first photo.
the debary institute
Its been a great J-Term. A trip to Vail for some Skiing, and a trip to Florida to solve the worlds problems with great friends at the DeBary Institute. For those who do not know, the DeBary institute is a newly renowned think tank with roots in the Bone Lake Global Institute.
We arrived on Friday and spent a wonderful late afternoon enjoying the hospitality and home of our host, Tim Peter.
On Saturday we toured Stetson University in the morning.
Later we repaired to Smyrna Beach, it was a bit windy but we enjoyed it all the same.
The culinary highlight of our trip was dinner at the Swamp House Grill and Tiki Bar. We enjoyed some lovely alligator bites as appetizers:
(Yes, as the famous frog said, they do taste like chicken)
After dinner we sat around enjoying the music of Mark Moore.
Sunday was Football (European and American) and then Golf day.
Dinner was provided by Gregory and Brad who made a charming seafood alfredo.
Monday morning we left the house at 5:50AM. The temperature was 62 degrees. Five hours later we arrived in Cedar Rapids where the temperature was -2. Thats a big swing for a monday morning.
Already looking forward to next year!
everyday python - new blog
I've decided that it will be best to keep my personal blog separate from the new Everyday Python blog project. All of the infrastructure to make the posts interactive just work so much better when I have control of the server and everything else. So You can head over to Everyday Python and click on the Everyday Python link there, or if you want to subscribe to the RSS feed for that project you can use this link.
vail 2013
I just got back from four awesome days of skiing in Vail and Beaver Creek.
The Colorado resorts have a really cool new way of handling the ski passes, instead of clipping a tag on your jacket you now get a credit card with an RFID chip in it. Talk about a ski pass that appeals to the Geek in me! But whats even better is that every time you go on a lift, there is an RFID reader that grabs your ID and logs that lift ride. So now at the end of the day you can go on to a website and see how many vertical feet you skiied that day. Very cool. Over our four days of skiing we did just over 95,000 vertical feet! If we'd only known how close to 100k we would get we surely would have had a shorter lunch break on day one!
Since snow started late and has been a bit sparse since Christmas there was a lot of snow making going on. The mounds of snow created by the snow machines remind you of a Dr. Seuss drawing:
I'm pleased to say that my skiing has really improved thanks to my Solomon BBR 8.9 skis. I've started to call them my magic skis because I can even do the moguls! Here's a picture I took of craig at the top of one particularly narrow and moguly run. Note that I got down first with enough time to turn around and snap some pictures.
Here's another shot of Craig just before he jumped off the cliff. Note once again who went first to take the picture: :-)
All in all it was a great four days of skiing with the guys. Can't wait until next year.
generating a password - part 1
OK, here is the first installment of the new Everyday Python series. Today I'm just providing a link, as I still have some infrastructure work to get done in order to publish each installment both here and at Runestone Interactive.
introducing everyday python
Everyday Python¶
It is always risky to make your New Years resolutions public, but this is one I’ve
been thinking about for a while now, and so I’m going to go ahead and impose a
measure of accountability on myself by proclaiming this publicly. This week, I’m
starting a series of educational blog posts here, and as a part of my Runestone
Interactive publishing project.
My idea is to publish a series of Python programming projects, aimed at solving
everyday problems, or puzzles. Hopefully these little projects will be interesting
and will give learners motivation to dig into the details of the solutions. I
will provide links to the relevant Python programming constructs and data types in
either of the two interactive books (How to think like a computer scientist:
Interactive Edition , or
Problem Solving with Algorithms and Data Structures using Python) This will let me
focus on the problems, and not the minutia of the language. Lets face it, reading
about all the different possible string methods is not that exciting, but seeing
them in action, and then wondering about what else you might be able to do with
strings is OK.
The great thing about Python is that if you write things in a straightforward
manner its pretty easy to follow even if you don’t know all the details. So, that
is my intention. Write a solution and do it in straightforward Python that
beginners can understand. Each project will appear over several days, and
will likely include some homework related to the project. I’ll provide the solution
in a followup post. In addition, I may refine the solution over the course of
several days introducing more and interesting solutions or more advanced features
of the Python language.
In the back of my mind I am drawing inspiration from the old Communications of the ACM column by John
Bently called Programming Pearls In John’s columns he would feature a particular
problem or algorithm, and present it in a straight forward way, but then he would
refine that solution again and again polishing it until he had an incredibly
elegant solution. It was beautiful because even a novice programmer could
understand what was going on at the start of the article, but would get sucked in
to the beautiful solution and would learn more than they thought possible. While
advanced programmers might chuckle at the initial solutions, even they would have
to admit that they learned something by the end of each column.
I already have a few ideas in mind for the first few projects. I’m going to try
to start fairly easy with some string and list kind of projects, and work my way up
to more complex problems and algorithms, again this is meant to be educational so
that in theory a beginner might read through these posts more or less
chronologically, and learn some computer science along the way.
Click the title to leave a comment.