I'm Alex Kearney, a PhD student studying Computer Science at the University of Alberta. I focus on Artificial Intelligence and Epistemology.


Thoughts on what I will and won't do in 2020: reclaiming attention and quality time.

Dylan and I had a really busy end of the year. Between his family's Christmas parties and my family's Cristmas parties, and our friends' Christmas parties there wasn't room to breathe. During the chaotic final weeks of 2019, I noticed something: In spite of the hectic social schedule, I felt way better than most of the preceding year. It had been over a week since I looked at slack, at reddit, or any real idle media. You know, the stuff that fills the gaps in life when you're too tired or too burnt out to do anything else.

I want to keep that feeling going. Here's my analysis of it and plan to keep the party rolling in 2020.

A Disclaimer

A grad student once told me it was a shame that I spent so much time knitting. The implication being that time knitting is time I could've spent doing research. The joke's on them. The time I spent knitting left me relaxed and ready to do good work while draped in cozy, bespoke knitwear.

I'm not on a quest to become a technological Ubermensch. I'm not trying to optimise my life to make my code that much better. I just want to feel good and do cool things, not chase an impossible ideal.

Modified Project Cyclops

First, I'm going to be more careful with how I spend my attention.

CGP Grey had a great post on attention where he introduced project cyclops. Grey noticed that he had been fractured by so many attention grabbing things. It culminated in an announcement that he was going to take a hiatus from social media to recalibrate. Grey wanted to be able to focus on meaningful tasks for long periods of time, and felt that activities like listening to podcasts, or cruising social media were training him to not be able to maintain that focus.

Figuring out what's splicing attention resonates with me. I've thought a lot about what's bogarting my time over the past couple of years, and have made some mostly positive changes. Two years ago, I felt that online conversations were pulling me in too many directions. That I wasn't able to get as much done because of online chats. I used to be a regular on a number of IRC channels, and spent too much of my time juggling between various messaging apps. By no means was in the top quartile of messagers, but I found it straining.

I resolved to spend less time jumping between different online chats. If I was in the middle of something, I would finish that up before tabbing over to a conversation. Emotionally, it was an overwhelming relief to trim online conversations back and focus on the people and activities that are physically around me.

Last year I took my instant-messaging hermitude a step further and turned off most of my notifications. It hurts some of my relationships: friends that are far away are sometimes more difficult to keep in touch with, but the laid-back communication style feels more healthy. When I'm talking to my far-away friends, I'm concentrated on them. I don't feel like I'm being pulled apart at the seams as much.

As helpful as this quietude has been, I've found attention is not the whole picture. Even though I've cut out a number of attention-eating activities, I've never recovered the feeling of productivity and ease that I've hoped to.

It's not just about cutting out activities that are productivity-eaters, it's about replacing them with more restorative activities.

Reflecting back on the holiday season, I didn't feel better just because my attention wasn't on reddit, or I wasn't reading twitter: it's also because the activities that were replacing them were better quality---at least to me.

More Than Attention

Not all leisure is created equally. It's not just about how an activity fractures attention, but what you get out of an activity. The loss when spending time on social media isn't just a lack of productivity. It is also a loss of time that could have been spent on things that make me feel better.

There's a limited amount of not only time, but also energy you can spend on projects. To use a metaphor: you can only drain a battery so much before you have to charge. During some of the more stressful parts of 2019, the biggest issue was not time-management; the biggest road-block to some of the projects I was working on was simply that I did not have the energy to continue working on them.

Not every activity is equally restorative. For me, reading reddit for half an hour doesn't feel as refreshing as, say, knitting for half an hour. Knitting is a better charger than in the battery-filling game than twitter is. The downside of all of this is, the more I'm spending time taking short breaks, the closer I'm getting burn-out.

Working through lunch and spending little chunks of time throughout the day reading forums is a net-negative. I'm getting closer to burn-out even though I might be spending the same amount of time relaxing.

I also need to set better expectations

The chief motivation for these small, useless breaks was to get more done. This is a result of my terrible habit of setting unrealistic expectations for project milestones. I was always crunching to get things done.

In grad-school, you're largely responsible for managing your own progress. From the project timelines, to the actual grunt work, to the administrative overhead. It's just you. You're the PM, the dev, and the administrator.

I was crunching because I was constantly putting the bar too high. The pressure wasn't because rampant procrastination. There were no looming deadlines. I was crunching towards my own self-inflicted nothing.

As a result, I was never really satisfied with progress made. Even when I was making progress, it was less progress than I wanted, so it wasn't good progress.

It's demoralising.

In short

  1. No working through lunch
  2. No reddit
  3. No twitter
  4. Slack and Email at scheduled times of day
  5. Do one thing at a time (no split-screening; no multi-projects)
  6. Double the amount of time you allocate for a task
  7. Build breather room into your schedule

But What am I Going to Do?

This is a lot of talk about what I'm not going to do 2020. What about the things I am going to do? I feel best when I'm building things. In 2020, I'm going to build more things.

I want to make

Last year I worked on a few physical projects. I knit a number of sweaters and socks. I hauled my camera around with me and snapped some shots I'm proud of. I got back into pottery. I took some classes in new crafts.

Working on all these projects was restorative.

I want to continue this into 2020 and focus on doing more with the skills I have, rather than forcing myself through the pangs of early malformed projects.

I want to code

Last year was a big lull for programming: especially personal projects. There's an oddly strong correlation between how grumpy I am and how long it's been since I've worked on a coding project. The best way out of a funk is more programming.

Unfortunately, I've not had much more work to do on my indieweb blog, and I've haven't had many small one-off projects to work on. A rare exception to this coding drought last year was ParityBot. At the beginning of the year I was asked to come help build a twitter bot that tweets out positive messages when it detects hateful tweets. What separated ParityBot from other projects was that I could hop-in and collaborate for a short period of time, and jump out when I was done. It was focused, and I didn't try to over-architect things.

ParityBot was a small project with a clear, achievable notion of success.

In 2020 I hope to tackle more projects that can be either 1) chunked out into small, satisfying pieces; or, 2) can be done over the course of an afternoon.

I want to write

I wrote a bit more last year about personal events (like travelling) and academic things (like my notes): I took hodge-podge notes and turned them into tiny academic posts. This has been useful for me (it forces me to clarify my notes) and it also has been useful for sharing my literature reviews with other students.

This academic-posting two advantages: 1. It's a good way to solidify thoughts. 2. Writing more is the path to writing better.

This year I hope to be more fastidious in my conversion of my lab-notebook into useful posts.


2019 is a wrap Here's what I did last year.

This was a busy academic year. I co-organised a workshop. I took a big leap in my work and submitted some philosophically oriented work to RLDM [1,2], one of which was chosen for a spotlight talk. I received a fellowship from Borealis AI for 2018-2019. I contributed to a few other projects, including a twitterbot for combating online harassment and an exploration of my meta-learning method in a continual learning robotics setting. I ended up presenting at a philosophy workshop in Porto.

Most importantly, this year I passed my candidacy exam. The only thing separating me from completing my PhD is my thesis.

I did some career development this year. As I chart out the end of grad-school, I've started queuing up internships to try a few roles out. Oddly, all of the work I've done is research-oriented. I've never had an industrial job before.

I managed to snag a ticket to Grace Hopper Conference. Last year I spent most of GHC managing the group of. While rewarding, I didn't really get to focus on experiencing the conference myself. This year, I got to meet a lot more people, and have a much better idea of how I could fit into different organisations.

I've put off internships mostly because of the interview process. Getting prepped for technical interviews and taking the time to actually sit them means re-directing a significant amount of energy away from the research and projects I'm working on. I can't do everything all the time. I finally bit the bullet this year and did some interviews. Although a small thing, it's a big milestone for me. It's not as scary as I made it out to be. It even paid off: I'm going to be working at Twitter for a few months in the new year and have more interviews queued up.

I worked on more diverse creative projects this year. I tackled projects in some new mediums and some old mediums. I used to be a very active potter in high-school and one of my greatest regrets is not keeping it up. Pottery is one of those meditative arts that takes all of your focus and attention: a good diversion during the crush of grad-school life. This year, Maren and Anna invited me to come join their pottery class. Seven years without practice, but I've still got it.

I tried new crafts including natural dying and embroidery and knitting socks. In the final hours of 2019, I even managed to help Kat spin up a knitting machine. Hopefully the skills from these humble projects will prove useful in 2020.

I got a lot of travelling done this year. There was hardly a month where I wasn't on the move. Some of my trips were big productions, years in the making. I went to Japan for three weeks after my candidacy exam. This was my first trip to Asia and the biggest trip since I went down the Danube in 2016.

Some of my trips were spontaneous. Dylan and Mikayla invited me sea-kayaking around the Johnston Strait, where we saw orcas and waded through the mist.

Most of my trips were tacked onto work-related trips where possible. The workshop in the Barbados had opportunities for me to go diving for the first time in four years. I went to RLDM and spent time meeting up with friends and enjoying the art galleries. I eeked out a chance to see the Tate modern for the first time in ten years during a layover. I presented some of my work in porto and had a chance to explore the city while visiting with a research group. I take the chance to explore where I can get it.

I really improved my photography this year---especially travel photography. I spent a lot more time carrying around a camera, and it shows. Even just slipping my little point-and-shoot in my pocket has provided a lot of opportunities. It helps that Dylan is patient and encouraging: sometimes even joining me to freeze late at night on a quest to get a good shot of the stars.

I picked up development on my indieblog. I started the year off trying to add more social protocols and interface better with federated sites like mastodon. After wrestling with web-specs and confirming, yes, I was implementing them as specified I gave up. I learned a lesson from this: working on more protocols is fun programmings sake. Adding webfingers and trying to doesn't make, nor does it really change the accessibility of my blog.

After learning this lesson, I spent the rest of the year making minor chages to encourage better usability. The bulk of this turned out to be small UI changes to make it more comfortable to post, but I did also add some smaller features.

1) This year involved a lot travel, and I added a wysiwyg editor to quickly chart out my trips and resolve placenames to geo coordinates.

2) I wanted to spend more time on academic posts, so I added mathjax for mathematical type-setting on my blog.

3) I have an impression video is the future, so I added a dead-easy manual way to add videos to my site.

It's these small, quick changes that have proven to be the most useful, but it's had an unexpected consequence...

I didn't do a lot of programming this year and it's a shame. One of the greatest joys in (my) life is programming. There's a clear---and positive---reason why I've done less programming this year: my indieblog is stable. Much of the external programming projects were small incremental additions to my blog. There's not much more I feel like adding. I have all the bells and whistles I need to sustain myself for the time being (although there's always maintenance and refactoring to do). Most of the changes I would want to make would require lots of effort. I started this project midway through university. There's a lot of cruft, cowboy code, and naivete to clear out. I don't have the gumption to do it.

