Functional Programmer Lingo in Verse

I recently gave a talk about some of the terms commonly used by functional programmers, entitled Coder Decoder: Functional Programmer Lingo Explained, with Pictures.

As part of my preparation I pulled together a list of lingo and found it started to sound a bit like a rhyme. I ended up rearranging the phrases into a poem, and adding a few more to fill the gaps -- perhaps I had a little too much time on my hands on the plane ride to the conference.

I performed the poem as part of my presentation and a few people have since asked me for a copy, so here it is. Enjoy!

Lingo of Lambda Land

Comonads, currying, compose, and closures
This is the language of functional coders
Equational reasoning, tail recursion
Lambdas and lenses and effect aversion
Referential transparency and pure functions
Pattern matching for ADT deconstructions
Functors, folds, functions that are first class
Monoids and monads, it's all in the type class
Infinite lists, so long as they're lazy
Return an Option or just call it Maybe
Polymorphism and those higher kinds
Monad transformers, return and bind
Catamorphisms, like from Category Theory
You could use an Either type for your query
Arrows, applicatives, continuations
IO actions and partial applications
Higher-order functions and dependent types
Bijection and bottom, in a way that's polite
Programming of a much higher order
Can be found just around the jargon corner

Stepping Up the Pace at Work with a Treadmill Desk

About six weeks ago I bought a treadmill desk.

Now I deal with email, write code, prepare slides and even type blog posts while walking anywhere from 0.6km/h to 6.4km/h. I am walking at a steady 3.5km/h as I write this.

There have been multiple studies that suggest sitting down for long periods of time is not great for your health.

As a Software Engineer, I do a lot of computer work and for most folks that means sitting down. It doesn't have to.

Quite a few people have asked me questions about my treadmill desk experience. It is still early days, but here is my story to date.

TR1200-DT3 Treadmill Desk The TR1200-DT3 desk treadmill paired with a secondhand motorised standing desk

From Sitting to Standing

When I started doing the majority of my work remotely in 2012, I decided to buy a standing desk. I couldn't afford one of the whiz-bang motorised ones but I found a cheap secondhand IKEA Fredrik on Gumtree that did the trick.

As the desk could only be adjusted by removing all my gear and manually shifting the shelves, it wasn't something I was keen to do very often (I recommend using a calculator like this to get the heights right). I bought a drafting stool to go with it (which was actually three times more expensive than the desk) so that the option of sitting was still within easy reach if I wanted it.

