Category: article
You are viewing all posts from this category, beginning with the most recent.
cooking in malta
The first thing I should say about cooking in Malta is that there are around 600 reasons not to cook within walking distance. Some of our favorites are:
-
Guzé — OK, I love Pappardelle with wild boar sauce. I could eat this once a week.
-
Pepperoncino — The Rosettes (little bowls of pappardelle and proscuitto cooked in cream sauce) are to die for. Plus a totally small town friendly vibe that you just can’t beat.
-
Piccolo Padre – Eat pizza right out over the water. Diavola yum!
-
Wigi’s Kitchen — You can pick your fish or your steak right at the table. The window seats have an awesome view of Balluta bay.
-
Kebabji. – The students introduced us to this one. I think of it as “the chipotle of Sliema.” My favorite is Chicken-shish with Tabbouleh, Hummus, Couscous, Harissa, and Sesame sauce. Actually its the only thing on the menu I’ve ever ordered, but why mess up a good thing.
I’m going to divide the rest of this post into three parts, that roughly describe the three stages of cooking I have gone through here. I call them:
-
Subsistence cooking
-
Getting over it, and getting on with it
-
Grilling season arrives
Subsistence cooking

So, I admit when we first got here, I went through a bit of culture shock. As I’ve mentioned before, it was colder inside our flat than it was outside, and it was rainy, and dreary most of the time. Our kitchen was, and still is, tiny and isolated from the rest of the flat. The cutlery was dull, and the pots and pans old and dented. We must have set aside 50 knives and a dozen pots and pans from the three flats to be disposed of.
We made our first trip to a grocery store called Lidl, a german chain. All of the ingredients were labelled in anything other than language. There was little produce or fresh meat, and it was nowhere near our flat. Next door to us is a small corner market, at the cash register is a young boy who ought to be in school but never is. They have produce outside, but no fresh meat, and a totally random selection of dry goods. There is a large supermarket about 1km away, and it has a lot of things. Going to the Park Towers supermarket for the first time was like an adventure. Taco shells! A butcher, a cheese counter with Parmeggiano Reggiano, hot sauce, spices, asian ingredients.
The first meal we cooked in the flat was a grilled cheese and ham sandwich. Not regular ham but delicious prosciutto ham, and tomato soup. Sound familiar? I’ll bet that is the first thing that many people learn to cook. I’ll bet it was two weeks before we cooked an evening meal in the flat. In part because going out for dinner meant that we had some place warm and heated where we could go for a few hours before coming home and huddling under our covers. The first true good meal I cooked was this pesto with chicken. We quickly discovered that we don’t care too much for pesto in a jar even this close to Italy. We also learned that vegetables and fruits are much more seasonal here in Malta than in America. So we had to wait a few weeks before basil came into season to make a good home made pesto.
Getting over it, Getting on with it
Eventually, the temperature warmed up and we got more comfortable with our surroundings and we reached the point where we could not stand to eat out anymore and so we started cooking in the flat more. One of my goals was to learn at least one new recipe while we were in Malta. I figured it would be so me kind of seafood, but it turns out the Maltese don’t really eat that much seafood despite living on an island. After our trip to Rome I realized that what I really wanted to cook was spaghetti carbonara. For some reason I have missed out on this delicious yet simple dish my entire life. This is one of those simple yet delicious Italian dishes. Eggs, wine, noodles, cheese, and good cured ham or bacon. I have been making steady progress on mastering this dish, but I still have a ways to go before it will live up to that first night in Rome.
The second thing that made a turnaround in our cooking was learning to shop. Now there are four places that are worth highlighting.
-
O’Ryan’s on the corner
-
The college street mini market (the green market)
-
park towers supermarket
-
Meats and Eats on Dingli
-
all the vegetable trucks
Let’s dispatch with Park Towers first. Big, indifferent to rude staff, distant. Shopped there a couple of times and decided not to go back. Jane has been back a couple of times to stock up on cleaning and bathroom supplies, but we don’t shop there anymore for groceries.
The corner store is great for water, limoncello, Pringles, and the occasional need for baguette and salami. It’s about double the size of my living room, but packs in all of the essentials including frozen meats. The owner and his family run it together. Nine times out of ten when you go in there you would think that the mother is on the verge of killing the father or the son. Or it might just be that most Arabic conversations still sound like arguments to my western ears. Much of the time the cash register is “manned” by a boy who clearly should be in school but is not. I suppose he will inherit the store and so is learning the trade and the family does not feel the need to send him to school.
The green market is much larger than the corner store, and has great fresh baked bread every day. They have a reasonable selection of fruits and vegetables out front, along with canned goods and other essentials. Most of the time the cash register is manned by an old man who has never once rung up an entire order correctly, but he is charming and friendly every time we go to the store.
Meats and Eats is probably the single best thing that happened to my cooking during our stay in Malta. The store is bright and clean and staffed by a bunch of friendly Italians. The meat counter is a joy to visit almost every day. It’s the kind of meat counter wher they have several big hunks of ribeye, originating from around the world, and they Will cut you off a hunk of whatever thickness you like. They also have marinated pork and chicken and fresh minced beef and pork. The rest of the store has great gourmet ingredients as well as some nice convince items like prepared curry sauce. The cheese counter has huge chunks of parmigiana reggiano at a ridiculously low price. Next to the checkout counter is a wine selection that is just about as good as anything you can find in Malta.
I knew that I was going to have a great time shopping at Meats and Eats the morning I decided to give carbonara a try. I went to the meat counter to get some bacon and had the following conversation:
Clint: Sorry sir, we only have streaky bacon today.
Me: Uhhhhm streaky bacon? Ahh, the stuff that just looks like regular bacon to my eye. What’s the difference?
Clint: Very thin, not the good cured pork belly.
Me: Oh, well I’m just experimenting with carbonara sauce so I think the streaky bacon will work.
Clint: Oh no sir, you should not do that. If you are doing carbonara you need the good bacon or one of the packages of pancetta in the case over there.
Oh yes, agreed the lady standing next to me at the counter. Now I am left wondering how I will find this wonderful chunky pancetta back home.
Another thing I’m excited about continuing back home is fried spring rolls! Jane and I had lessons on making these in Vietnam, and were excited to try our hand on our own. When I discovered an Asian market on my walk to school I knew this would become a reality in Malta. Shopping in the Asian market is like Christmas, I see all of these cool exotic ingredients and I want to get them and try them out. Fresh lemon grass, six different kinds of fish sauce, Hoisin, Sirachi, you name it. Now the key to good spring rolls in my opinion starts with the wrapper, and I definitely like the frozen wrappers much better than the dried. They are easier to work with and I like the texture of the end product better. With a little more practice I’ll be ready to challenge my friend Nancy to a Spring Roll Throwdown!
A Sunday morning expedition to the Marsaxlokk (Mar-sa-shlock) fish market provided an opportunity to learn how to fillet and cook fresh caught sea bass. There are many other types of fish available at the market as well, but Jane and I had both watched a you-tube video on filleting sea bass, so that was the direction we went. The market also has huge king prawns, but taking the head and legs off the prawns is a lot of work for my lunch. One thing that amazed me about the fish market was that it was not the least bit fishy smelling. In fact other than the fish market in the middle of Gzira I have yet to walk along the sea here in Malta and think, oh fishy, or ocean. I guess it goes with the crystal clear water.
One thing that we have really had to work on is finding variety in our diet. Back home we enjoy the cuisine of many different countries all in the same week. Tex-Mex one night, grilling the next, indian or Thai curry after that, italian, vietnamese, pot roast in the crock pot (an American Tagine), you name it, we like our variety. Making tacos is definitely a comfort food that we miss. The ingredients are just about impossible to find. Sour Cream and creme fresh are not the same, The salsa here on the isaland is just not up to par. Finding taco shells is possible at the Park Towers supermarket, but you have to go there to buy them. Then there is the beef, or what the British and Maltese call mince I suppose that if you look at it objectively mince is no worse of a word than ground but having grown up with ground beef, minced beef sounds a little disgusting to my ears.
The other odd thing is the lack of soups. You simply cannot buy cream of mushroom anywhere! So we have gone six months without one of the staple comfort dishes of my entire life, namely beef stroganhoff. The availability of wonderful Parmiagianno Reggiano makes risotto a good comfort fill in, and here we run into the lack of chicken stock. I suppose I could, and should, make my own stock but that takes advanced planning. I’m used to just grabbing a carton of stock from the coop to make my risotto. Here it appears that boiled water with bullion cubes, or a little container of gelatinous chicken stock substance that you disolve in water takes the place of a good stock. It does the trick, especially with a little extra Reggiano.
And finally a word about wine. Maltese wine is surprisingly good, and incredibly cheap. While many of the students pride themselves on keeping it under 3 euros a bottle, I have found many good wines for under ten. My favorites are:
-
ISIS, a rather unfortunate name for a wine in this day and age, but it really is my favorite
-
Maltese Falcon
-
Marsamena – a delicious chardonnay from Gozo
On the subject of wine I would be totally remiss if I did not mention our local wine shop. Owned and run by a young man from the south of France, Vini Culture is a fun place to stop in on my way home from school, or to just run around the corner and grab a bottle for happy hour. The young guy who runs the store is extremely friendly and pleasant. I never stop in there without having an enjoyable conversation about wine and France and all the new things he has on order for us to try. Its hard to understand how he makes a living in a specialty shop like that in the middle of Sliema but I’m happy I got to know him and shop there.
Grilling season