I think it's time for a new big project.


Recently, I was invited to give a talk at a philosophy workshop co-located with one of the conferences on interdisciplinary science in Porto. I spent close to two weeks in town. While I was mostly focused on work, I did have a chance to dip out and explore the city. Here's my thoughts after walking around town. Here's a list of some of the places that stood out:

My Favourite Places to Visit in Porto:

Serralves is a contemporary art museum and one of the best galleries I've ever visited. The curation is fantastic; it gives visitors enough context to understand what the artist and the gallery are trying to communicate, without hand-holding the guests. Even if you're not a fan of modern art, Serralves is worth visiting: there's something for everyone.

The gardens surrounding the gallery are lush, and marked with several installations. In the center of the gardens is a fantastic example of art deco architecture: a house with a fountain leading from a cliff up to the main house.

Centro Portugues de Fotografia isn't a place highlighted by travel guides. It's close to all the tourist hot-spots, but receives much less attention.

It's worth a visit.

The centre for photography is a free museum located in a repurposed prison dating back to 1582. They didn't change much. The inner courtyard is a small square with iron bars for windows. The entrance to many exhibits is through heavy doors and bars.

Not all of the exhibits were worth writing home about, but several were exceptional. locating the gallery in a historic jailhouse gives it quirky charm. On the whole, it's a well curated gem close to where most people will be anyways. What's to lose by stopping by?

The Waterfront in Porto is a great place to wander and explore the city. There's an abundance of colourful buildings and neat narrow streets to explore. If you're willing to step off the tourist track, good, cheap food is abundant.

There's a number of wine houses along the shore of the river: a great place to grab a drink while watching the sun set flanked by Porto's iconic bridges.

A great way to get to the waterfront is to walk behind the Center for Photography to a look-out point of the river. From there, you can take steps that carve into the side of the hill down narrow streets that are decorated with the traditional ceramic tiles found in porto and a smattering of street art.

My Favourite Cafes in Porto

Epoca Porto is a great place for brunch. I had indescribably great eggs on sodabread toast. What was in them? I don't know.

early is a little cafe that seems to be built into an old bank. If you look into the back room, there's an old vault door that's mirrored on the inside. Dylan and I grabbed a bunch of plates to share as nibblies. Their roast cauliflower is the best I've had.

My Favourite Restaurants in Porto

O Calcua is a nice little place close to the centre of town. A group of us went here after the conference I attended, and it was memorably tasty---served family style.

O Comercial is a treasure hidden away in Palacio da Bolsa: a historic stock exchange in the center of town. There's only a handful of tables, so it's a quiet little getaway.

The Overrated

Taylor's Port is the oldest port firm, but it's not worth the trek. If you're interested in boozy drinks, chances are you're probably familiar with winery tours, or have at some point wandered through a distillery. The joy of these tours is getting to see where your favourite libations are made: getting to walk through the process.

You'd think that port--a fortified wine--would be the best of both worlds. Unfortunately, it's little more than a walking tour through one of the historic storehouses. Save yourself the time and drink port at any number of other places in town.

Livraria Lello is a breathtakingly beautiful bookstore. If you are at all interested in visiting, make sure you're one of the first 20 people through the door at the beginning of the day. At any other point in time, it is unbearably packed. It can take two or three minutes to descend the stairs as you weave through all the visitors taking selfies.

While the craftsmanship is excellent, it's near impossible to enjoy when peering through the crowds. It hardly seems safe; I can't imagine how deadly a fire would be with the way they pack tourists in.


This is a really tiny bare-bones explanation of predictive knowledge I wrote a while ago to share with someone. WIP.

What is Predictive Knowledge?

A key challenge for machine intelligence is that of representation. The performance of a system is tied to its ability to represent and perceive its environment. Predictive knowledge is a proposal for constructing representations of the environment by making large collections of predictions. An agent is able to continually anticipate its sensation from its environment by making many predictions about the dynamics of its environment with respect to its behaviour (Modayil, 2014). These predictions about expected sensation can then be used to inform an agent's internal representation of its environment (Littman and Sutton, 2002). Other proposals describe inter-relations of predictions, similar to Temporal Difference Networks (Tanner and Sutton 2005; Makino, and Takagi, 2008) to enable abstract, conceptual representations by making predictions of predictions (Schapire and Rivest, 1988).

Predictive knowledge systems have been shown to be a scalable way to update and verify an agent's representation of the world, with examples of real-world robotic prediction tasks making thousands or tens of thousands of predictions in real-time on consumer-grade devices (Sutton, 2011).

We specifically consider predictive knowledge methods that 1) are able to expand their representations by proposing new predictions---possibly increasing required resources, 2) are able to self-verify their predictions through interaction with their environment, and 3) are able continually learn their predictions on-line.

General Value Functions

An integral part of predictive knowledge is the formulation of the predictor. A method of making predictions are General Value Functions (GVFs) (White, 2015). GVFs estimate the expected discounted return of a signal defined as . Value is estimated with respect to a specific policy , discount function , and cumulant : or, where is the state of the environment.

A policy specifies the behaviour over which the prediction is being made as the probability of taking an action in state : . The cumulant describes the signal of interest---the value which the GVF is accumulating over time. The cumulant may be a function of observations an agent makes, or internal signals produced by the system (i.e. predictions made by the system, or other learned values).The discounting function describes how future rewards are discounted.

The simplest discounting functions use a constant value where . GVFs where are myopic: the return at any given state will be the next observed . Where , the return is undiscounted: all signals equally contribute to the return . When varying the discount between and we are describing how much future values should impact value of the current the return.

Another variant of discount functions are termination functions: functions where until some event, where . For example:

In this example, until a robot runs into something which causes its bump sensor to depress. At this point, . This has the effect of acting as a timer. We accumulate the cumulant until some event occurs, at which point the accumulation is terminated.

The parameters , , and are the question parameters which specify what a GVF is about. In addition, any learning algorithm specific parameters are considered answer parameters describe how a learning method learns the GVF. For example, in Temporal Difference (TD) learning, the step size and eligibility decay for TD learning are the answer parameters.

Learning General Value Functions: Temporal-difference Learning

GVFs can be learnt online, incrementally through methods such as Temporal-difference (TD) learning (Sutton 1988). TD methods are of interest, as they are able to update their estimates based on previous estimates: they do not need to wait to observe a final outcome to update their estimates. For instance, if we were to formulate a GVF where we considered what the expectation of the position of the gripper on a robot arm over 10 seconds was, using TD learning we would not need to wait 10 seconds and observe the true return to update our estimate.

Using TD learning we update a value function which estimates the true value of a given state . When considering traditional Reinforcement Learning problems, value could be the estimated accumulation of some reward associated with a goal-oriented behaviour; however, value is not limited to reward: it can be other signals we wish to estimate, including cumulants of GVFs.

In this primer we describe TD learning with linear function approximation where is a binary feature vector which describes the state . The estimate of a state is then the linear combination of the feature vector and a set of learned weights : .

The TD error is:

We do not use the value in our formulation of the target value of our TD error. Instead, the target value is ---a biased estimate of the true return using our current learned estimate . We bootstrap our update by using our learned estimate of the value of the following state to construct the target value. As a result, when performing TD learning, the target value is updated through learning.

Using the TD error , we update the weights by taking a step of size to reduce the error for the presently active features .

We can assign credit to previously visited states for currently observed rewards by using elegibility traces. Eligibility traces maintain a decaying trace of previously active features. At each time-step, the elegibility traces are decayed by and the discounting function and incremented by the currently visited state . Where , the weight update is equivalent to , and when the TD update is a Monte Carlo update.

With eligibility traces the weights are updated by .

TD methods can be applied online, in real-time with little computational cost. TD's bootstrapped update makes it effective in lifelong continual learning systems where the true return may never be observed, or where the dynamics of the environment are too complex to model.


Today Matt and I went to the Ghibli museum. I opted to wake up and head over a bit ealier to take in Tokyo craft week. I made my way over and found a small cafe that specialized in roasting and pour-overs. Swing jazz in the background. The man was friendly and greeted community members walking by, starting their day. He ground coffee for both of us, letting me smell the aroma of each to learn a bit more. I sat and enjoyed my cup, charting my path for the day.

I ambled down a street lined with artesans. I found a yarn store that would wind balls for you based on the yardage you need. I bought a fuzzy frog coin-pouch. The whole street felt like sidney outside of victoria. It had the same pace of people strolling up and down the street starting their day. I followed along.

There was really only one particular place I wanted to visit, and it was shut. I moseyed up and down the street to make sure that I was in the right place. Just as I was about to leave and head to the museum, a trendy-looking woman came barreling down the street to open up the shop. We chatted about about ceramics, and I picked up a chawan in natural colours with green glass pooled at the bottom.

I had to book it over to the museum to make it in time for our slot. Angling for a snack, I made my way into a tea shop that specialized in darjeeling. I was welcomed in by the woman running the shop. By the time I figured out they had no snacks it was too late: I felt like I could walk away from the woman running the store after she was so welcoming. I left with a great cup of tea and huffed it across one of the most beautiful parks I've seen, but regrettably didn't get to enjoy.

I could see why they chose to have the ghibli museum in such a magical, natural park.

It was fascinating how the unmistakably ghibli style was rendered into reality. The familiar shapes and details found in ordinary materials and objects. Even the plants had the look, although effortlessly. None of it felt cultivated.

I was struck by how the crowd interacted with the space. Photos were prohibited, save for a small spot on the roof-top terrace. This meant people were paying attention.

The exhibits didn't have too much content, but what was there was all informative and impactful. A series of rooms set up to look like an animation studio outlined key aspects of the process. My favourite was the story-boarding. The room was plastered with reference images from all sorts of films. I'm not sure if they were originals from film-making, but they were certainly hand-drawn. It was actually a very emotional experience. There were drawings of character studies out in the open, pinned with thumbtacks to the wall. Anyone could accidentally touch them or damage them, but they were in well cared for.

On a table were three art-books. Inside them were plastered cut-outs as a study for one of the films. Pieces of origami paper were used as borders and backgrounds. Everything from horoscopes to trains to military uniforms---all neatly placed in reference books.

The room was filled with treasures. Small sculptures, trinkets, prototypes, reference books piled into a mound. Chaotic productivity. I was inspired, although maybe my inspiration comes from a cargo-cult mentality. It looks productive.

There was a lot of care put into the details. Even the smoke-detectors had caricatures painted around them. There was a cabinet downstairs you couldn't open. Unlike the doors above it, it wouldn't budge; however, if you bent down---to the height of a child---you could lift a flap and peek inside. There was a collection of plush characters and an Oscar. It's not flaunted, but left hidden. You have to be curious to find it.

I bet there's countless treasures I missed.