I soon found out that standing statically for long periods of time is pretty hard. I would jump around a bit and come up with weird exercise moves (the neighbours who can see in my office window probably think I'm mad). In the end, most days once my feet were sore, I would end up sitting back on my drafting stool. I generally only stood up for about half the day.

From Standing to Walking

I read that walking is actually easier on the body than standing (especially if you have back issues, which luckily I do not). I started researching treadmill desks, as well as other options such as under-desk elliptical trainers.

For a while I was planning to buy a regular treadmill, hack off the bars at the front and separate the console to create my own desk treadmill. My motivation was to save on the cost of a purpose-built treadmill desk. After browsing enough secondhand treadmill advertisements to give me square eyes, I realised finding a decent treadmill for a low enough price to make the repurposing effort worth it would be tough. There was also a risk that I would burn out the motor by using a regular treadmill for longer than what it was rated for each day.

I scoped out all the treadmill desks available for purchase online. Most were in the United States.

The only Australian distributor I could find was Treadmill Desk Australia (Infiniti Fitness), which offered the TR1200-DT3, with or without an accompanying desk. In the US, the same model is sold by LifeSpan Fitness. It's also available on Amazon.com.

Although the model may look cheaper to buy from the US, these sites do not ship to Australia. Given the weak Aussie dollar, conversion fees, freight forwarding costs, import duties, taxes and charges, and the headache it would be to do any warranty claim if I bought from the US, I decided the potential savings would not be worth it.

I watched the Treadmill Desk Australia site for months and the price remained static at $AU1899 for the treadmill alone. Now that I have bought one, naturally to my chagrin they have gone on sale for $1699. My treadmill arrived mid January; shipping was included and fast.

TR1200-DT3 Treadmill The TR1200-DT3 desk treadmill up close

Treadmill Specs and Warranty

The TR1200-DT3 treadmill has a minimum speed of 0.6km/h and can go up to 6.4km/h. It does not have incline functionality. It doesn't have bars or columns at the front; the console is completely separate and attached only by a cable.

According to the Treadmill Desk Australia website, the treadmill is rated for use for up to 10 hours a day and "can operate at slow speeds with very high levels of torque to increase responsiveness, minimising engine wear and allowing the machine to operate constantly for long periods without risk of motor burn out." However, the warranty lists the maximum domestic daily usage as 6 hours and includes the line: "Treadmills are not to be used for more than 1 hour straight without a cool down period of 1 hour." This inconsistency between the marketing and the warranty was a bit disconcerting.

One other bit of warranty information you should know if you are planning on buying one is that the instructions say the treadmill should be lubricated every 100 hours or six months; 100 hours will come up pretty quickly if you are using the treadmill daily. According to the warranty, only Infiniti-brand silicone can be used, which I guess is how they get you.

The treadmill comes with a five-year warranty for the motor, two years for parts and one year for labour.

It has an Intelli-Step pedometer built in and an Intelli-Guard feature that will make it turn off if it doesn't detect any steps for 20 seconds (you can disable this).

It is able to synchronise information with a web interface via Bluetooth. However, I read some Amazon reviews and blog posts (based on the US model) that suggested the Bluetooth syncing did not work well and the accompanying website was rubbish. Given this and the fact I have a FitBit One collecting my stats anyway, I haven't been motivated to try the Bluetooth on my treadmill yet, or log in to the Infiniti Fitness Club.

Treadmill Desk New in Box TR1200-DT3 desk treadmill new in box

Treadmill Desk Unboxing TR1200-DT3 desk treadmill unboxing

Getting In Step

The treadmill weighs a fair bit (60kg) so it was a pain to move into the house, but it was relatively easy to set up. It came with thorough instructions for getting everything working as it should be.

I started out using my IKEA Fredrik standing desk with the treadmill. A couple of weeks later though, I was lucky enough to be given a secondhand motorised standing desk, greatly expanding my available desktop area. I really love my new setup, but both desks were workable. I don't think it is necessary to go the whole hog and buy both the desk treadmill and a motorised standing desk.

I did not find it at all difficult to get used to using the treadmill. While everyone who visits my house seems to find it fascinating, it's not actually hard to walk and work at the same time. The moment I concentrate on whatever is on my screen, I forget about my legs and they just do their thing. No, I have not fallen off the treadmill while working, although everyone seems to ask that.

The speed I walk at depends on the task I am doing and how tired I am. I generally walk quite fast while reading email (4.5-5km/h) and at a more moderate pace when I am typing (2.5-3.5km/h). It's actually difficult to walk any slower than about 1.5km/h, but I might slow to this pace at the end of the day when my feet are sore. I only reach the top speed when I'm mad about something; it's a great way to let off some steam.

I agree with the posts I read that suggested it was easier to walk than to simply stand. I started using the treadmill set-up for entire work days from the first morning I stepped on it. My only issue was with my footwear; I started off trying to use runners for the arch support, but found them too constrictive. I now have slip-on Merrells with great cushioning. My feet do still get sore by the end of the day but I think that is pretty normal if you're standing or walking the whole time.

I haven't used the treadmill every workday since it arrived as I have had to go into the office in the city and been on the road at times. However, all of the days when I have worked from home the entire day, I haven't sat down in my office (admittedly I have sat down in other parts of the house; I go elsewhere to eat). The treadmill has wheels at the front, so it can fairly easily be moved out of the way and replaced with a chair if you so choose (and have a height-adjustable desk); I haven't felt the need to do this.

As aforementioned, I have a FitBit recording my movement statistics. This does seem to give different results to the step counter on the treadmill; I have not done any tests to see which is more accurate. My FitBit records statistics for my entire day, rather than just when I'm using the treadmill, but my walking time is definitely the main contributor. On my biggest day on record in the past 30 days of FitBit stats, I covered 31.5km and did about 47,000 steps. Looking at the past 30 days, it seems on a more typical day of using the treadmill I do about 37,000 steps and 25km.

I have lost weight since I have been using the treadmill desk, but I would not attribute that to the treadmill use alone and it isn't really the point. The treadmill contributes but it is not a replacement for daily exercise; I have still been going to the gym.

Treadmill with IKEA Fredrik Standing Desk My initial set-up: the desk treadmill paired with an IKEA Fredrik manual adjustable-height desk

Frustrations and Warnings

A few people have asked how much noise the treadmill makes. This doesn't really matter much for me as I am in a home office, but could be an issue in a shared office environment. I used an Android app to measure the sound and found when I was walking slowly, it hovered around 40 decibels, and shot up to 45-50 decibels when I went at a fast pace.

Although I haven't fallen off the treadmill while walking on it, I have had some minor spills when just standing on it. It is pretty easy to forget you are raised off the floor when you are not moving, so I'd advise caution when standing statically at a treadmill desk.

There are a few annoying things about the treadmill controls. Every time I switch it on, nothing happens. I have to flick the on/off switch (which is at the very front of the treadmill, so I have to go under the desk to get to it) off again, which causes the console to beep, and then flick it on again, which makes it beep again and finally turn on properly.

Another annoyance is that you have to press the speed controls once for every increment or decrement of 0.1km/h; you cannot simply hold the arrow keys down to achieve your desired speed. Along with this, every time you pause the treadmill, it starts back up at 0.6km/h. This means you have to press the up-arrow up to 58 times to get back to your chosen speed.

I have tried playing with the Engineering Mode and another mode I found (demo perhaps) to try to discover a way to hack the arrow buttons to change the speed by simply pressing them down. I haven't had success yet. I have managed to get into a mode in which you can just hold the arrows to increase and decrease speed, so I know the treadmill is capable of this, but I haven't been able to get this to apply in the regular usage mode. I have perused the manuals for the TR1200-DT3 and many related models and none seem to address this, so if anyone knows the answer I'd love to hear it.

TR1200-DT3 Treadmill Desk Console The treadmill desk console

Tips

One of the first things you'll probably want to do if you get this treadmill is disable the console beep. As described above, you have to press the arrow buttons for each 0.1km/h speed change -- out of the box, you get a shrill beep on every one of these presses.

Thankfully, this can be disabled; the manual explains how. You enter Engineering Mode by pressing and holding Stop/Pause and then pressing and holding the up-arrow (/\). Then, you keep pressing the arrows until you get to F015. You press enter to select it, and then use the arrows to switch between on and off. You press enter again to confirm, and then remove and reinstall the safety key to reset.

There is another mode you can go into by pressing and holding Stop/Pause and then pressing and holding the down-arrow (\/). I'm not sure exactly what this is for and haven't been able to see any noticeable changes from toggling the settings in here, but it is from this state that I found the mode where you can press and hold the arrows to change the speed.

I mentioned above that having the right shoes makes a huge difference. One extra piece of advice I would give is not to try to break in new shoes on the treadmill itself. I love my Merrell Encore Breeze 2 shoes, but when I was first using them I ended up with bloody heels and didn't even notice. As I've said, my brain pretty quickly tunes out what my legs are doing -- I guess that's not always a good thing.

My final tip is that when your feet are feeling sore, putting on some music can do wonders for your energy levels and help you slog on. I probably look like a goose, but I feel like I am grooving.

Overall, I am really glad I splashed out and bought my desk treadmill. It is way easier than I thought it might be to use regularly and I feel great, especially when I'm treadmill dancing :).

TR1200-DT3 Treadmill Desk The TR1200-DT3 desk treadmill paired with a motorised standing desk

PyCon Au Particulars: 10 Elements of a Quality Conference

It's been about two years since I made my entrance into the wonderful world of software development conferences by attending PyCon Australia Sydney 2011.

Over the past few days I have been enjoying my second PyCon Au, this time in Hobart, and taken some time to reflect on what makes the conference unique and how I've grown as a developer since the Sydney event.

At my first PyCon Au I had no other conference experiences with which to compare but I recognised I had stumbled on something worthwhile and blogged about the five major benefits of attending a coding conference.

Two years on, I have attended quite a few conferences and even been privileged to speak at a couple.

In fact, a couple of people I ran into at PyCon Au this year were surprised to see me there as they had met me previously in a different context.

I have stayed true to the intention I expressed in my very first post on this blog, to expand my coding horizons by extending the limits of my language, and that has led me to become a part of multiple programming language communities. I believe each community has something to offer and — especially as someone seeking to foster women in tech — I think there is great benefit in being involved in many of them.

Looking through the lens of my experiences over the past couple of years at conferences and other events focused on a variety of languages, I can now discern that there are many things PyCon Au does particularly well.

Here are my 10 favourite features of PyCon Australia:

  1. Inclusion of enthusiasts. I met a lot of software engineers at this year's PyCon Au, but I also met folks from completely different professions who just enjoy dabbling with Python. There were also many students and people from a variety of vocations wanting to learn to program to make their jobs easier. The conference schedule included talks suitable for beginners, so there was something for everyone. It was wonderful to see that people with a variety of professional backgrounds felt comfortable to attend and were warmly welcomed.
  2. Commitment to diversity. The IT industry is struggling with gender (and other) diversity issues, but I've never felt out of place as a woman at PyCon Au. It really is an inclusive event, as outlined in its Code of Conduct, and attracts quite a number of women (enough that you don't feel like the odd one out in the crowd). Special effort is made to make sure women feel welcome with the inclusion a PyLadies breakfast on the program, which men can also attend provided they are invited by a female attendee.
  3. Financial aid program. When it comes to the aforementioned two points, the conference puts its money where its mouth is. Its generous financial aid program helps students, teachers and members of groups that encourage diversity to attend the conference, as well as funding presenters and other community representatives.
  4. Open-source sprints. The main conference event is followed by two days of sprints, where delegates come together to hack on open source code. Core developers from some of the Python ecosystem's key projects are on hand to help out and give the support and encouragement required for attendees to be able to submit a patch with confidence. This event helps to upskill developers and documenters, and garners valuable contributions to the community.
  5. Prioritisation of lightning talks. Many conferences have lightning talks, but I don’t think any I have attended have given them as much space as PyCon Australia. There was an hour set aside for lightning talks on each day of PyCon Au this year, which was one of my favourite parts of the day. The delegates responded to the call for talks with gusto, delivering informative and entertaining five-minute presentations. It was nice to have so many different voices on stage.
  6. CodeWars. This is an event held ahead of the conference that isn't quite like anything I've experienced elsewhere. Teams compete in a coding tournament described as "Seriously technical, seriously irreverent, and seriously fun". The challenges aren't your standard coding problems; much work goes into creating puzzles that stretch the imagination and engage the audience.
  7. Sit-down conference dinner. There's something really lovely about actually sitting down and having a proper meal with your fellow delegates. The PyCon Au organisers always make sure there is plenty of good food and beverages to go along with the good company. This year there was also a brilliant keynote by MooresCloud CEO Mark Pesce during the dinner.
  8. Job board. PyCon Au hosts a large whiteboard where attendees can record if their companies are hiring, or if they are looking for work. It's a simple idea but a very effective means of facilitating this valuable delegate communication. 
  9. Next day video. All of the conference tracks were recorded this year and the videos are all expected to go live this week, with some already released. Having this assurance that recordings will be available so quickly makes it much easier when you're agonising over which presentation to attend.
  10. Miniconfs. One-day Django and OpenStack events were held ahead of the main conference. The miniconfs were a new addition this year, but by all accounts they made a significant contribution to the conference experience. 