And suddenly grilling season was upon us. The roof was a much sunnier and less windy place. The sun was starting to stay out until a reasonable cooking hour. Meats and Eats has a wonderful pork steak marinated in mediterranean spices, and we can grill that and serve it with some roasted new potatoes from my Sicilian vegetable man. Some fresh baked bread, and some spinach salad with strawberries and vinaigrette dressing.
The Sicilian vegetable guy, I have no idea what his name is, is another great story. Since meats and eats does not sell vegetables, I just walk another half block to this guys fresh vegetable truck. I know he thinks I’m kind of odd because I usually come in and buy one hot pepper, six small potatoes, or one head of garlic, depending on what I need for the evening meal. Its not usually much, and it almost always under one euro.
One day I was buying a pepper and an onion for a total of 40 cents, I had forgotten to put change in my pocket before I left the flat. As I struggled to find some coins and then started to pull out my wallet for a bill he said “listen, don’t worry, you can pay me tomorrow.”
Grilling season brought with it much more than an opportunity to stand on the roof and cook meat with a drink in my hand. It brought a huge transformation in the weather, and consequently my enjoyment of our time in Malta. No longer did I get out of bed in the morning and wrap myself in multiple layers of clothing, no longer were we huddled in the front room, door closed, heater running in order to feel comfortable.
I miss my Hasty Bake, and its ability to cook and smoke meat slowly, but this little gas powered grill has brought a lot of enjoyment. Meats and Eats sells Kobe beef patties, as well as Ribeye steak from five different countries, including Australia and Ireland. It has been fun to try the variety. They have chicken marinated in three or four different marinades an so that provides us with a great variety of things to try.
It is certainly true that you can learn a lot about a culture by its food. Malta is definitely no different. The Italian influence is obvious in the pizza and pasta restaurants that are everywhere. Their national dish of Pastizzi is not my favorite, but has certainly become a cheap lunchtime staple for many of the students. The traditional Maltese foods include rabbit, which is also quite good – especially the rabbit pie at Guze – and some other stuffed meat dishes. There are turkish kebab and pizza places everywhere. We think its an odd combination, and we wonder about all the kebab joints. I think it must have to do with the influence of the Ottoman empire on the island long ago, but I may be completely wrong. In general, it is a diet high in carbohydrates, which works for me, but drives Jane crazy. Jane and I had one of those funny conversations back in January, where the question was if you had to give up variety, and live with one cuisine, which would it be? Both of us chose Itialian or Vietnamese as our top two. Then I was leaning toward Italian, but now I am looking forward to more of the fresh healthy variety offered by the Vietnamese.
adventures with flask-cors
-
I want people to be able to write and host the static parts of any book on any server. You can think of each page in a book as its own single page application.
-
I want to provide back-end services so that students using any book hosted anywhere can save their programs and answers to quizzes etc.
-
I want to continue to gather research data on how students learn computer science.
-
I want to make the registration and login process as easy as possible.
Since the static parts can be hosted anywhere (including a site like interactivepython.org) The interactive parts are going to involve making cross-domain XMLHttpRequests (xhr). Of course the first thing that happens when you have a page hosted on static-site
that makes an xhr request to ajax-server
is that you get an error. Browsers and sites work together to disallow cross-domain requests to prevent a variety of nasty behaviors. But, there are many times (wlike now) when you have a legitimate reason for doing this. So, the w3c created the Cross Origin Resource Sharing (CORS) standard to help developers get around this. Cory Dolphin has created an excellent plugin for Flask developers called Flask-CORS. The plugin is a great example of the brilliant design behind Flask and in fact the entire WSGI stack.
The Really Simple Approach
The first thing you find when you start googling about this problem is that there is a seemingly simple solution. If you have control over your AJAX response you simply need to add an HTTP header Access-Control-Allow-Origin: *
problem solved. Now everyone in the world can make xhr requests to your server and use the results in their page.
Adding a header is pretty simple in Flask. All you need to do is use response.headers.add("Access-Control-Allow-Origin", "*"
Problem solved, moving right along to the next programming challenge.
Or maybe not. Minutes later you realize that this is not all that great because you have decorated some of your requests to require a login. That wont be a problem if the static page is served from the same domain because you will automatically get the session cookie, and the Flask-Security extension will eat that cooking and validate things for you. BUT if your static page is not served from the same domain you will not even get the session cookie. Oh Bother. But you also have a second problem. You have probably violated the CORS specification without even meaning to. Really, if I had to read the spec for every web standard I wanted to use I would seriously think about changing careers. But, here is the important part you may not return a CORS header unless the request contains an origin header! Chances are you tested you change with a quick curl
call to your endpoint, saw the Access-Control header and were happy. But you sure didn’t give it an origin header on the request when you did that. So to summarize, we have two problems we need to solve:
-
We want to incorporate authentication into our cross origin strategy.
-
We want to be good citizens and follow the spec.
The Smart Approach
The smart approach is to use a nice extension where other people have figured this out, and presumably followed the specification. Enter Flask-CORS. You can enable CORS support with a simple decorator @cross_origin
This will automatically add the Access-Control-Allow-Origin: *
to responses. As long as your test request includes an Origin. If you are like me you will forget that part, and then wonder why the extension must not be working. So this solves problem 2.
To solve problem 1 here is a snippet of code that works just fine.
@ajax.route('/ajax/page')
@login_required
@cross_origin(supports_credentials=True)
def test():
return jsonify({'foo':'bar'})
The above responds to the url /ajax/page
I have all of my API calls in an ajax
blueprint with ajax as part of the url. I’m requiring that the user is logged in before I allow them to access this endpoint. I also want it to be allowed cross origin. This is where the parameter to the @cross_origin
comes into play. Supports credentials sets up the CORS response to return an additional CORS header: Access-Control-Allow-Credentials: "true"
. For one final twist, you need to know that when you have supports_credentials=True
you may NOT set Access-Control-Allow-Origin: *
You need to be specific and set the origin to the origin that comes in the request headers. To Make this work and try it out from the client side, here is a bit of HTML/Javascript.
<button onclick="corsTest();">TestCORS</button>
<script>
function corsTest() {
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.onload = function () {
alert(xhr.responseText);
}
xhr.onerror = function () {
alert("error");
}
xhr.open("GET", "http://example.com/ajax/page", true)
xhr.send()
}
</script>
Note that you need to set xhr.withCredentials
in order for your session cookie to be sent along. By default cookies are NOT sent with cross origin requests.
Now, I may end up adding more to this as I discover the intricacies of so called “Non-Simple” requests. That is requests beyond simple GET and POST, as I work on moving my API toward a RESTful API which uses PUT and others. This will nodoubt enlighten me about preflighted requests. Which I can only assume means something different than sitting around in an airport bar waiting for your flight to be called.
There is a lot more detail and background on using CORS at the following two sites:
unexpected adventures

Morning Climb to Castelmola
Since the students were planning on sleeping in this morning, Jane and I decided to explore on our own a bit. High above Taormina sits the little town of Castelmola. You can’t drive there, you have to climb. And so we did. But when we arrived in the little town we were rewarded with a spectacular view up and down the Ionian coast.
After enjoying the view we decided that a Cannoli and Cafe were in order before we started the hike down. At the end of one small street we found the perfect place. Maria, the proprietor of Gallo Cedro was cutting tomatoes on the terrace. “Prego,” she said by way of invitation to come in and sit down. The Cannoli’s were first rate. She stuffed them fresh for us and added some chocolate chips and pistachios to top off each end. Perfecto. We were about half done with the Cannolis when she unexpectedly appeared with two shot glasses and a bottle of almond wine. Well it was only 10AM, but we figured when in Sicily… So we had a little digestif to help the cannolis go down.
Gole Alcantara
We returned to the Lemon Tree (the name of our apartments) around 11 and everyone was out of bed and getting themselves awake for the day. We had some discussion about what we might do this afternoon. The gorge, known as Gole Alcantara, sounded like an interesting short hike and there was enthusiasm among the group for a stop at a Sicilian winery.
We made our way to Gole Alcantara and after making a donation to the parking attendant we set out on our short walk down to the gorge. It was beautiful. Of course many of our “kids” wanted nothing more than to play in the water which was quite a problem since we had not brought beach towels or anything for them to dry off with.

As we enjoyed the area, we checked our email to see if we would be able to visit any of the wineries. Unfortunately none of them could accommodate us that afternoon. So… We decided that we could do our own wine tasting back at the Lemon Tree.
Red and White
The wine tasting preparation required another stop at the supermarket where we put a strict limit on the price of wine to be purchased for the tasting. Our goal was to keep it under 100 euros while recognizing that with 13 people each of us would just get a taste of each different bottle. It was quite the production to get six of us to agree on what wine to select. I will say that the Italian construction workers who were supposed to be building another set of shelves in the middle of the aisle we fairly amused/distracted by the blonde haired blue eyed wine aficionados.

While we were in the wine aisle another group was in charge of meat and cheese and fruit. As you can see we put out a pretty good spread. We also agreed that we were “in for the night” as there was no way we were going to drive our mini-vans down or up the winding hill to the Lemon Tree after wine tasting activities.

The wine and cheese went remarkably quickly. Even with a seventh inning swimming stretch between the reds and the whites. I guess it was inevitable that after a bit of wine, some of the people were going to end up in the pool fully clothed.
With the reds, gone, people were in the mood for movies or whatever, and then “the munchies” set in. We had been told that there was at least one Pizzeria that would deliver all the way up the hill, and that Paula would take care of calling and ordering for us. After much trying however it was determined that the pizza places were closed on Monday night. The horror and sorrow of a hungry group of students without pizza. We were totally resigned to a pizza free night when Paula knocked on our door to inform me that the pizzas had arrived! We were saved. And for some reason she was convinced that the students needed a nightcap, and so brought them a complementary bottle of home made limoncello!
climbing mount etna
The van arrived right on schedule, 4:45 AM, and we were all in the courtyard in front of the flat on Triq DePiro ready to go. This is our last group trip together with the Malta students, Spring 2015 edition. It is a bonus trip in the sense that because Jane saved us a bunch of money by doing so much planning for our trips to Rome, Morocco, and Istanbul, that we were able to afford the plane tickets and lodging to get everyone to Sicily. Of course with budget travel comes early morning flights, but nobdy seemed to mind very much. We were, after all, heading for Sicily. What nobody guessed was that we have a distinctly non-budget view from our lodgings for the next three nights!
The flight to Catania is ridiculously short is is just over 100 miles and takes less than 30 minutes, we barely got above 11,000 feet before we started our descent. Our departure time was so early that once we arrived in Catania we had a good hour to wait before the rental car agencies opened up. Yes, we are driving in Sicily. Its part of the plan to keep costs low for this trip. Two mini vans for the group. The plan for the day was to meander our way north to Taormina stopping along the way at Bronte to sample some Pistachios and at Randazzo to check out lava as a building material in a Medieval town.
The highlight of the day was to do some hiking on Mount Etna. It is amazing that there is still snow on the volcano in mid-May and even more so when you consider that the volcano is quite active right now.
We started out together as a group and enjoyed the break from the busy urban vibe of our home in Sliema, stopping for a group photo in this cool clump of trees:
Eventually the group splintered with varying degrees of adventurousness, and an unfortunate bruised thigh for Jane due to a loose rock. Some of us persevered up the side of the volcano until the winds became so strong we thought we would blow away. Climbing through the lava is a lot like climbing up a giant sand dune. It is very hard work. It also reminded us of the scenes of Frodo and Sam climbing into Mordor in Return of the King. As we were scrambling our way up, a helicopter flew overhead and hovered over us for a few minutes. I think we all expected to hear a loud voice tell us to turn around and get out of there, but I guess they decided we were harmless and not in harms way as it soon moved on. After we reached our goal we were tired and happy to be there if only for a few minutes to enjoy the view.

If you look close, you can see part of the group on the plateau in the middle right of the picture.
As we began to descend our shoes soon became filled with sharp little pieces of lava. This made the descent quite painful and necessitated a few stops to empty the shoes. At one point I was really glad Emma was standing behind me as she remarked. “I wonder who’s glasses these are?” Of course they were mine having just fallen out of my pocket as I was emptying my shoes. That would have been a loss, and impossible to find one pair of transition lenses hiding in miles of black rock.
enjoying island life on a warm may day
Every day is a good day when you are on a boat, in the beautiful blue Mediterranean. After a bit of a mixup on the bus this morning, we got to spend 4 amazing hours with Captain Franz on a boat trip from St. Paul’s bay to Gozo to Comino. Complete with caves, and cliffs, and swimming. Click on the thumbnail below to see the photo gallery for today.
The bus mixup is amusing now that I look at it a day later… We had arranged for van to pick us up at 9:00 to bring us up to St. Paul’s bay. But after waiting and waiting I finally connected with my contact, Rachelle, at the University who handles all our transportation scheduling for us. It turned out the bus company had screwed up the schedule for the day. The solution was to send a coach. The only other vehicle available and in the area. No, not one with horses, a giant bus. Wait by the corner we were told. Oooops wrong corner. More delay. Imagine the 14 of us on a coach that could easily hold 60 people. So we made it to St. Paul’s in Style and in the end were only about 35 minutes late. Thankfully Frans was a very patient captain, and it was no problem to extend our time in the afternoon to make up for our lateness.
writing a runestone lab the easy way
As part of the grand reorganization of the various tools and software associated with the Runestone Interactive project I am planning to also write a series of tutorials to help people get started. The major aspects of this reorganization are discussed in detail in the Project Roadmap, but for the sake of some context I can summarize the major efforts as follows:
-
Separate the distribution and development of writing tools from the server.
-
Make a pip installable runestone package.
-
Remove the interconnectedness between the components and Sphinx. In other words support the user of runestone tools in environments like Markdown, and even wysiwyg html editors.
-
-
Re-architect the server side focusing on services for the writing tools
-
Create an authentication service that supports CORS for cross domain AJAX use.
-
Create a standard REST API for logging and storing student data
-
-
Create a web application (or integrate with another) for grading
Since I just completed Part 1.1 I thought it was a good time to talk about how easy it is for you to now use the runestone tools for creating a lab for your students, or lecture notes and presentation materials for your class.
Getting Started
The major steps in getting started are
-
Installing Python
-
Installing the runestone tools
-
Building your first lab
Install Python
-
If you are on a Mac you are already done with this step.
-
If you are on Windows you will need to go to Python.org and download Python3.x. The windows installer is a typical installer and you can just click your way through it.
If you are an advanced Python user you may want to may want to create a virtualenvironment
for this project but it is not a requirement.
If you are on Windows you may want to edit your PATH environment variable following the instructions here. Again, mac users can ignore this.
Installing the Runestone Components
You are going to need to use the command line for the rest of this tutorial, so start up a Terminal (/Applications/Utilities on a Mac or run PowerShell or cmd.exe on Windows) I will repeat myself here. These commands need to be run from the command line, not from the Python shell.
Run the pip
command
$ pip install runestone
Or on Windows if you have not modified your PATH try:
C:\\Python34\Scripts\pip.exe install runestone
From now on I’m only going to give the Mac way of running the commands. If you are on windows you will need to add C:\\Python34\Scripts
to the beginning of the command and add .exe
to the end.
You can watch as a lot of text goes scrolling by. But as long as you don’t get any errors you should be good to go. You only need to do these first two steps once. Once you have installed Python and runestone you will not have to do it again.
Starting your first Runestone Project
Here is a session of me on my computer creating a simple project.
$ mkdir mynewproject
$ cd mynewproject
$ runestone init
This will create a new Runestone project in your current directory.
Do you want to proceed? [Y/n]: y
Next we need to gather a few pieces of information to create your configuration files
Project name: (one word, no spaces): myhello
path to build dir [./build]:
require login [false]:
URL for ajax server [http://127.0.0.1:8000]:
Your Name [bmiller]: Brad Miller
Title for this project [Runestone Default]: My Hello World
Log student actions? [True]: False
Done. Type runestone build to build your project
At this point you will have the following files and folders:
mynewproject/
_static/
_sources
_templates
conf.py
pavement.py
-
The
_static
folder is for things like images or javscript files. -
The
_sources
folder is where you will put your own writing. To start with there are a couple of examples files for you. -
The
_templates
folder is for styling. There is a default set of templates that match the runestone interactive look and feel. That is a good thing to start with. Once you become more familiar with the system you may want to customize the templates or even make your own. -
The
conf.py
file is used by Sphinx, and contains information from some of the questions you answered when you initialized your project. -
The
pavement.py
file is used for building and setting build parameters.
All of these files are important, and you should not delete any of them.
Next run runestone build
This command will create a build/mynewproject folder with an index.html file in it. If you want you can now run runestone serve
and then go to your browser and open up the following URL http://localhost:8000/index.html
Yay! You have a webpage. Feel free to explore a bit to get an idea about some of the components you can use in your lab.
Writing your Own Lab
OK, lets edit _sources/index.rst
Initially it looks like this:
=====================
This Is A New Project
=====================
SECTION 1: Introduction
:::::::::::::::::::::::
Congratulations! If you can see this file you have probably successfully run the ``runestone init`` command. If you are looking at this as a source file you should now run ``runestone build`` to generate html files. Once you have run the build command you can run ``runestone serve`` and then view this in your browser at ``http://localhost:8000``
This is just a sample of what you can do. The index.rst file is the table of contents for your entire project. You can put all of your writing in the index, or as you will see in the following section you can include additional rst files. those files may even be in subdirectories that you can reference using a relative path.
The overview section, which follows is an ideal section to look at both online and at the source. It is pretty easy to see how to write using any of the interactive features just by looking at the examples in ``overview.rst``
SECTION 2: An Overview of the extensions
::::::::::::::::::::::::::::::::::::::::
.. toctree::
:maxdepth: 2
overview.rst
SECTION 2: Add more stuff here
::::::::::::::::::::::::::::::
You can add more stuff here.
If you are not familiar with markup languages, this file should still be quite readable to you, and you can probably easily guess what most things do. Runestone uses a markup language called restructuredText. There is a very nice, short tutorial here.
To give you an idea of what you see in the example above, the section that starts with .. toctree::
is called a directive and it creates a table of contents for you. the maxdepth
part sets the table of contents to show sections and subsections. And the line with overview.rst
indicates that it is a file that should be included in the overall web page. More on all of this later. Our first task is simply going to be to wipe everything out, and start over. Using a plain text editor change index.rst to look like this:
=============
My Sample Lab
=============
Part 1: Turtle Graphics
=======================
In this section we will do the following:
* Create a turtle
* Make the turtle draw a box
.. activecode:: turtle1
import turtle
timmy = turtle.Turtle()
for i in range(4):
timmy.forward(100)
timmy.right(90)
Now it is your turn. Can you modify the program to make timmy draw an octagon instead of a square?
Now save the file and rerun the runestone build
command. Everything should build without a problem and you can now run runestone serve
and open up http://localhost:8000
from your browser. Notice that you can change the program and rerun it right from your browser.
It is probably obvious that you can create headings and subheadings. Unordered lists are created using *
and the runnable code examples are created by the .. activecode::
directive. The name turtle1 must be unique on the webpage, other than that it is not used for too much at this point. The rest of the activecode directive contains plain old python code, but it must be indented to line up with the a
in activecode.
All indented lines are included as the body of the activecode directive, regular text processing starts at the first unindented line.
There you have it. You have created a very nice little lesson without a lot of hassle. The Runestone and Sphinx tools take care of all of the formatting for you!
Giving Students Browser Access to the Lab
If you have your own webpage hosted on a school server that you normally use for class you can make your Lab available to the students by simply taking the folder mynewproject
inside the build
folder and putting that on your website. The folder is self contained and can be hosted on any web server.
If you know the IP Address of your own computer and you simply want to give let students bring up the webpage from your computer you can do that too. For example, lets suppose you know that your IP address is 10.0.0.23
Your students can get everything they need from http://10.0.0.23:8000/index.html
Coming Soon
There are many free web hosting solutions out there and you can also choose one of them and upload your project folder for hosting there. I’ll cover at least one of them in another tutorial. In fact I think I see a whole series of tutorials in the future on topics such as:
-
Making an online quiz for class
-
Making a lecture or presentation
-
Hosting your lab or quiz on github pages or another online service
-
Using your lab with runestone services
A Tale of two Scams
Gastronomic Negotiation
“Sir, you walk past me every night. Please give me a chance! I will give you an appetizer and free baklava for desert!” Really? I honestly don’t remember you. I’ve only walked down this road one other time. “Very Sorry” I say, “I’ve already got a dinner reservation back at Ocean’s 7. " “you will like it!” Says one of the patrons at the current establishment. Another ten steps down the road and we are implored to “Look at my menu.” A bit further on we are told “Sir, I have your table ready for you!” The idea that you can bargain for your supper seems so counter productive to me that I just cannot fathom it. Hey, lets see how little I can pay for something I’m about to ingest into my body. The incentives here are all in the wrong direction!
I can only imagine the conversations in the kitchen:
Waiter: One chicken and rice for the cheapskates at table five!
Chef: Oh great, now we know what to do with the gizzard and thigh meat that has been sitting on the floor all night!
No Thank You I will be more than happy to pay a price that puts the chef on my side.
Waiter: Chef the generous folks are back at table seven.
Chef: Great, tell them to order the veal, I’ve got two extra tender pieces I’ve been saving for my best customers. Oh, and bring up that 2011 Rombaur Chardonnay from the cellar, I know they will love that.
I think we can all agree on which chef we would rather have cooking our food.
This whole hawking the restaurant thing has been an ongoing saga since we arrived in Istanbul, and we even experienced it in London a couple of weekends ago. I don’t remember it being the case in Vietnam or Morocco, and certainly not in Malta, but maybe this has more to do with the onset of high touring season than our location. Now, this is not really a scam (although we have heard stories of the old bait and switch ) so much as an intro to the two things that happened to us today.
Cruising on a Reputable Ferry
Our plan for the day was to take the Ferry up the Bosphorus river to the mouth of the Black Sea. You get to see a lot of Istanbul along the way, then the ferry stops for a couple of hours so you can have lunch or do a little hiking and then comes back. As usual Jane had it all planned out, including a discount for using our museum passes. When we arrived at the waterfront we were immediately accosted by the usual crowd of tour people trying to sell us one of their packages. – two hour boat trips, three hour boat trips, six hour boat trips… “No, we are going on the ferry!” we would say. “But I can leave sooner. I will take you to the same place, wait for two hours and bring you back. My boat holds 80, it will be much nicer than the ferry and 800 people!” Hmmm, we were intrigued, and a bit horrified that we were even considering this option. But after a bit of negotiation, and multiple confirmations about our destination and pricing we decided to risk it. The captain even threw in a 50% discount on coffee at the nearby snack shack. Run by a relative no doubt. “Just wait here” we were told. So we waited and watched them try to work their magic on other passersby.
After a while, one of them came up to talk to us.
We cannot take you. I cannot do the trip for just your group. It will be better if you take the ferry, down there. There are not enough passengers today, because the bike race is keeping them all away from here. I am sorry.
It was true, there was a big Tour of Istanbul bike race in town, and the weather was a bit dreary, so the pier was sparsely populated. Which also meant that the ferry was not nearly as crowded as Jane’s research had led us to believe it would be. So, we carried on with our original plan, got our tickets to the ferry and were on our way.
The cruise was interesting, we got to see some castles, and some amazing real estate. And even a container ship that originated from Valletta! We just can’t get away from Malta now. Here is a little slideshow of some photos on the tour.
The shoeshine redemption
After the cruise we had to make our way back into the spice market to buy some of the delicious candy covered “fistik.” That is peanuts covered in a syrup and rolled in sesame seeds. We discovered these our last day in Morocco, and were only too happy to find out you can buy them in Turkey as well. Some of the group wanted to hit the archeological museum while others just wanted to wander the spice market some more. So we turned them loose and decided to wander our own way back to the hotel.
As we were passing up one street that was very lightly travelled a shoe shine man dropped his brush in front of us. So, we picked it up and called out to him to give it back. He thanked us and we were on our way. Suddenly he called back to us. He sat down and and said “please,” with a look that said let me repay your kindness. We thought how nice, one good turn deserves another. But I had on my hiking shoes, which are not “shineable” and so he offered to shine Jane’s black shoes which were definitely in need of some love after all of our travels. He finished up Jane’s shoes and then insisted on brushing mine with a toothbrush and some water – which certainly did not hurt. About this time both Jane and I reached into our pockets for a few coins to tip the guy.
Imagine my surprise when Jane offered him several one lyra coins and he said “no, paper” What? He doesn’t want coins he wants paper money? Slowly it dawned on me that we had been played this whole time. He now wanted to be paid the full amount for two shoe shines, which took less than a couple of minutes. I added my coins to Jane’s and dumped them in his hand and we turned and walked away. I guess we both got half price shoe shines, and nine turkish lyra (about $3). Lesson learned, and a small price to pay for a story to add to the blog.
Istanbul
“You want a fish!?” Said the night watchman with confusion. “No,” I said, “do you have a cork-screw?” doing my best imitation of screwing in a corkscrew and then pulling out the cork. “Ah! One moment” And off he went, out the front door and into the restaurant across the street. Moments later he was back with an excellent corkscrew, which I used to uncork the bottle we had purchased around the corner and then returned to him. After I got back to the room I could not contain my laughter any more. A fish? The fact that he borrowed the corkscrew from the restaurant, which was the very thing that Jane had suggested in the first place. An idea that I soundly rejected. Hi, I know that we didn’t eat dinner here or buy anything from you but would you mind terribly if I borrowed your corkscrew to open the bottle of wine I bought at the market around the corner? I just can’t imagine myself saything those words.
A glass of wine was a great way to cap off what had been a very full day of touring around the old city of Istanbul. Once known as Constantinople, it was the head of the Christian world. Then under the Ottoman empire it became a Muslim country. Today, Turkey is largly muslim, but the government is a secular government. We began with a tour of Topkapi Palace were we visited the treasury, and the Harem and saw the Sultans private rooms. We also visited the tulip gardens. It is an interesting fact that although Holland is usually celebrated for its tulips, the Dutch took them and transplated the tulips from Istanbul originally!
In the hall of mirrors, I told students about recursion.

They did not care.
From the Palace we moved on to the Blue Mosque, one of the icons of Istanbul. There was a really long line to get in, but we made the best of it, while Ben ran into someone with nearly the same last name as him in line. He turned out to be from wisconsin, and has relatives in Decorah. Small world. The line was rather entertaining, as standing in line appears to be optional for many tourists here in Istanbul. However all of the guides team up to try and send the line jumpers to the end. It is interesting to see the reaction of the people who clearly know they are being jerks and getting called out for it. Once we got inside it was amazing. It is so hard to describe this space, like St. Peters in Rome it is just so large that you cannot hope to capture the scale of the whole thing.

Across a very large square from the Blue Mosque is Hagia Sofia. This was once the largest Christian church in the world. Of course it was later supplanted by St. Peters and others. The really interesting thing about Hagia Sofia is that it was converted to a Mosque.
Check out the apse of the church in this next picture. Notice that the alcove is not centered. This is because even though the church was sited east to west, the axis was just eleven degrees off of the line to Mecca. Because Muslims do not allow for images in their mosques all of the mosaics were covered in whitewash and then painted over in more typical muslim designs. Except for the Seraphim. Look at the two images below:


Notice that the only difference here is that the face was painted over with a symetric diamond shape. Some of the mosaics that they have begun to uncover and restore are really stunning.
Finally, we visited the cistern under the basilica. You may remember this from James Bond, “To Russia with Love.” It is just this giant underground place that used to provide water to the city. But now, it is just stunning:
After all of that we headed back to the hotel for a short rest before we took the students out for a group dinner. We were all plenty exhausted after such an interesting day. Tomorrow, the Grand Bazaar, the Spice Market, and Taksim square.
biking in london
Think you have done it all in London? The museums, the London Eye, the changing of the guard, the Thames, the list goes on. Here is a great way to spend a day, for almost no money. Rent a Barclay’s bike and head for the Regents Canal. This is exactly what we did and it was a fantastic way to enjoy London away from the traffic and the museums.
You’ll discover a whole different culture and way of life when you bike along the canal. There are hundreds of narrow small barges that people live on or work the canal on. We saw all walks of life that appeared to be barge owners, from the very wealthy to those who reminded us of the people in Veitnam who lived on their boats with no heat or running water.
The path is fairly narrow, so you have to be alert or you could get wet, which would definitely spoil an otherwise good day. Also you need to remember that pedestrians have the right of way, so just be polite, use your little bell, and don’t go too fast! We didn’t have any trouble, and we enjoyed all of the scenery and the side trips that are available from the canal path.
On day one we started from Angel, and followed the path toward the London Docklands. It was warm and scenic, and gave us a great taste of barge life on the canal. We wandered around the (free) docklands museum, hoping to learn a bit more about the canals, but were disappointed. The docklands museum is actually a very interesting history of London, so that was not disappointing, just that the museum didn’t have anything to say about the canal.
On day two we went the other way, and ended up having lunch in the rather bohemian Camden Market area. We also took a side trip around the zoo and the royal gardens to see some incredible villas that have been built right along the canal.
I love London. It is probably my favorite big city in the world. I think I have visited at least six times. So I have done the museums and most of the good tourist attractions. My top five would be:
-
The Transportation Museum in Covent Garden
-
The science museum in Kensington
-
The Imperial War Museum
-
Our visit to Parliament
-
Westminster Abbey
This was a really great alternative way to spend the better part of two days enjoying London culture from the perspective of a cyclist.
As a bonus part of this post, I do have to admit that I had never done the London Eye until this visit. It was definitely a fun way to get a view of the city. Jane and I both did a little bit of experimenting with time lapse videos on our iPhones. I wish I had brought my tripod so I could have captured the entire circle.
fa cup semifinal
The first words I read as my phone synced up email in the passport control line at Luton were “still no tickets.” The message went on to explain that the tickets were still supposed to be delivered by eleven PM by someone named Jamie who is running behind schedule.
Getting tickets to the FA cup game is no easy trick. All of the tickets allocated to both clubs (Arsenal and Reading) were sold out to season ticket holders well in advance, so visitors like us are left trying to buy tickets online from third parties at crazy high prices. Yes, its crazy to pay over $300 to go to a soccer match. Yes, I paid it willingly! We did some research, so we think this is a reputable source of tickets but you have to put a certain amount of trust in strangers in order to get your tickets.
After the train ride into Farringdon station we walk over to the apartment we had rented through AirBnB, another exercise in trusting strangers, and are rewarded with exactly the fantastic two bedroom apartment we were promised. The owner met us at the door and showed us around. He had purchased us some breakfast items, and some fruit, and a nice bottle of wine. The apartment is on a Kings Mews street, which is nice and quiet so no problem with street noise either.
Jim and Josh arrived a few minutes later with Jim’s luggage. We got a two bedroom so we could share with Jim and so he would not have to spend the entire long weekend in Josh’s student housing. Which after seeing it, I am glad we did!
As 11:00 came and went, we still had no tickets. So we were preparing ourselves for the worst, which is really not too bad considering our apartment has a 56 inch big screen for the backup plan. We were all a bit nervous, but found some good entertainment value in the chat that Josh had been having with customer support at the ticket agency.
Cust Serv (23:35:25): How can I help you?
Cust Serv (23:35:29): hi
JMS (23:35:45): Hi Tina, we spoke earlier today about my order #XXXXXX. The tickets still haven’t arrived yet.
Cust Serv (23:37:07): I know - i have been told by Jamie that the tickets will arrive at your house by 11am in the morning as he have to do lots of deliveries and was promised by him they will be with you at 11 at latest
Cust Serv (23:37:16): please accept my deepest apologies
JMS (23:37:36): 11am? This is now the fourth promise made by your company to me in the past two days.
JMS (23:37:40): This is unacceptable.
…
JMS (23:46:05): Thanks for your assistance on that. I know it’s not your duty, and I am clearly angry, but I will not subject you to that anger.
Cust Serv (23:46:24): A refundable situation sir is where you did not get your goods as ordered and in time to watch the match
Cust Serv (23:46:39): but once again it is not my decision as you understand
JMS (23:46:56): I know that that’s a full refund, but I think the stress caused here warrants a special situation.
JMS (23:47:11): But yes, I won’t take it up with you! My mistake.
…
JMS (23:52:29): I don’t think so. I’m sorry you’ve had to deal with me today (and plenty others like me I’m sure!) during this busy day. I know you’re trying your best, but like I said earlier, my family flew in for this match and would ruin their holiday if this falls through.
Cust Serv (23:52:54): sir - I must say that you are one of the most kindest people I spoke to in this chat support ever!!!
JMS (23:53:17): Haha well I’m glad to hear that. I’m sure customer service can be very testing at times.
Cust Serv (23:53:40): you are very polite and kind despite being angry and dissapointed but you never had it on me at any point of our conversation and I thank you for that
JMS (23:54:26): Well I’m glad it has been a (relatively) positive experience. Hopefully I won’t have to chat anyone at your business tomorrow at 11:15! Good night.
Cust Serv (23:54:49): I hope that the only chat you will have tomorrow is to say that you have got the tickets as ordered sir
Cust Serv (23:55:03): good night sir- sweet dreams
Sweet dreams indeed! By 9:00 the next morning, we got the good news that we had tickets in hand. The problem was that they were not in the category we had paid for. They were not bad tickets! In fact they were really good. Row 8 on the first level, but they were in the corner so we would be looking at the field the long way. Since the website said tickets were fully refundable if you did not receive tickets in the category you paid for you were eligible for a full refund. So we got online and complained a bit. The first response was that we had been upgraded, and that these were actually better tickets than we had ordered for this game. LOL.
Shortly after this conversation we received a call saying that they had tickets for us in the area we had ordered. However these were way up in the nosebleed area, and we would be split two and two. about this same time we also noticed that two of our tickets had post-it notes attached with the note that they were Junior tickets. Hmmm, maybe we got the wrong tickets? Maybe they need to swap with us to get these to some guy and his two kids. Well, we reasoned, we don’t have to meet this guy and get the other tickets, possession is 90% of the law. So we began to think about breakfast. But before we all met up for breakfast, we got an email from Karen, who had been woken up at 3AM back in the US by a call from Thomas, who wanted us to call him on his mobile.
It turned out that Thomas also had tickets, but said they were “VIP tickets.” Karmic payback for being “one of the kindest people I spoke to in this chat support ever”? Maybe! Two of these new tickets included access to a table in the Bobby Moore hospitality area (free pre-game meal and drinks), and two of them were “merely” on the Wembly Gold (free budweiser at halftime) level. So, in less than 12 hours we had gone from zero tickets to tickets that were beyond anything we could have imagined. These tickets would be delivered to us by another delivery person, and then we were to meet Thomas near Wembly to return the four we originally had received. The new courier arrived at our apartment in a shiny white Range Rover, and delivered our packets of tickets. They all looked legit, and we all had great seats right on the halfway line! Now all we had to do was find Thomas and hand over the old tickets. Those young children might get to see the game with their dad yet.
As we made the walk from the Wembley tube station towards the stadium we had many opportunities to sell our four extras. We thought that we might even make a profit, but our honesty and the fact that we had VIP tickets in hand, put us in the mood to carry on to our meeting point and keep up our end of the bargain. It is interesting to think about the business model and operations of a third party ticket seller. They are selling the tickets to us at a significant markup, but the tickets have to come from somewhere. So they have to be able to forecast in advance how many tickets from each area they will probably have, and then they need to get those tickets from the original owners to the new buyers. Its no wonder a lot of the transactions come down to the wire.
Our tickets allowed us into the stadium well in advance of the game so we had plenty of time to soak up the atmosphere and check out all of our food, beverage and gift shop options. As we were standing in the gift shop I saw one young man in Reading blue from head to toe, with a big foam blue finger call out to his dad. His voice was shaking with excitement as his big blue finger pointed to a rack of merchandise. LIVERPOOL he said with longing. The dad just melted into the ground. I guess you can’t control who your kids will choose for their football team, even in England.
As a fan of the Men in Blazers show, I was very excited to see that meat pies were available everywhere in the stadium. Tom’s pies to be exact. So I enjoyed a very nice Guinness and roast beef pie as a pre-game meal. It is true, they are quite good. flakey crust, stringy tender roast beef and gravy on the inside, just like Sunday dinner back home. So, here is the obligatory food shot! You might also notice the betting sheet on the left side of the photo. You can bet on almost anything right there at the game. Final score, who will score, when will they score, who will score first, etc. It was too complicated for us so we left the betting up to others and saved our money for sausages and more food later.
The game itself turned out to be good. It wasn’t Arsenal’s best performance of the year. But I blame that on Wenger for going away from the lineup that had us winning nine in a row. I would not have substituted Welbeck for Giroud, but I am not the manager. Nevertheless Alexis scored a great goal just before halftime and I was feeling good. A strong pep talk in the locker room and surely we would come out and seal the game with a couple more goals. It turned out that the opposite happened. Reading came out fired up and scored an equalizer, and we looked like we were playing “not to lose” which is our worst strategy. At the end of regulation it was Arsenal 1 - 1 Reading. OVERTIME! We were really getting our moneys worth out of these great seats. As long as we win in overtime and don’t go to penalties life is good Which is what happened. shortly before the end of the first extra period Alexis scored again. It was kind of a sad screw up for the Reading keeper, but a victory is a victory!
On to the FA Cup Final!