Akihabara Station → Ghibli Museum


I'm sitting in a small floral shop getting ready for the day. I managed to sleep in and get some rest. I actually came here for dinner yesterday evening after wandering around town. There was a bit of a line: around two hours. I asked the woman at the end of the line about the cafe, and she said she would come and visit every time she was in Tokyo.

If it's so good you'll wait in line for two hours to get into a place you frequent, I guess I'll wait, too.

I started the day by going back to Shinjuku and seeing what it was like with more people out. I found a little side-street with a sign pointing inwards: COFFEE. I obliged.

Hiding in a fashionable and bare building was a tiny place. I ordered a matcha latte that was revelatory. While sipping at a swing-out bar-stool, I noticed a stack of booklets tucked neatly into a holder at the table.

Tokyo Craft Week.

It turns out the place Matt and I were going to tomorrow had plenty of little artisans around. I was excited. After polishing off my latte, I headed to the national gardens for tea-time.

I took it slow, looking for the traditional tea house tucked away. I found it sprouting up next to some bushes, almost hidden. I practiced my best polite entry and was greeted by an elderly lady in traditional formalwear. She sat me on a bench along the wall and handed me a tiny, fluffy sweet in the shape of a cloud.

I slowly sipped on my tea, listening to the rain tap on the thin roof. I continued around the park, rain coming and going with no particular direction. I found a cherry tree that had fallen, with a poem written on a sign next to the decaying husk. I crouched down, pulled out my phone, and drew the characters---like I was finger-painting on the screen. I wanted to read the poem.

There was a greenhouse with many micro-climates and a prodigious collection of carnivorous plants.

I still had a few hours before Matt's reservation at the robot restaurant. I passed the time by wandering around shinjuku. I heard a loud chant in the distance. I walked around until I found a procession and caught up with them. I think they were chanting to the new emperor that ascended to the throne today. There were people lining the streets looking at them, many with a look of irritation or bemusement. The procession was quite earnest about whatever they were preaching.

I then made my way to a few to a few shrines in the area. They were completely deserted because of the drizzling rain. One of them had a Buddha holding a staff that looked just like the sculpture in the National Museum of Scotland's statuary. I found that reassuring.

Harajuku → Shibuya → Shinjuku


This morning, I opted to do something familar: to retread my steps and go back to the renoir for a cup of coffee.

Afterwards, I trekked out to harajuku. I found the famous street and ambled along. Even at 9 A.M. it was already heaving. The streets were bursting at the seams although much of the street was closed.

I have to admit, while some aspects are wild---e.g., rainbow toasties---the street was otherwise unremarkable.

I focused on brahms path and confirmed a suspicion: it is named after the composer. Trundling down brahms path, Being one street removed, really changed the feeling. Even the smell of lush plants growing on the sides of buildings was nice. I charted out the places I wanted to visit and let interest guide me. When I found something unusual or mundane, I let that impulse guide me.

I found so many neat streets---interesting nooks and crannies. I went to a little coffee shop next to shinjuku. It had low ceilings and beautiful heavy wooden seating. I ordered a slice of cake and a pourover.

The couple sitting next to me seemed pleasant. They commented on my choice of cake. We started to chit-chat and I found out that they were from California, from SanFrancisco. One of them did arts and life reviews and commentary.

We chatted about their career, and the sustainability of the arts community in a city being crowded out by tech. They asked me what I did, and I mentioned I was a grad-student studying AI. One of them worked at GoogleBrain. You can never escape. There is no holiday.


Today we went to tokyo SkyTree. Surprisingly, it was quite nice and relatively relaxed. There were few people despite the today being the start of Golden Week. The air was filled with smog, so we couldn't see too far, but the weather was decent, so we got a reasonable view of the city.

We had lunch at a little shop on the 340th floor of the tower.

Under the tower is a massive shopping complex. Some of the more experimental brands were hilarious. I found a sweatsher with a frame from Harry Potter on it: Ronald Weasley on a couch, pouting. It looked like one of those fruit of the loom sweatshirts people used to get photos printed on in the 90s.


I went to another workshop at Fern's school of craft! Ash Alberg from the pembina fiber-shed taught to courses focused on using natural materials to dye and print on fabric.

The first course was on eco-printing. Unlike dying, eco-printing is creating a surface print of some source materials--typically plants--on a target material. It's like using a printing press, but involves a chemical transfer between plants and some protein or cellulose based material. For this course, we worked with cotton tea-towels and silk scarves, however, you can print on all sorts of materials, including wood, wool, and leather.

This post is a collection of my notes from the class.

Before You Print: Scouring and Mordanting

Before you can begin dying or printing, the material must be prepared. Oils and debris accumulate on fabrics. These oils can be on both new fabric as result of initial processing of the materials, or on second-hand materials from use. It's important to remove the oils, as they create a resist--- a section in the fabric where dyes and prints cannot transfer. We remove the oils by scouring the material.

Ash mentioned two detergents for scouring:

  1. Synthrapol (Cotton, Silk)
  2. Orvus Paste (wool)

For textiles, it's best to throw the material in the wash on the cycle you expect to use to clean the end-product.

Once the materials have been scoured, we pre-mordant them. A mordant is a substance used to cure and fix dye or stain to a textile. For cellulose-based materials we use sources of tannins as our pre-mordant; for protein-based materials we use metal-ion based mordants.

Tannins can be found in rhubarb leaves; however, rhubarb leaves are toxic. If you're extracting tannins from rhubarb, make sure your workspace is well ventilated!

To pre-mordant, we weigh an appropriate amount of mordant based on the weight of the material we are treating, place it in a pot with our material on low heat, and leave it for an hour or two.

Alum is one of the most common pre-mordant to use with protein-based materials, and it's safe to use. You should use 15-20% of the fibre weight in alum for mordant.

Printing With Plants

After your materials as scoured and mordanted, it's time to print!

At the workshop there were a few bouquets for us to dismember and scatter onto our projects. One thing to remember when eco-printing: just because a plant has a particular colour, doesn't mean that it's going to imprint in that particular colour.

Although eucalyptus is a pretty teal-green, it leaves behind a purple impression. Similarly, the rose petals and leaves left behind colours ranging from black-brown to green.

Once the pieces are in place, there's a number of different ways to leave an impression.

You have to wrap your bundles really tight. No, seriously. If you want your impression to come out, you need to apply substantial pressure. The way you do that is by tightening your bundle and tying it down. It's easy to think that you're bundle is tight enough. You can be oh-so wrong. One of the issues during the workshop was that few people got substantial impressions onto their work. A few people had barely any impression on their work.

This could have been for two reasons: 1) the bundles weren't left in the pots long enough due to time-constraints, or 2) the people's bundles weren't tight enough. Given everyone's bundles were on the stove for roughly the same amount of time, and some of us got striking impressions, my money is on 2).

After the bundles are snug, it's time to give them a bath. Bundles need to be simmered at a medium heat below boiling for a few hours. To give my prints a little extra kick, I brought them home and put them in a slow cooker over-night.

Never use anything to store or cook food that you use for dying and printing. It's important to keep your food-prep and dye-related tools separated. Just because it came from a plant, doesn't mean that it's healthy to consume.

I was happy with how my scarf turned out after a little extra time cooking, but I felt that I could improve it a little bit more. by adding a little bit more pressure to my bundle, and by giving it a little bit more time. Because eco-printing is transfer, not a dye, you can keep re-printing on the fabric to experiment.

Foraging Responsibly

  1. Wear appropriate gear and use appropriate tools to collect from plants. Know what poisonous plants look like
  2. If you don't know what it is, don't take it.
  3. Don't take plants from unhealthy patches
  4. Take no more than one-six of the plant
  5. Don't forage rare or at-risk plants
  6. Don't take flowers (including weeds) when they first start blooming. The bees need them more than you! 🐝

Online Suppliers:

Maiwa: for natural dyes and fabric. Richter's Seeds: for seeds.

At: Eco-printing Workshop

From 2019-03-09T14:00 To 2019-03-09T17:00


I'm going back through my dive logbook after a three year diving hiatus. The software I use to track my dives has become an ungodly mess of company acquisitions and poor software support. Turns out the company that made my dive-computer was bought out by scuba-pro.

To even get my hands on the software to open my dive-log file, I had to scour old forums looking for a hidden link that would take me to the SmartTrak site. That wasn't even enough alone, I had to engage in browser witchcraft to coerce the site to not redirect me to scuba-pro's main site. The file is nowhere else, at least by my searching. Interesting that no one liked SmartTrak enough to keep a mirror of it.

Of course, finding the software didn't solve my problems. oh no. The dates were incorrect on some of my dives. An example malady of poor software support: I could turn the background of dive profiles gradient olive green, but I could not edit basic dive info---e.g., the date and location of a dive. For the first-time in my life, I'm actually experiencing the effects of deprecation in software that I depend on. It's not like I can just give up the logs for dives I've done; It's important that I keep the data I collect when I'm diving to keep track of dive habits and share with dive-shops.

After going through old dev-forums and dive-forums, I found a converter which takes shameful SmartTrack files and converts them into a modified XML for use with SubSurface. At least I can coerce the file into being read as XML, rather than proprietary nonsense. More than that, not only does sub-surface allow me to edit the date of a dive in increments greater than 7, I can edit multiple dives at the same time.

It's the future.

I can't help but feel that this is a sort of digital vagrancy. SubSurface seems great now, but what about in 3 years? 10 years? I know there's a trend of web-based dive-logs, but I don't want to have to shuffle around, converting what has no business being anything but XML or a CSV to bunch of proprietary, uninterpretable file formats.

Having been burnt by SmartTrack, I'm looking for robust export functionality in my next electronic dive-log. Lucky for me, it seems sub-surface is able to export as CSVs. This seems like a clear candidate to make a stand and own my own data.

The whole thing is just screaming to be added to the blog. Time for #indieweb scuba logs. Then if something breaks, it's my own damn fault.