Although it won't be a regular fixture of PyCon Au, special mention should also go to the amazing setting this year's conference had in Hobart, Tasmania.

The conference team organised a phenomenal venue, with stunning views of the harbour and Mount Wellington.

The 2013 conference was the biggest yet, attracting 310 delegates from as far afield as the United States, Europe and Asia.

Coordinator Christopher Neugebauer announced at the conference close that PyCon Au 2014 and 2015 will be held in Brisbane, so the challenge is there for us Queenslanders to make sure the next couple of years hold even bigger and better things for this excellent event.

View of Mount Wellington View of Mount Wellington from inside the conference venue.

Sunrise over the harbour Sunrise over the harbour, as seen from the Hobart hotel hosting PyCon Au.

Functional Frock: A Dress Fit for a Lambda Lady

Do I want to look geeky or girly today?

It's the question I face every morning when I peer into my wardrobe. I pick out a cute dress or a programming-themed T-shirt — and in the latter case perhaps slip on my binary watch — and then get on with the rest of my day.

The trouble is, sometimes I don't want to be forced to choose; I want to express both my geekiness and my femininity in the one outfit.

It was this desire that prompted me to start scouring the web for geeky dresses. However, to my chagrin, I didn't find much that appealed to me. I spotted a few phenomenal Cosplay outfits, but they weren't really my style, or the sort of thing I could wear to work without raising eyebrows.

