Monthly Archives: November 2013

politics tech

Bret Victor’s ‘driving principle’: necessary but not sufficient

A little while ago I finally got around to watching Bret Victor’s “Inventing on Principle”. Transcript here.

The main realization that Brett is trying to get across is that the most successful and most satisfied humans are those who have devoted their life to a driving principle. An example of this is would be Richard Stallman with free software, Alan Kay with a goal to ‘amplify human reach, and bring new ways of thinking to a faltering civilization that desperately needed it’, and Elizabeth Cady Stanton with Women’s Suffrage / equal rights for all. I can see how the stress between the world’s present, imperfect implementation of these ideas and the unrealized, perfect world where the ideal is practiced would give meaning to your life’s work. With this tension, you have a purpose, to fix this divergence.

I have some issues with the talk, but first, I did take his instruction to try and find your own driving principle seriously. I’ve found that my own driving principle is a desire to reduce waste of all kinds. This is perhaps an unsurprising principle for someone who is an engineer, but I think that this desire is one reason why I am a software engineer in the first place! Thinking back into my past, one incident stands out as a perfect example. I was about 13 years old at a summer camp, and I could hear these two other campers from New Jersey around the corner from me who were finding something totally hilarious – laughing and giggling continually. I turn the corner and see the amusing thing: they were pressing the soap dispenser and watching globs of pink gooey soap drop onto the bathroom tile floor. I remember getting very angry at the waste of it all, which of course made the campers start taunting me with the waste far longer than they otherwise would have if I hadn’t come along. I had a grudge against people from New Jersey for a very long time after that, although I have gotten over it! Something about entirely frivolous waste really got me. At least other times people can justify waste of material through the need to not waste time, but in this case their enjoyment could have been gotten by doing any number of non-wasteful things at camp.

So what does this principle to reduce waste mean? Well, it’s not just for CPU cycles. In fact I am willing to burn as many  cycles as necessary to reduce larger causes of waste: waste of people’s lives, their time, their potential, the waste of nature for frivolous reasons, suffering as a cause of a waste of people’s and animals’ lives, etc. When I was traveling in India I can’t count the number of people I saw working worthless jobs or working no job at all. This would be fine if the people were not miserable doing such- in some people’s versions of utopia humans need to do no work at all, and I have no problem with that vision if there is no suffering. However India has many hundreds of millions starving and undereducated; when banks hire a guard to sit in an ATM and open the door for people, it strikes me as wasteful and morally wrong. It is clear that our priorities (and we are a truly global world now, ‘our’ refers to Western Capitalism) are badly skewed from the most beneficial and decent true path, where the lives, health, potential, and time of hundreds of millions are not written off as how the world works. Even in the developed world, you can see others coming to the same conclusions about our modern desk jockey jobs. The conclusion that these jobs are a waste of so many things, and an ideal world would be without them.

It felt good to find this out about myself, and explained some things about why I am interested in some jobs and projects over others in my own career. I would highly recommend trying this out yourself, to give yourself a guiding line to follow in your career. It has also pushed me to get a little more serious about my own inefficiencies. One thing I’ve been trying to do is reduce meat consumption, a hugely wasteful in many ways choice over vegetable alternatives. As I always say, if I was a better person I would be a vegetarian. Well, I won’t get there yet, but I’ll now promise that by the end of December I will eat meat on 3 days or less a week.


Finally, I would like to strongly disagree with some aspects of Bret’s talk. While inspiring, I found the talk way too tech-self-centered and arrogant. Bret seems to think that we can simply choose some pet peeve in the technical space and this will translate to a positive, world-changing (even if in a small way) contribution to society. He uses moral terms to describe working on these chosen principles:

My point here is that these words that I’m using: Injustice, Responsibility, Moral Wrong, these aren’t the words we normally hear in a technical field. We do hear these words associated with social causes. So things like censorship, gender discrimination, environmental destruction. We all recognize these things as moral wrongs. Most of us wouldn’t see a civil rights violation and think “Oh good, an opportunity.” I hope not.

Instead, we’ve been very fortunate to have people throughout history who recognized these social wrongs and saw it as their responsibility to address them. And so there’s this activist lifestyle where these persons dedicate themselves to fighting for a cause that they believe in. And the purpose of this talk is to tell you that this activist lifestyle is not just for social activism. As a technologist, you can recognize a wrong in the world. You can have a vision of what a better world could be. And you can dedicate yourself to fighting for a principle. Social activists typically fight by organizing but you can fight by inventing.