This is a fragment of my notes on Percian semiotics (so it's not particularly readable). Why semiotics? Meaning-making, or how we come to make sense of the world around us is an integral part of inquiry into the mind. While exceptionally fragmented, Peirce's introduction to semiotics is focused on finding from first-principles what the most basic components which make up thought and meaning are.

While a number of terms are over-loaded in cultural every-day usage, it's important to point out that terms like concept--the components of thoughts--do have a particular meaning.

From Perice's perspective, a concept or a sign is made of three indecomposable elements which Peirce calls firstness, secondness, and thirdness. These three components are the building blocks upon which everything we can think about are built. In short, firstness is feeling, secondness is resistance, and thirdness is experience.

I relate these in less anachronistic terms to:

  1. Sensation prior to awareness
  2. Relations and Properties
  3. Experiences and Generalities

It's not exactly intuitive, and my notes rely heavily on extended quotations to explain the concepts.


Firstness: Sensation Prior to Awareness

Before we have an abstraction which helps us understand the environment, there must be---absent of any categorization, modelling, or understanding---the information or sensation which is used to construct the abstraction. Firstness is "feeling, as distinct from objective perception, will, and thought" (CP 1.302)[1]. It is prior to perception and thought.

A pure nature, or quality, in itself wihtout parts or features, and without embodiment. (CP 1.303)

When you hear firstness, think the raw observations. The fundamental building block for everything that can be present to the mind is what is immediately sensed in a primary sense: the raw stream of information which we use to form perceptions of the environment. Not the sense of experiencing the feelings, but sensorimotor sensation prior to judgements such as feelings and awareness.

That is a phaneron [present to the mind] peculiar to metaphysical thought, not involved in the sensation itself, and therefor not in the quality of feeling, which is entirely contained or superseded , in the actual sensation. The Germans usually call these qualities feelings, feelings of pleasure or pain. To me this seems to be mere repetition of a tradition, never subjected to the test of observation. I can imagine a consciousness whose whole life, alike when wide awake and when drowsy or dreaming, should consist in nothing at all but a violet colour or a stink of rotten cabbage. it is purely a question of what I can imagine and not of what psychological laws permit. The fact that I can imagine this, shows that such a feeling is not in general, in the same sense in which the law of gravitation is general. For nobody can imagine that law to have any being of any kind if it were impossible that there should exist any two masses of matter, or if there were no such things as motion. A true general cannot have any being unless there is to be some prospect of its sometime having occasion to be embodied in a fact, which is itself not a law or anything like a law. A quality of feeling can be imagined without any occurrence, as it seems to me. Its mere may-being gets along with any realisation at all. (CP 1.304)

When Peirce says phaneron, he means what is present to the mind with no claims as to whether or not it is present in reality; he has drawn comparisons to what he means when he says phaneron and what some mean when they say idea (CP 1.284). He is saying that there's no reason there couldn't be primary elements of our conceptualisation of the world which exist independent of any other---pieces which could be composed to make all of our conceptualisation.

Peirce invites us to consider what we think the building blocks of concepts, or thought, might be if we begin with this firstness of sensation as the first piece:

Suppose I begin by inquiring of you, Reader, in what particulars a feeling of redness or of purple without beginning, end, or change...that should constitute the entire universe, would differ from a substance? I suppose you will tell me that no such thing could be alone in the universe because, firstly, it would require a mind to feel it, which would probably not be the feeling itself; secondly the colour...would consist of vibrations; thirdly, none of them could last forever without a flow of time; fourthly, each would have a quality, which would be a determination in several respects, the colour in hue, luminosity, chroma, and vividness...and fifthly, each would require a physical substratum altogether disparate to the feeling itself. (CP 1.305)

And he supposes we propose five pieces starting with Firstness as sensation:

  1. A mind which experiences the sensation
  2. The vibrations of the colour
  3. Time for the vibrations to vary over
  4. The qualities the colour could be measured over
  5. The physical realm which this all happens in

But I point out to you that these things are only known to us by extraneous experience; none of them are [seen in the colour]... Consequently, there can be no logical difficulty in supposing them to be absent, and for my part, I encounter not the slightest psychological difficulty in doing so. To suppose, for example, that there is a flow of time, or any degree of vividness, be it high or low, seems to me quite as uncalled for as to suppose that there is freedom of the press or a magnetic field. (CP 1.305)

Peirce then outlines how all of these additions are reducible. The flow of time and minds as perceivers of the sensation of red are all constraints which we put in place given additional understanding. On a personal level, none of them are required to experience sensations such as redness, or whistling.

It is clear that although these notions aren't necessary for the sensation which peirce treats as primary, we do use notions of time and understanding of the properties of things we sense to conceptualise and reason about the world.

Peirce acknowledges this, pointing out that while it's conceivable to just experience the world on a moment-to-moment sensory basis, that such an agent or system would be cognitively limited.

We can, it is true, see what a feeling in general is like; that, for example, this or that red is a feeling; and it is perfectly conceivable that a being should have that color for its entire consciousness, throughout a lapse of time, and therefore at every instant of time. But such a being could never know anything about its own consciousness. It I could not think anything that is expressible as a proposition. It could never know anything about its own consciousness. it could have no idea of such a thing. It would be confined to feeling that colour. (CP 1.310)

The point being made that which is first can only be an exact reproduction of itself. Simply having the same sensation, or subset of sensations, in the same mind at a different time is something different from the firstness itself. Or, if in a different mind, the identity would depend on the mind, violating the reproduction.

A collection of other snippets which are explanatory:

  • "a pure nature, or quality, in itself without parts, or features, or embodiment" (CP 1.303).

  • that which "involves no analysis, comparison, or any process whatsoever, nor consists in whole or in part of any act..." (CP 1.306)

  • "A state, which is in its entirety in every moment of time as long as it endures"


Secondness: Relations and Properties

While sensation is integral to how we conceive of our world, it's also clear that we do not understand our world using the raw, unprocessed sensation from the environment alone. We can see the influence things beyond sesnation in how we perceive our environment: there are blind spots in our vision which we do not perceive. Optical illusions can convince us perceptually that things are not as they truly are. There is some processing which enables us to understand our environment in terms of an abstraction.

Contemplate anything by itself---anything whatever that can be so contemplated. Attend to the whole and drop the parts out of attention altogether. On can approximate nearly enough to the accomplishment of that to see that the result of its perfect accomplishment would be that on quality of feeling. This quality of feeling would in itself, as so contemplated, have no parts. It would be unlike any other such quality of feeling. In itself, it would not even resemble any other; for resemblance has its being only in comparison. contemplate, however complex may be the object, it follows that there is nothing else in immediate consciousness. To be conscious is nothing else than to feel. (CP 1.317)

Pierce then makes the observation "what room, then, is there for secundans and tertians?" Why is there anything else other than instantaneous feeling as an irreducible building block of building symbols?

Understanding of the environment is not just based on the perceptions of the environment, but also the relationship between things. Redness has a character or has properties to it which we can understand in terms of relations between different moments or different independent sensations.

To explain this, we turn to actions and their consequences. Pierce explores this by discussing an agent's effort and the consequences of it.

An effort is not a feeling, nor anything priman or protoidal. There are feelings connected with it: they are the sum of consciousness during the effort. By it is conceivable that a man should have it in his power directly to summon up all those feelings, or any feelings. He could not, in any world, be endowed with the power of summoning up an effort to which there did not happen to be a resistance all ready to exist. (CP 1.321)

Here, I choose to read effort as action, or more generally as behaviour. The point he makes here is that the actions an agent takes in its environment are fundamentally separate from the raw feelings of the agent. They may influence the feelings which are felt during the instants during which the behaviour is being executed, but they are not the same as the behaviours being executed.

By struggle, I must explain that I mean mutual action between two things regardless of any sort of third or medium and in particular regardless of any law of action. (CP 1.325)

For example, an agent in its environment may bump into a wall. There is a relationship between the wall and the agent. The agent took an action, leading it to bump into the wall. Resistance in the environment caused a sensation of force against the agent's bump sensor.

The effort and resistance---the action and the sensation---are secondness. Using this example, we can describe a sense of 'other-ness'.

Secondness isn't limited to 'otherness'. Things which we wish to express about the world which are relations between two different moments are secondness. Peirce draws connections to causation and statistics as examples which related to seconds by drawing relations between two senses.

The idea of second is predominant in the ideas of causation and statical force. For cause and effect are two; and statical forces always occur between pairs. Constraint is a secondness. In the flow of time in the mind, the past appears to act directly upon the future, its effect being called memory, while the future only acts upon the past through the medium of thirds. Phenomena of this sort in the outward world shall be considered below. I sense and will , there are reactions of Secondness between the ego and the non-ego. (which non-ego may be an object of direct consciousness). In will, the events leading up to the act are internal, and we say that we are agents more than patients. In sense, the antecedent events are not within us; and besides, the object of which we form a perception (though not that which immediately acts upon the nerves) remains unaffected. Consequently, we say that we are dominant; for the real is that which insists upon forcing its way to recognition as something other than the mind's creation. (CP 1.325)

Relating these notions back to machine intelligence: methods which perform classification or regression are secondness. Focusing specifically on Reinforcement Learning methods, we could consider a policy evaluation method---a method which estimates either the value or some accumulation of sensation for a given state---to be a second. There is a relation drawn between an action and a response.

As an aside, Pierce makes an interesting observation: before English adopted the word two, we simply used other.


Thirdness: Experiences and Generalities

Finally, there must be something which connects the relation to the instances which are a party to it: the seconds to the firsts. This is what Peirce considers that which connects is the third.

An Example: Ambulance Sirens

It may seem unclear why we should need a third. We have moments which we sense, and we have the perception which relations between moments give rise to. What else could there be?

Typically, we categorize the pipeline as having two parts: 1) immediate sensation and 2) perception. Peirce breaks what we would usually consider perception into a third category: experience (CP 1.335). The reasoning behind this is that perception of events is not cognition of change.

If an ambulance is racing towards you and suddenly passes, due to the doppler effect the sound of the siren will lower as it passes you. You have a sensation of the whistle, which gives rise to the perception of the whistle, but the cognition and understanding of the change in tone---awareness of the changes and contrasts of awareness---is experience.

Thirdness as Generalities

By the third, I mean the medium or connecting bond between the absolute first and last. The beginning is first, the end second, the middle third. The end is second, the means third. The thread of life is a third; the fate that snips it, its second. A fork in the road is a third, it supposes three ways; a straight road, considered merely as a connection between two places is second, but so far as it implies passing through intermediate places it is third. Position is first, velocity or the relation of two successive positions second, acceleration or the relation of three successive positions third. But velocity in so far as it is continuous also involves a third. Continuity represents Thirdness almost to perfection. Every process comes under that head. Moderation is a kind of Thirdness. The positive degree of an adjective is first, the superlative second, the contemplative third. All exaggerated language, "supreme," "utter," "matchless," "root and branch," is the furniture of minds which think of seconds and forget thirds. Action is second, but conduct is third. Law as an active force is second, but order and legislation are third. Sympathy, flesh and blood, that by which I feel my neighbour's feelings, is third. (CP 1.337)

This description is a touch melodramatic. Extending on the metaphor of a road: a place is a first because it is simply a location in relation to nothing else. When we make a road connecting two places---two firsts---we create a second by drawing a relation between the two firsts.

If we reflect back on the previous robot example, an analogy can be made between the the immediate sensation and the value estimate. It has some estimation which predicts that it will bump into the wall. The estimate for that state is a second, the estimator for all given states is third.

