Author: Maëlys McArdle

  • 3D printing!

    3D printing!

    I got my first taste of 3D printing!

    I had been exposed to it five years ago when 3D printers started to get into the consumer market. The geophysics company I worked for had a 3D printer in one of its offices to test out manufacturing replacement parts, including tail fins.

    Fast forward a few years and 3D printing has entered the consumer market for hobbyists. The Ottawa Public Library has a 3D printer. A number of my coworkers at my current employer have one too.

    So for (a very belated) Christmas gift, I was asked for a map of Vancouver to figure out the best bicycle routes. This is actually a pretty complicated problem. Rudimentary car navigation relies on cost equations along lines (roads). These lines have different weight based on their individual speed limit, so that highways are prioritized over side roads. Then you figure out the shortest path, following the lines (roads), from one point to another keeping those weights in mind.

    With bicycles, you have to give paths weight according to the energy required to go up hills. This means combining two classes of data: vector (think lines like roads) with raster (think images like elevation). Open-source tools are pretty awful at combining these two. The math is fun, but difficult to implement and I don’t think the end-result would be useful. There are so many things you can do that wouldn’t be taken into account.

    So I thought of an alternative: what if they had a 3D printed topographical map of Vancouver? Then they could see for themselves what routes might be better for them. Our brains are pretty great computers.

    Making the model

    The first step was to download elevation data of Vancouver. Vancouver, like many other cities, releases this data for free as part of an open data initiative. This was likely collected through aerial surveys using LIDAR, post-processed to remove buildings and make the topography evident.

    I downloaded the data and loaded it into QGis, an open-source GIS software. I also downloaded road data and bicycle routes from Vancouver’s open data website. The person this was for had also given me important locations to them, which I loaded in as point data (not shown in these screenshots for privacy).

    I then used a plug-in for QGis, called DEMto3D, to create a 3D mesh in the STL format commonly used by 3D printers. I loaded this mesh into a free tool called Autodesk Meshmixer, as to simplify the mesh. The mesh file was initially 250 MB, and the 3D printer I was using supported a maximum of 64 MB.

    I then printed the mesh. The end result was pretty great! I lost some of the detail in the original mesh, which showed the road as bumps.

    I was very pleased with the end result!

  • Web front-end for Adventure

    Web front-end for Adventure

    In a previous blog post, I announced the completion of an open-source text adventure game engine, aptly called Adventure.

    The game engine came with a command-line front-end for demonstration purposes.

    I’ve now implemented a quick-and-dirty web front-end of the engine. It also includes text-to-speech, reading out the contents of the story to the user. I had intended to implement speech recognition as well, but this isn’t enabled in Firefox by default so I didn’t include it.

    Unlike the engine, this front-end is not really put together with other developers in mind, but if you’re interested, you can get the code here. It’s pretty simple stuff; the UI is made with React, gulp is the task runner putting everything together, and I use Express as a web server.

    Next up is writing a work of interactive fiction.

  • Open-Source Project: Adventure

    Open-Source Project: Adventure

    After four months of work, I’ve completed a new coding project!

    It’s an interactive fiction game engine. It lets you create text adventures – those games before the age of computer graphics that played like a novel unfolding before your eyes. The player would write what they wanted to do in plain language, and the game would understand that and spit out what happened next.

    A story in action.

    There are tons of game engines like this out there. I wrote mine because I wanted to write interactive fiction, and I wanted to write it in a way that was intuitive to me. I also wanted to have games playable through a web browser and that could be written in languages other than English.

    I created a declarative language for creating the games. Instead of programming the game by specifying what each step was to get to a final result, I made it so I could define rules for how things were related, and the game engine would figure out the rest.

    Writing an interactive fiction for the game.

    I’m very proud of what I’ve put together. Next up is writing the interactive fiction I’ve been meaning to create and putting that online.

    You can download the source code at GitHub.

    If you’re interested in writing interactive fiction, I would recommend downloading and using Inform 7 rather than what I’ve put together. Writing stories in Inform 7 is more intuitive to non-programmers, it has great documentation, and is just much more mature of a product.

  • Slam Sermon: Sex Work

    Slam Sermon: Sex Work

    This is the poetry I recited for the slam sermon at my church.

    The common occupations
    Among my relations
    Are sex work
    And social work

    One has their work
    Foisted upon them
    As an identity
    Objectified
    For our moral supremacy

    The other is normalized
    Invisible from all pulpits
    Free of proselytizing

    When you say prostitute
    What I hear is the other
    Not my brother or mother

    Work is work until it is sex work
    Am I right?
    Our history of misogyny
    Breathing today
    In the lessons of the day

    Injustice makes sex work
    The best work

    Tell me what job offers a living wage
    When you’re eighteen and without family

    Tell me what job offers a living wage
    When you’re trans and mentally ill

    Tell me what job offers a living wage
    When you have PTSD and no degree

    Tell me what job offers flexible hours
    And let you work from home
    Working with your mental illness
    Instead of against it
    Is it only okay when it is for the rich?
    Is it only okay when it doesn’t offend
    The sexual purity myth of this society?

    You say prostitute
    You think destitute

    I say sex worker
    I think how was that book
    How was your date
    And did you see that thing?
    A normal experience
    In a world of indifference

    My partner works in a hospital
    My partner is a derby coach
    My partner makes porn
    My partner sells her underwear

    My friend is a talented artist
    My friend pays for rent as an escort

    My other friend is studying social work
    My other friend does out calls

    Yet another has made sex work her profession
    Domination is her expression

    Shall I go on?

    Their work no more qualifies them to be reduced
    Into objects for lessons to the righteous
    Than a baker or a painter

    Spare your pity
    Legalize this economy
    Make housing a right
    Food a guarantee
    Schooling all free

    Regard not sex workers as outcasts
    But cast out this injustice and inequality
    That exist in your mentality

    A lack of opportunity
    Intertwine sex work with poverty
    But sex work is work
    Not moral edification
    Sex work is work

  • Life Continues

    Life Continues

    A few months ago, I disclosed that I had left my job.

    I was working for a successful startup that had all the perks. I was issued a $4,500 MacBook Pro, there was beer available at all times of the day and the office was located in downtown Ottawa. On my first week we did ax throwing as a team building activity.

    There was about ten people working on our product, and only a dozen in our office. The rest were in Montreal, along with HR and higher ups, or other offices. When I was hired, I was told I was the first person they hired in a year and a half. Another team member was hired shortly after me.

    The job was straight-forward, working on the API back-end for point-of-sale software. The workplace, unfortunately, was extremely stressful. The team lead regularly made condescending remarks to me. Questions were met with RTFM. The tickets that the team lead wrote were often just a single sentence and trying to get more info was like pulling teeth. He and his boss continually derided the competency of others. The team lead was unable to accept constructive feedback with his code or design decisions.

    Things didn’t improve. In conversations with my boss, I was treated as if it was my problem. With HR and the rest of the office being in another city, there wasn’t any other path out of the situation. I gained 40 lbs in my eight months there just from the stress.

    The other person who was hired with me quit on a Thursday. I quit on the Friday. I then found out that three others had quit over my team lead’s behaviour. For my last two weeks, the team lead stopped communicating with me and the other departing employee altogether. Job postings went up a few weeks later.

    I took some time off after that experience. I drove across Canada and the United-States with a friend, camping along the way. I spent a week in Vancouver. I worked on my own projects.

    I landed a job as an embedded software developer developing air traffic control systems. It’s been good. Everyone helps each other. My team lead facilitates development where he can. People’s diverse skills are recognized and valued. If there’s a lesson I learned during all of this, it’s to quit toxic jobs sooner.

    And so life continues.