I find this misguided. This formulation of the problem totally avoids responsibility of the wider moral implications of creating better tools, and Bret gives no advice to make sure that following your principle does not cause unforeseen issues. At the very least there should be advisement to first, do no harm. You could see a young Oppenheimer hear this talk and decide to devote his life to “unlocking the power within physical materials for human use”, or for a contemporary software developer to follow a principle to “help machines perceive the world in all ways” and end up programming military drone cameras. Without this thoughtfulness towards the greater good of human society, there is no authority whatsoever to use the words “Injustice, Responsibility, Moral Wrong”. Anyone who thinks that these moral words are valid for Bret’s morally agnostic principles have fallen prey to the arrogance of the tech world: that whatever is beautiful and right in our world must be beautiful, proper, and needed in the wider world. So while I enjoyed the talk and found it very personally useful, I would ask Bret to think about the greater implications of such a narrow focus in your life without thinking about the surrounding context. I would encourage other software developers to make sure that they are also not falling into the software engineer’s fallacy of a beautiful technical system translating to a morally beautiful real-world result. Yet, I would still encourage others to try this exercise and spend some time watching Bret’s talk.



A great talk, this helped me discover deep-seated beliefs I hold. It can help us all direct our careers- watch his talk and perform the exercise he asks of us, to try to find your own driving principle. However, the moral weight Bret attributes to following these principles is totally unwarranted – you need to closely watch the external effects of following your own driving principle and first, do no harm. If you do this at the same time you are answering your own driving principle, however, I think you are well on your way to a rewarding life.

green tech

Automated monitoring of web pages using Page2RSS, Feedly and IFTTT

So you are an activist trying to keep a pulse on the community you’re serving. Unfortunately, you have little time and a lot of web pages, groups, and updates to keep track of. Luckily, by using a few simple tools, you can automate away much of your busy work, leaving you more time to tackle the hard stuff.

This post will show you how to use these tools to automatically monitor any web page to notify you when there are changes you might be interested in.

The steps to monitor any page are:

  1. Identify what changes on the page, and what keywords always are present during the change
  2. Create a Page2RSS for that page
  3. If simple enough, subscribe with Feedly. If not, create an IFTTT that filters based on one of the keywords and send to Feedly.

At step 3, you can also email yourself with a change, post to twitter, etc- anything that you can do in IFTTT.

Quick question, Colin: what does all that jargon mean???

Yes, there are some new terms here. Let’s make a quick glossary:

RSS feed: a way to organize updates to websites in easily-automatable and simple, bite-sized chunks

Page2RSS: An awesome web service that checks in on a page every now and again and packages the difference between the versions of the website into an RSS feed

Feedly: A service like (the now dead) Google Reader which you can use to collect items from RSS feeds. It takes care of reading the RSS feed and presenting the update in a human-readable form.

IFTTT: “If this then that”, a simple service that can hook together parts of the internet to make you a super-activist. It is worth learning this tool very well.

What you’ll need:

  • An IFTTT account, with the ‘Email’ and ‘Feedly’ channels activated
  • A Feedly account or an email account
  • A Page2RSS account (optional, but useful to organize)


page notify workflow

Three different options to get notified about changes

The examples below follow these three tracks. The simplest is subscribing to all changes to the page using Feedly, while the most complicated is using IFTTT to filter out only the changes you want to be notified by. Don’t worry, once you get the hang of things it’s really very simple!


Herman, MO – simple any change to page and email:

In this case, we are just checking for any change to the city council page, and we want an email any time it changes. This represents the  yellow track above.

Here’s the Herman, MO page:

Herman, MO City Council Page

Herman, MO City Council Page

We want to be notified of any change to this page. Let’s first turn the page into an RSS feed, using Page2RSS:

create rss monitor

Paste in the URL of the page you want to monitor here, or use the Chrome extension

(If you install the Chrome extension you can cut down your manual work even more – log into Page2RSS and download the extension to boost your productivity!)

Herman City Council to RSS

Turning the city council page into an RSS feed