It is impossible to resolve everything in our thoughts into those two elements. We may say that the bulk of what is actually done consists of Secondness--or better, Secondness is the predominant character of what has been done. The immediate present, could we seize it , would have no character but its Firstness. Not that I mean to say immediate consciousness...would would be Firstness, but the quality of what we are immediately conscious of... is Firstness. (CP 1.343)

When we categorize what we think about, it's clear that a lot of what our thoughts consist of can fit into firstness and secondness. Moments are clearly influencing our thoughts on a moment to moment basis (Firstness). These sensations give rise to perception and an understanding of relations between the moments, including how our behaviour influences sensation on a moment-to-moment basis (Secondness).

In general, we may say that meanings are inexhaustible. We are too apt to think that what one means to do and the meaning of a word are quite unrelated meanings of the word 'meaning', or that they are only connected by both referencing some operation of the mind... (CP 1.343)

This is kind of a classic pragmatic point to make: that the meaning of some word is not unrelated to behaviour. The use of a concept and the consequences of a behaviour are directly responsible for constructing meaning.

In tuth the only difference is that when a person means to do anything he is in some state in consequence of which the brute reactions between things will be moulded into conformity to form to which the man's mind itself moulded, while the meaning of a word really lies in the way in which it might, in a proper position in a proposition believed, tend to mould the conduct of a person into conformity to that to which it is itself moulded. (CP 1.343)

This is drawing a comparison demonstrating how meaning in a linguistic sense is related to meaning in an active behavioural sense: we judge meaning in both cases based on their consequences.

Not only will meaning always, more or less, in the long run, mould reactions itself, but it is only in doing so that its own being consists. For this reason, I call this element of the phenomenon or object of thought the element of Thirdness. It is that which is what it is by imparting a quality to the reactions in the future. (CP 1.343)


Primacy of Firstness, Secondness, and Thirdness

it is a priori impossible that there should be an indecomposable element which is what it is relatively to a second, a third and a fourth, The obvious reason is that which combines two will by repetition combine any number. Nothing could be simpler; nothing in philosophy is more important. We find then a apriori that there are three categories of undecomposable elements to be expected in the phaneron: those which are simply positive totals, those which involve dependence but not combination, those which involve combination. Now let us turn to the phaneron and see what we find in fact. (CP 1.298-299)


Thinking it Through: Examples Of Firsts, Seconds, and Thirds

  • Position: First

  • Velocity: Second

  • Acceleration: Third

  • Observations from the environment: First

  • A General Value Function predicting an observation for some behaviour policy over some time-scale: Second

  • A model: Third

  • A Sensor reading: First

  • An exponential moving average of sensor readings: Second

  • A model of the process which the sensor records: Third

[1] I use Percian citations which are standard for citing Peirce's works. Here CP m.n stands for Collected Papers volume m paragraph n.

Thanks to Oliver Oxton for the helpful chats.


I talk about what-you-see-is-what-you-get posting system for my #indieweb site and how it improved my post quality.

About two years ago I built a better content management system for posting images. To do this, I added a bulk uploader and an album generation system. The whole point of this was that I was trying to get away from using 3rd party image posting systems.

I wanted something which would:

  1. let me keep original high-quality photos stashed in a safe, organized place.
  2. Enable me to place images and text in an organized fashion.
  3. Be simple enough that I would actually use it.

The Tension: Creating Content and Communication

Two years after making my album system, how did it work out?

Not so well. I don't really have more articles and albums. My blogroll from the last year looks like a glorified instagram page. I still let my photos rot on devices for a long period of time before posting them. In the past two years, I found myself posting a lot more directly through the twitter app---no PESOs---and letting images filter to my site using own your gram for most of my posts.

Part of this is just the nature of what I want to keep, and what I view as disposable when I'm creating content. That twitter thread that I commented on absent-mindedly isn't really something I'm interested in keeping.

Reflecting on the disposability of twitter posts a bit more deeply, there's probably a bunch of threads which I've posted which I do want to keep. Most common are conference threads which summarize events I'm at, or takes on other people's ideas. However, because these threads are mostly made for the consumption of other people and to start discussions, rather than storing thoughts for me to later reflect on, I've ended up prioritizing other people's ability to interact with the content, rather than my ability to maintain it.

It's easier for the average person to read through a twitter thread and respond to it, even if the quality of user experience on a thread of 15 tweets is substantially poorer than a single well formatted blog post. The fact is, if I were to syndicate articles to twitter, the number of people who engage with them would be way more limited than if I were to quote retweet with a thread commenting. It'd be less social and there would be fewer exchanges of ideas. Losing these articles to twitter's poorly formatted abyss feels frustrating, but I don't see a way around it right now. I guess all I can do is hope that with the twitter's poor responses to harassment, selective verification, and criticism regarding feature development lead people to jump ship towards federated systems which are more indie-friendly.


The Elephant In The Room: I'm Lazy.

So I'm not posting albums as frequently as I would like. I'm not actually using the interface I built effectively. Why?

There's a saying in the indieweb community: manual until it hurts. Don't automate what you're doing until it's so painful that you're compelled to automate. It'll take time to maintain the code that's replacing your manual--software rots.

This is a very subjective principle. What hurts one person is painless to someone else. The problem with this ideology for me: I'm lazy. If it's not easy, it's agony.

Even though my posting interface was effective, using it was the user experience equivalent of fumbling through a dark room looking for a light swich.

This is what my posting interface used to look like.

One of the greatest challenges for me when I was producing albums and articles was the type-setting. While it became simple for me to place and organize images efficiently, the text alone was not enough to properly visualize what the outcome would be.

Is img_2325.jpg really the image you think it is? Are all the images bundled in your ablum oriented the way you want them to be?

Often I would post collections of images, be exceptionally proud of it, only to find out that some of the phtotos were placed incorrectly. I would go through iterative cycles of moving photos around, finding that one of them was still out of place, and then moving them again. This was all just too much effort.

This hurts.

So I made a what-you-see-is-what-you-get image posting interface. I split the input down the left and the output on the right. I added some javascript functions which check to see if any of the form fields have changed, sends the markdown to an endpoint on my site which converts it to HTML, and updates the display.

Now I can see what I'm working on in real-time.

So what about these photos I have sitting around on my computer? They were unorganized, and going to waste. It's difficult sharing and enjoying a folder full of photos; no one wants to go through a folder full of photos. Since adding WYSIWYG, I've made more albums documenting my crafts, and I've actually gone and started adding old albums from years gone by.


The Unsung Hero: Historical Posting

The new interface was great, but it doesn't address one point: I'm not usually adding posts the day I take the photos. When I'm out and about I'm taking photos; I'm not posting them until I've edited them---something which I don't usually get around to until days later.

With articles, I don't really care what the date associated with the post is: the text is usually date-less and location-less. The association of date and time is secondary to the actual post. With albums, that isn't the case. The photos are almost always taken with respect to a location.

I didn't have a way to change the associated date. Whatever time and day the post was made was the time and day associated with the post itself. This became a mental hurdle I had to jump over each time I wanted to make an album: I either had to rush the album out the door day-of, or make my piece with it being forever associated with a completely wrong time (I was never going to go in and edit it in my cms files by hand).

Maybe WYSWIG wasn't the biggest UX issue after all.


Wrapping it up

Adding a new feature is all well and good, but whether the feature's use stands the test of time is the only way to evaluate its quality. Often I find myself adding new functionality, only to remove it in a few months after sparse use. It's been roughly six months since I finished making my WYSIWG interface. I recently went adventuring during a conference in virginia and ended up making a number of posts chronicling the visit. It's been close to half a year since I made my Indie WYSIWG, and the improvement has been consistent and lasting.

Success 🎉

What's the next step? Videos.


I recently made a hat for Matt. I used some super-soft alpaca yarn that I picked up from an industrial-revolution era wool spinner located in Alberta. I managed to find a colour which was close to the alpaca logo he uses on his site to keep it on-brand.

The pattern I ended up using was a free japanese pattern. I wasn't quite sure how to read the ribbing section, so I used a slip-stick to give it a slightly elongated stitch to match the faux cabling.


I had a chance to walk around Washington for a few hours with Johannes.

Lincoln Memorial

We first visited the Lincoln Memorial, which was shockingly smaller than I had expected. You grow up seeing all these monuments in art and movies; when you finally see the real thing, it's a bit weird.

It's this uncanny valley that you wander into. You're so familiar with the monument as media short-hand for some idea, that the real monuments seem somehow incomplete. There's these grand larger-than-life expectations of iconic monuments, and then there's the reality of wandering up to the monument which looks largely the same as any other statue.

There's several minor monuments around the perimeter of the mall. This one was one of my favorites, because it's been transformed into a roundabout.

When I die, I want my legacy to be immortalized into a neo-classical traffic circle.

MLK Memorial

The MLK memorial was strange. It's much newer than I expected---completed in 2011. To get to the plaza, you emerge from between a mountain split in half into a plaza. The plaza is wide open space looking over a lake with what looks like the peak of the mountain hurled into the center.

When you approach the slab from the other side you're greeted with MLK's likeness looking off into the corner. The concept is neat. The statue itself seems a bit stern.

"Out of the mountain of despair, a stone of hope."

Vietnam War Memorial

The Vietnam War Memorial is probably one of the most influential monuments on popular culture---It seems to be referenced the most. It's relevance makes sense: it's the most recent war monument. Many people have immediate family who fought in the war.

It's simply a chevron of names cut into the ground. What was truly interesting was the collection of volunteers manning the monument.

These volunteers seemed to predominantly be Vietnam vets. They stood around the monument, helping visitors find the names of loved-ones. They even had cards and a step-stool to take rubbings of the monument, allowing people to take the name home with them.

Jefferson Memorial

The Thomas Jefferson Memorial is almost feels more impressive than the Lincoln memorial.

The statue was placed in the centre of a circular room. Inscribed on the walls were a selection Jefferson's quotes.

Interestingly, there was this quote on constitutional inerrancy which I thought was strikingly poignant, especially with the discussion of restricting gun ownership in the wake of numerous mass shootings. I guess certain legislation gets enshrined as being beyond criticism, even against the intent of those who influenced it.

Tidal Pool

Johannes and I continued around the park, wandering around before grabbing a bite. As the morning shifted into the afternoon, the mall came alive with numerous charity events and political marches.

White House

Before heading to lunch, we made an obligatory visit to the White House. Again, it was much smaller than I imagined it would be. I'm fairly certain it's smaller than the albertan provincial legislative buildings.

Examining the roof-line, there is a hint of grey concrete which seems out of place with the neo-classical mansion. There's what looks like a reinforced bunker on the top of the building. On closer inspection, there was someone standing on the roof with some kind of gun, surveying the surroundings.

People-watching in front of the White House is fascinating. A number of protestors were lining the pavement where tourists were taking photos. A man was pacing back and forth across the length of the White House Lawn with a sign imploring republicans to stand up to Trump.