Frustrated, I started searching for custom dress manufacturers. Again, the results were pretty disappointing. While dozens of vendors will let you create a custom T-shirt, websites offering dresses or skirts for which you can select the style and material are few and far between. I couldn't find any offering a choice of style and the option to supply your own fabric design.

I did, however, find several websites offering custom material at a reasonable price. Determined to get my hands on a work-appropriate girl geek dress, I started dreaming up plans to learn to sew. A few minutes later I came to my senses and decided the easiest way to get what I wanted this decade was to find a dressmaker on Etsy who would happily use custom fabric.

My time spent swing dancing has given me a deep appreciation for all things vintage (1940s/1950s), so I searched for someone creating vintage-inspired couture and found the woman who would finally make my girl geek dress dream a reality, Tracy McElfresh of the aptly named Custom Dress Shop.

I designed my material print in Inkscape and uploaded the SVG to Spoonflower; it features six spirals of Haskell code expressing sorting algorithms (quick, merge, selection, bubble, insertion and cocktail) encircling a lambda, on a purple background, of course (I may be a little obsessed with purple, as anyone who has seen my hair recently will know).

I figured out the best way to size and print the design (a half-drop makes a layout that is not perfectly symmetrical look much better!) and had the fabric shipped to my wonderful dressmaker, Tracy. Within a few weeks she had created my functional frock, as well as a skirt made from the same material.