Now, if we want to just add this to our Feedly stream, we can just click on the ‘Feedly’ button on that page and we’re done! This is the purple track in the workflow above.

However, for this example, we want an email every time this page changes. Click on the ‘RSS’ button and copy the url:

herman rss feed url

Copy the URL here

Now head over to IFTTT. Let’s create a new ‘recipe’ choosing the RSS ‘channel’. The icon looks like this:

rss icon

Look for this icon when choosing a trigger ‘Channel’

We can paste the URL saved from Page2RSS into the creation box:

add rss trigger in IFTTT

Paste the RSS feed URL from Page2RSS

IFTTT Choose Action

What you should see after creating the RSS Feed trigger

IFTTT is a tool that allows you to automatically take action without human intervention. You can specify different ‘Triggers’ which then kick off ‘Actions’. If <Trigger happens> then <Take action>. “If this, then that”. In our case: “If the RSS feed is updated, email me”. So choose the ‘Email’ Channel for our ‘Action’. You will then see:

choose email

After choosing the ’email’ channel

edit email action

Edit this to suit your preferences

There will be some confusing text already entered into this page for you. Don’t delete what’s here but:

  1. Add a subject that makes sense to you before the “EntryTitle” text in the subject line. In this case, I added “Herman, MO City Council”
  2. Make a link directly to the city council page in the email- this will save you time later

Click ‘Create Action’, and you’re done! Whenever that page changes, you’ll get an email. This is the yellow track in the workflow above.

Columbia, MO – filter by ‘Minutes’ and post to Feedly:

I want to know when the minutes from the latest city council meeting of Columbia, MO, are updated. In this example, I’ll show how to only alert when the page changes in a specific way. I will also have the update post to Feedly instead of emailing. This is the red track in the workflow above.

Let’s take a look at the city of Columbia, MO:

Columbia, MO City Council

Columbia, MO city council page

We can see that there are three likely items that change on the page on a regular basis:

  1. New meeting dates (e.g. December 16, 2013 | Columbia City Council Regular Meeting)
  2. Agendas are posted, as a link with the word “Agenda”
  3. Minutes are posted, as a link with the word “Minutes”

Let’s say we only care about when minutes are posted, so we don’t want to just subscribe to any changes on the page.

First we grab the URL and go to


Get page2rss link from council page

Press the ‘to RSS’ button, and you should see:

Page2RSS Results

Page2RSS Results

Great. If we wanted to just subscribe to this feed, we could click on the “Feedly” button on this page (the purple track). However, in this case we don’t want an update when Agendas or future events are posted, so we need to grab the RSS link and head over to IFTTT. You can press the ‘RSS’ button in the “Subscribe to Feed” section and copy the link:

Page2RSS RSS link

Page2RSS RSS link

Head over to and create a new ‘Recipe’ using the RSS ‘Channel’:

IFTTT create

Create a new recipe in IFTTT

Choose “New feed item matches”

Filter RSS in IFTTT

Filter RSS match in IFTTT

We’ve completed the ‘this’ portion of IFTTT, now we need to make the ‘that’ action:

IFTTT Choose Action

Choose the ‘then’ action. Any ‘Channel’ is possible.

Let’s choose to publish to Feedly, although you could also have it send you an email you, tweet at you, text you, whatever you want!

Choose your IFTTT Action

Choose your IFTTT Action

Choose “Add new source”, and perhaps edit the URL to make it easier for you to read. In this case I added ” – Columbia City Council – Minutes”:

Change title of Feedly URL in IFTTT

Change the title of Feedly URL in IFTTT to be easier for you to understand

Finally, accept the new recipe, again perhaps changing the ‘description’ field to be a little more human-readable.

Accept IFTTT recipe

Accept IFTTT recipe

That’s it! Whenever the Columbia, MO city council updates their minutes, a post will appear in your Feedly stream.

You now only need to look at your Feedly page to see which city councils have updated their minutes- no more clicking though to each town and scanning the site to see if there’s been an update.


Using Page2RSS, IFTTT, and Feedly/Email, we can automate away some of the most tedious parts of activism. This helps you stay on top of any situation more quickly, and saves you time to work on more important things. Share this with your fellow activists- let’s use technology to improve our reach for the same amount of effort!

If you have any questions, please comment below- I’d love to have feedback on how to improve this guide.