When I was crossing the border, the homeland security officer gave me recommendations for Washington. One of them was Old Ebbit Grill.

This place is my aesthetic. It has a nice, quiet warmth to it. Wood paneling and dim lighting; hunter green velvet couches; walls mounted with trophies rumored to be shot by Teddy Roosevelt.

After lunch we wandered around town, spending the last couple of hours taking in the streets on the other side of the mall and lamenting the fact we didn't get to visit any of the Smithsonian museums during our trip.


Someone recommended that I read about process philosophy, so I checked it out. Here's a collection of my notes on what process philosophy is and how it relates to approaches to knowledge in Reinforcement Learning.

Interactivism and Process Philosophy

Traditional western philosophy is obsessed with describing reality from a set of static components. These components have dynamic features which are treated as secondary or derivative to the static individuals; they are ontologically derivative, or secondary to the actual components--i.e., their existence is secondary and dependent on the physical nature (Seibt, 2018). This core research programme is substance metaphysics, the study of the nature of being which originates from substances.

Process philosophy starts by upending this approach to metaphysics--this study of existence of reality. reality and existence are thought to be the behavior of a dynamic system (Seibt, 2018). Interactivism is a branch of process philosophy which broadly concerns itself with the interaction of agents (Bickhard, 2000); Interactivism considers it self to be a descendant of genetic epistemology (Piaget and Duckworth, 1970), also known as constructivism.

Interactivist Theory of Knowledge and Contact with Predictive Knowledge

The majority of PK's contact with interactivism is through epistemology, as PK approaches do not have metaphysical commitments. PK particularly concerns itself with epistemological commitments. When we strip interactivism of it's metaphysical commitments and evaluate it from an epistemological perspective, it is not clear what the core contribution or insight of Interactivism is, as many other branches of pragmatism make the same assertions.

Two core commitments of of interactivism are pragmatism and fallibility. Under a pragmatic approach to knowledge, conceptual content is evaluated by action. A fallible and pragmatic approach to knowledge is present in many historical and modern approaches to epistemology--including, pragmatism (Pierce, ), enactivism (Noe, 2004), and inferentialism (Brandom, 2009)--to list a non-exhaustive sample of alternative epistemologies.

From an interactivist perspective, knowledge is:

"constituted as goal-oriented interactive competence, and representation is a functional aspect of such competence: interactions and interactive systems that are not appropriate to an environment, that are not sensitive to that environment and to its potentialities, will not be competent in that environment.'' - Bickhard and Richie (1983) p. 5

Again, this approach not terribly different from enactivist approaches knowledge. However, Interactivism does make the specification of knowledge being both goal-oriented and interactive: two core components of a predictive knowledge paradigm (Sutton, 2009). Their argument that competency is related to knowledgability--or judging the knowledge of an agent by its actions--is compatible with PK and more broadly pragmatism in general.

"The interactive claim is that such interactive sensitivity, such ability to take into account an environment, its potentialities, and its challenges, is the fundamental form of representation... Such [representations] will be in terms of the internal course and outcomes of some interactions, which may in tern be useful in determining the course of other interactions.''- Bickhard and Richie (1983) p. 5

Interactivism is clearly compatible with PK, as General Value Functions (GVFs)--a core method of specifying predictions used in PK--satisfy interactivism's specification of representation: anticipation of the dynamics of an agent's environment in terms of it's behaviour. This description of representing the environment in terms of anticipating the dynamics on a low level mirrors nexting (Modayil, 2014; Gilbert, 2009), and other sensorimotor approaches to knowledge, such as enactivist approaches. From an enactivist perspective, there may be high-level representations which are not in sensorimotor terms--taking a weaker stance than PK--however; these are secondary to and derivative of low-level dynamic representations.

Arguments Made by Interactivists and Anti-representational Criticism

There are a few gems in the interactivism manifesto. For instance, a criticism of the spectator of knowledge: the theory of knowledge which holds that observation is purely reception, that the mind is passive in perception, and that knowing is related to a passive beholding. These commitments are fundamentally incompatible with PK (Kearney, 2018), a fact which is evident when you consider that GVFs are explicitly encoded in terms of behaviour through the policy parameter π (White, 2015). See (Noe, 2004) for in-depth discussion.

Much of the manifesto is a dig at what I interpret as conceptual platonsim, which is often described by (Bickhard, 1983) as encodingism. Encodings are mental correspondence which captures the structure of what is being represented. Canonical examples include painting and sculptures--items which are representations of some real, physical entity, but are not exact copies. From an artificial intelligence perspective, representations could be symbolic entities with particular properties in a knowledge base, or learned kernels which represent some feature--e.g. a facial feature.

As Bickhard presents it, encodingism can be split into strong and weak versions. Strong encodingism takes encodings to be all of mental representation. Weak encodingism suggests that encodings exist, but there are are other independent forms of representation which are necessary and independent. See (Bickhard, 1983) for further discussion.

Interactivism rejects encodingism, stating that representation is functional: encodings represent only insofar as the representation has a function for an agent. In this sense, this interactivism takes a functionalist (Levin, 2018) approach to conceptual content, similar to inferentialism and interactivism.

Representations are insufficient on their own as a description of conceptual content, as they require an agent to interpret the representation. This is similiar to Piaget's assertion that if knowledge were really a copy of the world, one would have to understand the world already to construct a mental copy (Piaget, 1970), as Bickhard points out.

The second criticism of encodings is that representations must be representations of something. If an encoding which represents something is logically independent of all other encodings, answering the question "what does this encoding represent?" can only be "whatever it represents". To specify the encoding in terms of some other representation is to specify it in terms of reducible form which is prior to it, making it dependent on other encodings. In short, encodings cannot be a basic irreducible form of representation, as it is uncertain how to connect the representation to what it is representing.

Interestingly, this seems like an anti-representationalist approach which simply does not go the whole way. An alternative to representation as the origin of understanding and awareness is expression (Forester, 2018), as outlined by Brandom (Brandom, 20019). Instead of considering interactive sensitivity representation of the environment, we can think of these sensitivities or predictions in terms of their relationships. Rather than evaluating conceptual content and understanding representations in terms of what they are representing, we can evaluate conceptual content by the act; we may understand the conceptual content of an agent by their ability to apply concepts and the relation between them.

This anti-representationalist approach also supports a view of perception and awareness which mirrors the interactivist account of awareness. Interactivism asserts that perception and awareness are emergent concepts which arise from the processes of a system. If we take an expressive approach to understanding and conceptual content, then perception and awareness can be explained in terms of being able to anticipate and apply concepts.

The interactivist criticism of encodings has been applied to machine intelligence---criticising methods such as CYC for, similar to Ring's arguments criticism of the same ontology and call for grounding knowledge in sensorimotor experience (Ring, 2016). However, instead of such projects being doomed due to lack of grounded, sensorimotor experience, the encoding criticism dooms CYC for attempting to capture correspondences between mental representations and the environment, rather than the dynamics.

Similarly, these arguments can be rephrased not as arguments against encoding, but rather as arguments against representation.


Sights from DLLS & RLSS 2018 in Toronto.

This year I went to DLSS and RLSS in Toronto. The introductory talks were probably the best intro to neural nets talks I'd seen: the talks were tight and intuitive without having to water down the technical details.

The number of people cramming in for the summer school was surprising. It's really great to see how interest in Reinforcement Learning has picked up in recent years.

Being back in Toronto for the summer means that I had I had the chance to wander around kensington market again. This time, sans persistent summer flu. With a few fellow students in tow, Anna and I hit up Yarns Untangled, the first LYS I ever visited. We picked up needles and yarn to teach some people how to knit while sharing a pitcher of beer on the patio across the street.

Against my better judgement, I picked up a few indie-dyed skeins of yarn. One from lichen and lace---a dyer on the east coast---and one from fiesty fibers---a local Torontonian who happened to be having a trunk sale while we were in town.

Who knows what the skeins will end up being. I suppose I can always teach myself how to knit socks.

Having the chance to hit up local yarn stores with active communities reminds me of what I'm missing out on in Edmonton. YU felt like a community hub. People would would gather on their couches, chatting with each other while they worked on whatever project they were carrying with them.

While I was waiting for a few people I sat myself down next two a couple of women and felt right at home chatting with them about how they originally started knitting and what they were currently working on. It's really refreshing to have these spaces which people can come into and join without any introduction: it's really healthy to have these communities where people can just feel at home.

I have no regrets about wandering into Little Pebbles to have Japanese dessert before meeting with some of the other students for brunch. I had this little matcha tiramisu which was carefully constructed in this little box which reminded me of sake drinking vessels. Interestingly, instead of a brandy base, at the bottom of the tiramisu was a bit of red bean paste to sweeten and balance out the earthy matcha flavours.

The whole place was bright and funky without being overwhelmingly ornate. It was an unusual and pleasant surprise to see the little signs up on the tables which politely notified people that they had to put their electronics away during peak hours--an attempt to foster community and conversation.

When wandering around the city I found a whole bunch of cute ceramics, which make me regret not having kept up with pottery after highschool. Maybe I'll need to eventually fix that and take a course at Edmonton's city arts centre.

The closest coffee shop to where I was staying was Hopper. It was a cute little place with great snacks and even better espresso. In spite of being fairly spartan in terms of quantity of furniture, what they had was really funky---i.e., campbell's soup can tables.

I finally managed to try goldstruck--a place I wanted to visit while I was interning in Toronto, but never quite had the chance to. They definitely themed the place appropriately. Walking down the stairs into the sub-terrainian coffeeshop, you're greeted by the warm glow of industrial lighting and mining-inspired decor. Even the bathroom has these massive wooden barn-doors which slide open.

Of course, my favourite little cafe was sorry: a little gem that's tucked away in a corner, unapologetically making great espresso and pastries.


I talk about my weekend trip flying down to Wyoming to see the solar eclipse.

I flew down to Wyoming on the weekend to go see the Solar Eclipse. This was a spur of the moment trip; a family friend is an amateur astronomer and was planning on driving down on the weekend to be able to catch the eclipse.

One problem with their plan: motel rooms within driving distance of the totality were going for $1200 or more on the evening before the eclipse.

One solution: motel rooms within flying distance of the totality were going for 90$ a night the evening before the eclipse.

Instead of driving down, we all flew down from Calgary, stayed the night in Montana, and on the morning of the eclipse flew in to Riverton, Wyoming, a town of roughly 11,000 people.

Why the fuss of trying to get onto the totality line? In many places you could see the sun turn into a sliver during the eclipse, but only if you had the protective eyewear. In a few places stretching across the east to west of the U.S. you were able to see the eclipse in it's totality; for just over two minutes the sun would be entirely blocked by the moon, allowing you to see the sun's corona.