I'm not sure how unusual I am to have wanted this dress — software engineering women are a minority and of course everyone has different preferences on what they like to wear — but there may well be a market for this sort of custom girl-geekwear. At the very least, I think there would be demand for a website offering completely custom dresses (not necessarily geeky ones — any custom print) at a reasonable price. It wasn't cheap to produce my dress, so if there are any entrepreneurs out there who would like to streamline the manufacturing process, I'd be delighted to be a product tester.

Here are some pictures of my dress and skirt from when they were being made, as well as the final results. I'm sure they're not to everyone's taste but I'm pretty happy with how they turned out. I don't think having this new girl-geekwear will really make my morning wardrobe decision-making all that much easier (taking a long time to get ready is my prerogative as a woman, right :) ?), but it’s nice to have them there. Now I have an option for those days when I want to show the world I'm proud to be both a vintage-dress-loving woman and a computer geek. 

Lambda Dress and Skirt

Lambda Dress and Skirt

Lambda Dress and Skirt

Lambda Dress and Skirt

Lambda Dress and Skirt

Lambda Dress and Skirt

Lambda Dress and Skirt

Lambda Dress and Skirt

Lambda Dress and Skirt

Lambda Dress and Skirt

Fixing Flashing Fedora: Linux Boot Issue Solution

I installed a bunch of development tools and packages today on a Linux laptop running Fedora 18 and when I restarted the machine I was only able to boot into single-user mode.

It's not the first time that has happened to me, but the fix for this particular issue came from asking one of my kernel hacker colleagues for a bit of direction, so I thought I should document it for anyone else who might get stuck.

Symptoms:

When the machine booted, it got to a point and then the display started flashing on and off. It would show the start-up logging, then go to black, then about two seconds later come back again — and repeat. The log output was no longer progressing.

Analysis:

I booted into single-user mode and had a look at the logs. I found that /var/log/messages included repeated blocks of output like this:

localhost systemd[1]: lightdm.service: main process exited, code=
exited, status=1/FAILURE 
localhost systemd[1]: Unit lightdm.service entered failed state 
localhost systemd[1]: lightdm.service holdoff time over, scheduling restart. 
localhost systemd[1]: Stopping Light Display Manager... 
localhost systemd[1]: Starting Light Display Manager... 
localhost systemd[1]: Started Light Display Manager.

This was as much detail as was provided, so I went to /var/log/lightdm to have a look at the LightDM logs.

The lightdm.log file pointed me to a failure with Greeter, but didn't give any further details. The relevant Greeter log file finally gave me the error I was hunting for:

lightdm-gtk-greeter symbol lookup error /lib/libGL.so.1 undefined 
symbol _glapi_tls_Dispatch

A Google search gave me no results for this error. Before I attempted to delve any deeper myself, I asked a kernel hacker colleague, and he knew off the top of his head the packages involved and what the problem was likely to be. He advised me to check that all my Mesa packages were the same version:

rpm -qa | grep mesa

I'm not sure how or why they got that way, but the mesa-* packages were indeed from two different versions.

Solution:

I updated all the Mesa packages so the versions aligned (I had to start NetworkManager first as by default there is no network access in single-user mode):

yum update mesa* -y

Problem solved. I hope this helps someone else who perhaps isn't fortunate enough to work alongside someone like my knowledgeable colleague.