A Surreal Setting

They really pulled out all the stops in Riverton for the eclipse. There were a couple of people with walkie-talkies and an ATV set up as temporary ground-control. On arrival they pointed you towards a breakfast barbecue they'd setup for all the planes which flew in for the day.

Apparently we weren't the only people to come up with this plan.

One of the most interesting aspects was the sheer number of planes. There were a score of private jets on the ramp, including a challenger, and probably close to a hundred small personal planes on the tarmac and grass surrounding the airstrip. A few people were camping next to their planes overnight. A number of the private jets erected shelters and had party games under their wings.

It was like a tailgate party for plane people.

11,000 people live in this town and it suddenly had hundreds of millions of dollars in planes sitting on the tarmac, only to leave when the eclipse was over.

The Most Impressive Sight I've Seen

To view the eclipse we brought a number of welders glasses which we could layer depending on the cloud-cover and intensity of the sunlight. At first you could only see a little dimple in the top of the sun. As the dimple grew and the moon covered more of the sun, it got dimmer and dimmer, but not fast enough that you noticed it immediately. Even when mostly covered, the sun never really seemed like it was covered.

There was this dissonance: the sun was bright and it felt like noon, but everything had a strange tint. It was like someone had turned the contrast up on life. Shadows got sharper. The temperature dropped and eventually I got a chill even though it had been a balmy summer day.

Then the totality started.

All of a sudden the sun blinked out, covered by the moon. Around the eclipse you could see the corona of the sun---an aura of plasma surrounding the sun. There were jets pointing out from around the sun where you could see.

There was a pink and purple sunset on every horizon. If you looked close enough around the sun, you could see a number of planets including Mercury and Venus. Being able to see mercury was a treat, as it's usually challenging to see with the naked eye.

It was awe-inspiring .

When the totality came to an end, it was like there were sparkles erupting from the sun's corona. The moon has a number of craters in its side---craters which will allow some streaks of light through before the moon only partial eclipses the sun. This creates a bubbling and twinkling that only lasts a couple of seconds before the sun returns to a shining partial-eclipse.

We were really fortunate that the weather coming down and the weather on the day of the eclipse was in our favour. The cloud-cover parted just before the totality, giving us the perfect opportunity to see an astronomical event we may not have the chance to see again.


Today marks two years of #indieweb for me. I've been reflecting on my experience joining the community and my plans for the future.

hello, world.

On this day two years ago, I wrote the first post on my site.

At the time, this site was far simpler---I had the ability to write posts with micro-formats and was working my way to syndicating on other sites, adding geolocation, and adding micropub endpoints. A lot has changed since then.

The indieweb has been a lot of things for me: a neat hobby, a place for me to preserve the things that matter to me, a way of consolidating the ever-expanding number of social-media services I use, and a reason for me to meet up with interesting people in the local community.

Indieweb Then

Back when I started this project, I wrote a post after two-ish months of indieweb going over my experience trying to integrate into the community and build something that worked for me from scratch. One of the greatest challenges I remember was trying to figure out how web-systems worked.

Up until this point, the entirety of my focus outside of university was on machine intelligence and adaptive robotics. This was an entirely new space with a completely different set of requisite skills. While I was trying to decide how to structure my posts to maximise longevity, I was also picking up on how requests work, how to structure html, how to setup my own server, how to make my site secure, and how to beat style sheets into submission.

Apparently I was a late-bloomer; most people seemed to have done web-dev by that point in their computer science career. It felt like a lot at the time.

I originally picked up bear's example flask app, and it's still largely the skeleton around which my site is built.

Lessons learned from a solitary summer

I started this project because I was itching for a long-term project, and enough people on the University of Edinburgh's IRC channel suggested I do it. It had the appeal of being both completely different from the work that I usually do and a way for me to preserve my online content.

While learning all of the requisite skills was challenging, the real struggle in joining the indieweb was piecing all the components together to hold a mental image in my head of what an indiewebsite should be. I spent a great deal of time trawling through the wiki and absorbing all of the ideas on disparate pages. At the time, there were many pages which would all have slightly different variations of the similar information.

It was difficult to figure out what a 'core' set of requirements would be. Although I can't find it now, I remember a page which outlined 'levels' of indiewebness---a hierarchy which you could ascend by implementing features.

So I started implementing these features.

I probably shouldn't have. In retrospect, you were kind of advised not to. #ux and #ui first---that's the key suggestion for newcomers.

Of course, I ran head-on into features.

Things like micro-formats, micropub end-points, and POSSE are immediately helpful to new sites. Micro-formats help you think about how to structure your posts and make them consumable. Micropub endpoints enable you to use existing tools, rather than designing your own posting UI and framework. POSSE posting to other sites enables what you've built to be a hub which you control. These are concrete things that gave me most of the functionality I use today.

Not all of the features I added were helpful. in-reply-to functionality has rarely been used by people to interact with me. The one occasion where new people have sent me reply-tos was a discussion that started on IRC, if I remember correctly. That's not entirely surprising, as I only know a handful of indieweb people in real life. Most people who look at posts here are people who are using facebook or twitter.

These sorts of features---additions to my site which were indieweb-ish, but not exactly useful to me---led to feature fatigue. I refined my site added new features, but many of these new additions never really got used. The development of social features meant to facilitate interaction ended up feeling purposeless; I was an island of indieweb on my own in canada.

It can be kind-of isolating trying to join the indieweb outside of the major indie-hubs. For a lot of the federation-like features to be viable, you need a critical mass of people who not only have an interest of indie sites, but also are in your personal social group.

I wanted to have this social group, but it just wasn't the reality of my situation at the time. I was in Edmonton when I started the project---a city which I'm only just now starting a homebrew website club for. As a result, the entirety of my community was based off of IRC. The IRC folks were willing to help me out, even with really rudimentary problems. I even remotely attended another city's homebrew website club. However, I found these distant interactions weren't a perfect replacement for local community.

Lessons learned from focusing on design

Back in Edinburgh, I had a local group of friends whom I met up with on a weekly basis for HWC. Together, we all worked on our own projects in a local pub. I found this local, unstructured meetup gave me the time, space, and motivation to keep pressing on things that mattered to me---to keep working on indieprojects even when under pressure from external commitments.

I learnt about encrypting my own site. I tinkered with my server to optimize how it delivered pages--speeding it up a fair amount. I went back through my old code and refactored the posting interface---abandoning markdown as my primary form of storage for jsons.

With a fully functional site up and running, I focused on my own needs and developed features to support how I wanted to use my site. In hind-sight, that's probably the most indie thing I could've done, and how I should've started my indieweb adventure.

One of the motivating features for joining the indieweb was the ability to keep and curate the content I create over time. A substantial portion of this to me is images. For the site to be a long-term success, I needed a way to automatically upload photos from a variety of devices in a painless way, I needed to be able to store those photos both at a low-resolution with my blog-posts and in permanent storage, I needed to self-host my images, and I needed to be able to automatically generate collections of images for presentation. The key to this was finding a way to do this in a way that would be effortless for me to use. I finally settled on writing an extension to achieve this.

This was a big step for me, as it created one major strength on my site that was absent from any service that I used. My site was now not only a tool for sharing photos, but preserving and curating them in the long-run.

Along the way I made a conscious effort to start thinking about the visual design of the site---something that still needs a lot of work. I created more extensions which added small features to the site; features which were almost trivial. By focusing on things like resolving geo-coordinates to place-names and adding links to hashtags in text I made the site slightly more usable for me.

In doing this, I discovered that if I my system wasn't simpler than existing social-media sites, I wouldn't use it. If I was worried about it breaking, I was less likely to post things. If I wasn't sure if it would look nice on sites I syndicated to, I would hesitate. By focusing on myself, I built a better site and a site I'm more inclined to use.

Some of the most important additions---additions which encouraged me to use my site more---were features which no one would see. Changes to the posting interface had the most dramatic impact on the usability of my site. Simplifying syndication, adding tag recommendation systems, refining the layout: these were the things that I should have focused on from the start.

Results in the long-run

Syndication is something I still internally struggle with. I want to be able to ignore the fact that my posts are mostly being consumed on other sites---I want to forget that people are going to be largely seeing things on twitter and facebook. At the same time, I want to feel less reluctant posting throw-away comments and responses on twitter. Finding the balance between digital hoarding and wasteful posting has been difficult for me.

I've mostly decided that this is a struggle to perfect two things that are necessarily working against each other: to have the best formatted post on one platform, it will end up looking poorer on the other. Sometimes it's easier to write a one-off response to a chain on twitter; those posts are often things I don't really want to keep in the long-run. In addition, I should be writing for me locally first and worrying about presentation on other sites as an after-thought.

Where to go from here

Now that I'm back in Edmonton, I'm reflecting back on my past two years. I'm analysing my own mistakes in trying to join the indieweb so that I can support people interested in joining in Edmonton.

Right now, I've started our club by helping people get static university pages up. All students have space allocated to them to have their own personal web-page. By helping them learn how to format and mark-up their own little resume page, I hope to both give people the skills to work on other web-projects and help get them inspired to make their own indieweb blogs in the future.

Taking lessons from my own mistakes, I'll try to guide people with the principles, but encourage them to focus on things which feel right. I'm thinking of curating a little how to indie page which contains the lessons I've learned and a list of my favourite services like bridgy and own your gram

Personally, I'm going to continue my own work by focusing on testing and continuing to refine the design of my site. My current priority is continuing to polish my posting interface. Specifically, I'm interested in creating preview systems and tools which attempt to depict how a post will look when syndicated. After stabilizing on something that feels right to use, I'll go back and tackle more individual indieweb features---features which add to my experience without the need of people immediately interacting with my site. I've been toying with the idea of an auto-checkin tracker and a map which depicts all the places I've travelled. I'm also thinking of re-visiting features like RSVPing to see if I can find a nice way of tracking events that I'm attending.

Here's to two more years.


I talk about albums, photo management, and the sleek way I now post collections of photos.

I'm going away soon; I'll be cruising down the danube for a couple of weeks. Before-hand I wanted to find a way to improve the way I post my photos. I'm notoriously bad at taking care of my photos: I often let them rot on my hard-drive, never to be seen again. To rectify this, last weekend I updated the way I upload images, the way my editor allows me to post images, and the way I convert images in .md files into .html posts.

Before this change I only ever associated one image with a post. While it was technically possible via collections, it was a pain. Having a separate photo for each post is really inconvenient. As a stop-gap I've been using Own Your Gram as a means of posting photos. It's been a nice way to casually post photos from my phone. However, with this setup it's still challenging to manage large collections of photos.

I needed the system to:

  1. be able to upload a large number of photos conveniently
  2. be able to present recently uploaded photos so that
  3. be able to turn a human-readable representation of images into nicely formatted HTML
  4. be flexible in how the photos are presented

Now, it's easy for me to upload photos en-masse, embed them in associated posts, and make them look pretty.

One of the trickier aspects of this is the fourth point: I want adding photos to posts and albums to be simple enough that I'll actually use it. Adding the .html to a post isn't really an option. It's messy, easy to make mistakes, and will prevent any changes to my photo styling from being backwards compatible. Additionally, I want the simple input I add to be expressive enough that I can arrange photos however I want.

To do all this I wrote an extension for the markdown library that I'm using which describes how I can define a collection of photos. Similar to code fencing, a collection of photos surrounded by @ symbols is defined as a collection of images. Given I know anything within the @ will be parsed as an image, I drop the need for a preceding !.

When I parse this to html, I add in the bootstrap classes which give the formatting for my site and calculate what their size should be to evenly space them. To have a traditional album, I can easily just add multiple rows of these to space and collect them as necessary. To interleave text, I simply treat it like any fenced portion of markdown and text around the albums.

As I go along I may add more parameters which allow me to override the image formatting. For instance, the ability to specify a specific width would be a good way to add emphasis to a particular photo while keeping it together with my current pictures.

For now this is a low-stress way to keep posting photos.


I've been running some scripts on west-grid recently, so I've collated the information I've gathered from reading through the guides.

Because I've been running parameter sweeps with multiple algorithms over a nice data-set, I've had to change the way I run experiments. I just don't have the capacity to run experiments in a sane amount of time on my machine. To get around this, I've setup my code to run experiments on west grid, a research computing system.

In the process, I've written up a little guide for running experiments politely. This is mostly a refrence for future-me.

Note: This isn't particularly exhaustive: it's just an introduction; make sure you read west-grid's guides.


Jasper's Specs

Jasper meets my needs, so I'll use it for the overview. The technical specifications are:

Jasper is an SGI Altix XE cluster with an aggregate 400 nodes, 4160 cores and 8320 GB of memory. 240 nodes have Xeon X5675 processors, 12 cores (2 x 6) and 24 GB of memory. Of these, 32 have additional memory for a total of 48 GB. 160 nodes, formerly part of the Checkers cluster, have Xeon L5420 processors, 8 cores (2 x 4) and 16 GB of memory.

| Resource | Limit | | ---------------------------- | -------------- | | Maximum Walltime | 72 hours | | Maximum Running Jobs | 2880 | | Maximum Jobs Submitted | 2880| | Maximum Jobs in Queue | 5|

What walltime means is that the longest you can run a job for is 72 hours. After 72 hours, the job will be killed. You can get around this, by writing a script that performs your job in chunks, meaning that even if it terminates, you can pick-up where you left off. In fact, this is advisable. This way, if you set your wall time too low and your job is aborted part way through, you can pick-up where you left off without the hassle of re-running everything.

The maximum jobs you can have running or submitted at any one time is 2880. That means that the number of blocked jobs that area waiting to be executed may not exceed 2880, and the numer of running jobs may not exceed 2880.

When a job is submitted via qsub it is put through a scheduling system. The scheduler balances fairness with utilization in a number of ways. The actual algorithm is publicly available, but I've just found it's easier to submit a large number of short jobs, rather than a

Anna's Default Script

#!/bin/sh

  #PBS  -S /bin/sh
  #PBS  -j oe
  #PBS  -r n
  #PBS  -o logs/filename.$PBS_JOBID.log
  #PBS  -l nodes=1:ppn=1,walltime=0:20:00,mem=1gb

cd $PBS_O_WORKDIR
echo "Current working directory is `pwd`"
echo "Starting run at: `date`"
python experiment.py --horizon=50
echo "Completed run with exit code $? at: `date`"

My Script

#!/bin/bash
for s in s1
do
for a in a1 na1
do
for alg in autotd td tdr totd
do
echo '#!/bin/bash 
  #PBS  -S /bin/bash 
  #PBS  -M kearney@ualberta.ca
  #PBS  -m bea
  #PBS  -l walltime=01:00:00
  #PBS  
cd $PBS_O_WORKDIR 
echo "Current working directory is `pwd`" 
module load application/python/2.7.3 
time python ./pysrc/experiments/prosthetic-experiment.py 1000 '$runseed'  ~/usage-td-experiments2/usage-td-experiments/results/rndmdp-experiments/state-100-ftype-binary/ '$alg' > '$alg'-'$runseed'.txt' > $alg-$runseed.pbs 
qsub $alg-$runseed.pbs
done
done
done

Deleting Jobs

  1. list available space on your account

    lfs quota -u kearney /lustre

  2. shows all the jobs associated with Kearney

    showq -u Kearney

  3. delete jobs

    qdel jobid

To immediately kill all your current jobs:

qdel $(showq -u yourname | awk {'print $1'})

This takes the first parameter from showq---the process id---and tells the scheduler to delete it.

For more on running jobs, look here


A discussion of my first nine weeks in the indieweb community.

So, this site is now almost 9 weeks old. I've been loosely following the guide on indiewebcamp, plodding through the recommendation and trying to figure out what the best way to set things up is.

A map of the way I started building things is basically:

Week 1:

  • Figure out what the indieweb is all about
  • Devour all the IWC guides
  • Figure out what the best way to store content was
  • Get micropubbing with Quill to get some kind of content into the site.

I spent an awful lot of time during my first week trying to figure out what the best way to implement things was. Since so much of the indie-web specification is open-ended, there's a lot of decisions right from the get-go that you have to make.

How do you store your photos and your text? What if the text has a related photo? Should the text be stored as mark-down and then converted into HTML? Maybe you should just store it in HTML... The list goes on, and I really wanted to figure out what the most sensible design choice was, because making major changes to the way I store files and the way I format files would be a pain. After all, what sold me on the indieweb was a sense of permanence and structure in the way I store my photos and my text.


Week 2

  • Started refactoring stuff from lessons learned. I'm not a web-dev expert by any means, so there were a lot of lessons learned.
  • Added images to the site and started work with own your gram to sate the needs of my instagram-using friends.
  • Committed to a formatting structure that's easy to read and machine-parsable

This was going to be the week dedicated to POSSE: the idea of posting on your own site first, then syndicating elsewhere. I was going to kind-of fake this by using Quill for text posts and Own Your Gram for images. OYG takes images posted on instagram, and sends them to your site. Technically this is PESOS, but I was willing to temporarily compromise, since you can post to facebook, tumblr, and twitter directly from instagram.

This was the week that everything I posted got collected onto my site.


Week 3

  • Auto-posting to twitter
  • Added a database as a sort of caching system to point to where posts are
  • Made my own posting client
  • Started filtering posts by tags

This was going to be the week I was going to actually work on POSSE. There's a couple of reasons this is a good thing to do. Chief among them is formatting: when I publish on my site, I can format the text. When I get text back from instagram posts, it's mangled with handles and hashtags. Ew.

Additionally, by posting on my own site first, I can add links back to my site. However, in my attempts to free myself from the instagram app I came face-to-face with the fact that you can't post to instagram from their API

At this time, uploading via the API is not possible. We made a conscious choice not to add this for the following reasons:

  1. Instagram is about your life on the go – we hope to encourage photos from within the app.
  2. We want to fight spam & low quality photos. Once we allow uploading from other sources, it's harder to control what comes into the Instagram ecosystem. All this being said, we're working on ways to ensure users have a consistent and high-quality experience on our platform.

So I dumped instagram.

I may come back to it in the future, but I don't care enough about it right now to go ahead and deal with the droll work of removing hashtags and handles. This was the motivating factor to make my own posting client. With it, I can post images (albeit, clumsily) and post to twitter. Through twitter, my posts go to face book.

Boom. Everything is POSSE.


Week 4

  • Tweet formatting to add images
  • Changing up the aesthetics
  • Adding all the stored information---such as geo coordinates---to the posts
  • Added a by-date search

This was a week for formatting. Whomever last edited the indieweb site suggests you work on your design first and foremost.

UX and design is more important than protocols, formats, data models, schema etc. We focus on UX first, and then as we figure that out we build/develop/subset the absolutely simplest, easiest, and most minimal protocols & formats sufficient to support that UX, and nothing more. AKA UX before plumbing.

Boo.

Well, I disagree with this primarily because the whole point of this exercise is to take the stuff that I typically leave to rot on social media sites and store it somewhere safe and secure. Safe, secure, and in a nice format that will last in the long-term. For this reason I chose to prioritize the fetching posts from sites I already use and the mechanics of syndication. So, up until this point, the site was largely unusable, but was a kind of storage facility. I promise it's not because I'm an engineer

So, eventually things need . I added a form of navigation that lets you find, for instance, all of the posts from a specific month and year. I started putting effort into a semi-respectable UI. That being said, I'm not known for being a good UX designer


Week 5

  • Improving the usability
  • A quick-post system on the blog-roll

Week 6

I took a break and built a little site for rating informatics courses at my university.

Week 7

  • Made the posts markdown based for styling
  • Updated the styling to make it readable
  • By category filtering

Because things were usable, I slowed down a bit. I started to work on less interesting things, continuing to focus on the usability, while doing some testing and refactoring the hacked-together mess that was my blog.


Week 8

Skyrim belongs to the Nords.


Week 9

  • I fixed my micropub end-point, removing all the code-snippets I got from other people's projects
  • I added a means of collecting groups of posts, like images
  • I added an editor to make changes to posts
  • I focused on the usability of the site and make links to things that are relevant
  • I started talking on IRC

I now feel like I actually have something semi-respectable. Sure, it's spaghetti code that's tangled up, but it does what it's supposed to, and I think I made some reasonable choices that will ensure stability in the long-run. That being said, I'm still a lone island in a vast sea. I don't really spend much time talking to indieweb people, and I've not implemented any of the functionality that allows me to interact with indieweb sites.

Going forward, I'd like to implement webmentions and functionality for event-based posts. Beyond that, I guess spending more time getting integrated in the community would help my project grow in the long-term.

There seems to be some tentative interest in Edinburgh University Hoppers to run some web-development workshops next year. If there's enough interest, I'm sure we could get a few people to start a hombrew club and build our own community.

Speaking of which... I should probably update the ancient hoppers page.


Here's an example of a collection of images, or an album. So I've started this as a means of collating a group of related items.

I wanted the extension to be as minimal as possible. As a result, I treat a collection post the same way as any other post: there's no additional information or details associated with a collection. I manage this by making albums that are simply 'responses' to other posts on the site with the in-reply-to field. This lets me give all the individual images additional information, by letting them be their own posts. It's a bit of a hack and I'm kind-of using in-reply-to fields for something other than what they were originally intended for.

It's just a mock up, really, but it does what I need it to do. I still need to figure out what the most sensible way to display all this is. :/