Work Journal

2018-07-20 Work log

Date
AuthorMark MacKay

Prelude to the worday

I shall make an exception to the avoidance of the "I", because of special circumstances.

I have set my timer to 5 minutes to try the latest version of Flow. I will write until time runs up to test a bug, and then have another five minute session with the bug fixed (the bug is related to the timer).

I am coming back from receiving a Spanish couple at the airbnb apartment. Since the apartment was already clean, I had taken the computer to do some work while I waited for them, but I think I have grown accustomed to cleaning when I am there, because I couldn't help taking care of the details.

This I do not count as work as I did not write the prelude until now, and to be honest it did not feel like work.

My five minutes are up, let us try to fix the bug.

Well, I went through a rabbit hole and spent more time than I expected, but it is fine, it is like the cleaning that took place today: it didn't feel like work, it's simply something I need to fix in order to write my stream of thought. Let us not count this as work.

So, what shall be done today? I think it's best to keep it simple, take work to the nearest study hall and then enjoy the rest of this Friday. Sounds like a plan, let us wait for the timer to run out the five minutes so that I verify that I have fixed the problem. Little more than a minute left, I will allow for time to run out.

Yes! It worked!

Work session 1 (2h)

I spent the sprint bringing Project Arete back into it's digital form. There is still work to do, but I can complete it over the weekend so that it's ready to use beginning Monday or so. It's Friday afternoon and the weather is nice, I'll call it a day for today.

Afterword

It may be easier to come to the nearest workspace, but I know from experience that if I overindulge in comfort I eventually get bored. Just a note to myself not to get too used to walking to work, but to use the faculties of exploration.

Work Journal

2018-07-19 Work log

Date
AuthorMark MacKay

Prelude to the workday

This is strange: today omitting the "I" seems much more difficult. Perhaps tiredness removes agency from the self, an effort will be made in any case.

The airbnb needs to be visited at 6pm, so this structures the rest of the day. What needs to be done? The Bézier Game has reached a state of stability, so it is not mandatory to give continuity to the code today. Perhaps a work session for Streaky (now re-baptized Flow) is in order. Since the evening is taken up, it might be interesting checking if the pool is a viable option to work during the morning, since there will be less people and less distractions. Let's see.

Work session 1 (1h)

A breezy work session on Flow at the nearest study hall. The mind was latching to tasks with surprising dexterity, but the codebase is reaching the complexity where you need to shuffle code with care. It's been observed that it is best to reorganize the code in the earlier stages, otherwise the plant grows hobbled by unneeded complexity.

Work session 2 (1h)

The guests at the airbnb apartment not only left almost no cleaning work to be done, they replaced the supplies that they used and bought a plant for the apartment! People like this are the salt of this earth.

There are those who give and know not pain in giving, nor do they seek joy, nor give with mindfulness of virtue;

They give as in yonder valley the myrtle breathes its fragrance into space.

Through the hands of such as these God speaks, and from behind their eyes He smiles upon the earth.

Khalil Gibran, On Giving

Afterword

Not all that much was worked yesterday, but what was done was productive. We tend to equate satisfaction in work by the effort and the time expended, but these are illusory measures, if I run a dozen kilometers instead of walking them, the result is the same.

Work Journal

2018-07-18 Work log

Date
AuthorMark MacKay

Prelude to the workday

Today it's best to stick around the neighborhood to prepare lunch and complete other house chores. This morning Facebook and Instagram accounts were unceremoniously deleted, they were discarded as old shoes that only take up space in the closet.

Sebas left early in the morning since he flying to NYC. Groggy farewells pointed to the fact that wake-up hours have been slipping later in the moring. The intention is to begin the day at sunrise and to end it at sunset, so any temptations to nap will be forgone in order to take intention to action.

What needs to be done? Yesterday code was imported from the Bézier Game, but today this feels premature. It's better to first replicate the path overlap code which detects when your path matches (or mismatches) the challenge.

A challenge has been added to the work logs: to remove the use of "I". This has been done before in personal journals as spiritual exercise, and the stylistic constraint resulted in a very different kind of writing.

This tends to shift the syntax from the active to the passive voice, but beneath this, the subjective identity ("I") ceases to perform actions on objects, and the object becomes the subject, gaining agency. So I used a disguise to fool the policeman should become The disguise fooled the policeman, avoiding both "I" and the passive voice.

This will be tried out during a couple of days. Right now this reads old-fashioned, hopefully some fluency will be gained with practice.

Work session 1 (1h, 15min)

Trying compute full overlapping of what the user draws against the reference path is a tough challenge. Though Paper.js has many functions that would seemingly assist in this task, in practice it was not performant nor easy to implement, so the code from the original game was imported.

The original code is a shameless hack, but it works quite well: there is an invisible canvas over which the reference and the user's paths are drawn, then a difference bitmap filter is applied on them. If there is a difference between paths it will generate a specific (green) color, so the code searches through the bitmap trying to find green pixels. If it does, then it means the user went off-path and the solution was not valid.

The hack worked just as well with Paper.js as it did under SVG, so it will remain as it is.

Afterword

Concentration becomes challenging under when sleep is lacking, so the rest of the day became free of work. Forcing oneself to work under these circumstances would only deplete the energies that remain, creating a deficit for tomorrow. It's best to take it easy.

Work Journal

2018-07-17 Work log

Date
AuthorMark MacKay

#### Prelude to the workday

Last night I had my good friend Sebas stay over, he is making his way back from the World Cup in Russia to the US, and he will spend the day here. I always find it strange working on passion projects while hosting friends, because there is no obligatory workdays or hours. You don't "have" to go to work.

In any case, since my job is not all that formal, I proposed that he join in the workday. Dress code: shorts or swimming trunks.

#### Work session 1 (1h, 30m)

We had many problems finding a bike for Sebas. Ofo is in town, but as of late I can't seem to find any of the bikes that show up on the map. I suspect thieves extract the GPS and throw it somewhere inaccessible, because there were many "bikes" on the railroad tracks but nowhere in sight. In the end we got a BiciMad and rode through Madrid Río. By the time we got anywhere it was already lunchtime, so we hit the pool and had some chicken tacos.

After chilling out we came to Conde Duque Library. First time here and I had high hopes for this library, as it's within a fancy cultural center. The space is modern and spacious, but there are not many books and it severely lacks electric outlets. Internet is nearly useless.

But, despite all odds, important work was accomplished today. Paths are being drawn beautifully, and code is reasonably understandable. UI code for design tools is inevitably tricky, code is inherently hierarchical, but what is the hierarchy between a hammer and a chisel? Tools do not contain each other.

#### Afterword

Working on your own gives flexibility. How to use this flexibility with responsibility? In former times, this flexibility became too loose and little was accomplished. I perceive that one must tense and relax conscientiousness according to circumstance. Ah, this too belongs to the realm of the transcendental and goes beyond work.

Work Journal

2018-07-16 Work log

Date
AuthorMark MacKay

Prelude to the workday

I often find myself wondering what I'm going to do in the next hour. As an experiment I want to plan the day, follow it, and at the end see what/if it was done.

The general outlines of the day: hit the gym, work session around the neighborhood, go to the supermarket, prepare and pack lunch, second work session at a new-to-me library in Orcasur, pool, and lastly an optional work session.

Workwise, my experiment with paperjs went great, a played around with it a bit more yesterday and it seems a perfect match for the Bézier Game. I find myself recriminating not having used it earlier, but then I realize: if I hadn't built the Bézier Game from scratch, I would understand nothing of the API. A mantra of programming is "don't reinvent the wheel", but when you are working with axles, bearings and tires you need to put the wheel apart so that you understand how everything is put together.

Work session 1 (2 hours, 15 minutes)

I was done with my soft objective of the day, which was to have a pen tool working. with Paper.js it is a breeze. I had it done in under an hour, but then I wanted to incorporate the "snap to axis" feature, and it got me in a rabbit hole for a while. It's working like a charm with just 75 lines of code (which I could surely reduce).

Work session 2 (45 minutes)

I came to a new pool where I hadn't been before (San Fermin) it has nice expansive green areas for Madrid's public pools, and nice tables where I can work. I will definitely repeat. I used this time to introduce the same mechanics I use in the Bézier Game: you can only begin a stage by clicking on a start point, and you end it by adding a node on the end point (if the created path matches the problem). I finished within 45 minutes, and I will take work to a library, as I forgot to charge my laptop before leaving home, and I'm running low on battery.

I'll dip in the pool before leaving of course. It's cool and sunny, perfect weather for Madrid.

Work session 3 (1 hour)

I came to a new library, "Gabriel García Marquez" in Orcasitas. It's large, nice and pleasant. I'm liking Usera for work, it has many workspaces and pools. I saw there was a public gym nearby and I checked it out, it was small but it can be combo'ed into the workday formula.

I worked on the multi-segment feature that I wanted to add to the original codebase. I didn't have enough time to finish it, but it is coming along nicely. I'm slightly concerned over how I'm going to integrate this code into what I already have, the stage code was the "brain" of the original code, and this would be like a brain transplant. It seems I will connect the body parts to this new brain one by one, rather than putting the brain into a body and hoping the transplant is not rejected.

Afterword

I'll start publishing again on the same day my workday ends, there was no "aging of experience" that I expected by putting sleep between the workday and the afterword.

I was pleased with the day. I see that I enjoy checking out new places, I'll do more of that this week. My projection for the day went exactly as I had envisioned it, which is strange, I usually plan one thing and something different comes out.

The more I work with Paper.js, the more convinced I am that this is the correct route. Getting familiar with it will allow me to create more things down the road. I also see that, if I come back to developing Method Draw, there are many things which I can borrow from this library.

Work Journal

2018-07-13 Work log

Date
AuthorMark MacKay

Prelude to the workday

I've taken a look at Paper.js and it seems to have everything I need, but the renderer is canvas and I prefer SVG (I simply feel more comfortable working with DOM elements). Well, it's time I learned canvas if the exploration into Paper.js results promising. What would be a good target to accomplish today? It's Friday, half a day is worked, it needs to be simple. Let us aim to simply have a path in which it's handles can be manipulated.

Work session 1 (2 hours)

As I packed the things I needed for a day that would be half work half recreation, I thought lugging around my computer was unnecessary, I could simply go to nearest study hall and then leave the computer at home for the rest of the day. And this I did.

I begun my trial of Paper.js, I'm on good track, I could manipulate bezier handles within two hours. As is usual with any new library, most of the time is spent trying to understand the author's intentions. I feel quite anxious about some implications, because I get bézier handles for free, but at a cost which I have not understood yet. I'll see with more experimentation.

bezier

Afterword

Feeling bullish about Paper.js, plus it has many other features that could be used in projects into the future. I'll keep on exploring what and how things can be done so that next week I'm prepared.

Work Journal

2018-07-12 Work log

Date
AuthorMark MacKay

Prelude to the workday

There was no prelude written today.

Work session 1 (perhaps 8 hours?)

I slept at the airbnb apartment, I woke up early and deep cleaned the entire house during eight hours. I resupplied, cleaned the floors by hand. Interesting, I would rather procrastinate on this rather than to touch that stinky code!

Afterword

A stab must be made at rewriting the path creation code, or better yet, to find something that suits my needs. I shall embark on this quest today.

Work Journal

2018-07-12 Work log

Date
AuthorMark MacKay

Prelude to the workday

I begin the day kinda late, I'll remain home for the first work session and see from there. Work needs to be done in the stages so that you can complete a multi-segmented stage, and during offtime I remembered an event driven architecture that's already in place, which will greatly assist in accomplishing this.

Work session 1 (perhaps 3 hours?)

Oh dear, I've reached the knotty parts of the code, it is so full of exceptions it makes me wish to rewrite the entire thing. Though it would leave me satisfied, it would take me a full week I estimate. I'm slogging through it, adding even more exceptions as I go. When this is done, I won't want to touch this code again with a ten foot pole.

I finished the multi-segment mechanics, but now I must do more work to support undo. With evidence of exploding complexity, I now see my original estimation was naïve, but I will take no stab at a new estimation until I advance more. I feel like taking a long break. Perhaps I am done for today, when I make some distance I will perceive the remaining energy.

Afterword

I took a break the rest of the day to think it through. I slept at the airbnb, but did not bring the macbook, I shall write my conclusions today.

Work Journal

2018-07-11 Work log

Date
AuthorMark MacKay

Prelude to the workday

I'll set my intention towards releasing the new Bézier Game on Monday of next week, so I have four workdays to complete the work. It should be enough, but perfectionism would probably drag the release a day or two, this is fine.

I feel certain hesitance towards implementing more stages without having finished what needs to be programmed, because events up ahead might mean that the stages I created need to be reworked. I know this to be an untrue idea, because now I can use any SVG path as a stage, though I have not accounted for the MOVE command.

I'm not sure I want/need to implement this command, for it changes the mechanics a lot. It becomes a composite path, so the stage ends not when you are able to connect A to B, but when you connect A to B in all paths that compose the composite path.

(I am writing as a tool for thinking here)

It is not all that difficult to implement, but it changes many assumptions that I made programming the original game. I could split the composite path by virtue of their M commands, and then iterate over the segments until they are completed. But then I would need to have a start and endpoint for each segment. Yes, it is quite straightforward, but it will require many changes to the current code.

Allow us to reason of this feature is worth it. What does it allow?

  • To punch holes into paths
  • To have unconnected overlapping strokes
  • To have a closer experience to a vector drawing app

It seems worth it indeed, I shall explore this feature in a work session and see where it takes me.

Work session 1 (1h)

I came to "Pedro Salinas" library next to Puerta de Toledo. It is a nice pleasant library. I worked on Project Arete, since it is an unveiled project I shall not write about it. What shall I write about instead? I will just drink smuggled tea and observe the kind of people who attend the library at this time of the day. Nothing needs to be written.

Work session 2 (1h, 15m)

I begun the work required to support composite paths on a single stage. It's going easier than I expected, but the code is very knotty. I had much pleasure in deleting substantial amounts of code regarding gradients and bevel effects, it took me so much work at the time but now it feels a naïve place where to put effort, and there was no value in it (except for the questionable aesthetic experience).

I'm actually surprised I don't think this code stinks. I've been able to be productive on the codebase I have and I generally know where things are, though it is structured in a very idiosyncratic way. I wish I could swap the GSAP dependency for something more lightweight, but that's very down on the list of priorities.

I'll put a "bookmark" of sorts for the last place of work: a stage has a startpoint and an endpoint.

⬤──────────────◯

Now, I have not multiple startpoints or endpoints, but they change position as you complete each segment:

⬤──────────────◯ ────────────────── ──────────────────

And then:

────────────────── ⬤──────────────◯ ──────────────────

And so forth. When you finish drawing all the segments, the stage is completed.

Work session 3 (1h)

I came to the pool for lunch. I worked a while without much focus, there's just too many distractions for the kind of work I'm currently trying to do, but I did advance. I know when a composite path segment has been finished drawing, now I need to reposition the pulsator and to begin a new stage within the stage, so to speak.

Afterword

I came back home yesterday quite wasted and had a two hour nap. The source of tiredness seemed to stem from sleeping six hours. I've been exploring a lot lately, and today I feel like taking it easy. I'll wait and see the inclination of work.

Work Journal

2018-07-09 Work log

Date
AuthorMark MacKay

Prelude to the workday

During the weekend an idea on a more sane way to create bézier curves came up, I think the direction is correct, but I would have to prototype it to get a feel of it. But what is the value of a technique that can't be used in the real world? An ameliorating factor is that I could use this technique in Method Draw, but it's still... not useful enough.

I had set myself to finish the Bézier Game in two weeks, and I'm on track, but this unforeseen feature would prolong the release, possible by a substantial time. I will first focus on finishing what I've started, and and the end of the week I shall decide.

I will also dedicate some time to Project Arete. As the product is used in novel ways, it asks for features which I need to incorporate in order to use them.

I've seen that, after a visit to the pool I seldom feel inclined to keep work going, so it is best that I leave it for the end of the day.

I joined a MeetUp expat picnic during the weekend, and we were speaking about the pains of going to work on Mondays. I hadn't noticed if I felt dread or pleasure starting the week. It is not pleasure, but there is an eagerness for flow and good expectations for the week, at this time at least.

Work session 1 (1h, 45m)

I came to the library of Reina Sofía, this time with my passport, and they let me through. A beautiful library, except the entrance is a hassle. This library has quite a massive selection of design and and art books, it's a pity I don't enjoy reading these subjects. Art and design books tend to be written by historians and academics, often as contract work paid by a publisher, or to pad their résumé. They are a chore to read. Books by practitioners are another thing, I shall sift through the collection to see if anything catches my eye.

I dedicated the work session to Project Arete. Nothing can be written about something that is still undercover, so I shall keep on describing what I found at this library: it has a good selection of academic journals. Since entering and exiting this building is a hassle, I thought it would be a good idea to read them during a break. So this I will do.

I picked up a feminist journal called "Hypatia", and came across an article called "Epistemic Injustice and Resistance in the Chiapas Highlands: The Zapatista Case". Coming from Mexico I thought it would be an interesting read, instead I found combative authors who make no attempt at scholarship. In fact, they spend a couple of pages making the case that an "objective worldview" is really a sexist, oppressive and capitalist view of things that has become normalized. Since they believe this is the case, it is stated that their responsibility is to push back with a feminist worldview. Oh dear, I have my issues with purely statistical/scientific ways of interpreting the world, but completely doing away with any attempt of objectivity in academia is... indoctrination.

Skimmed other articles, there is no use, I had no previous exposure to feminist academia, but it is clear that a war is being waged, and their concern is not in the acquisition of knowledge but the acquisition of power. I do not engage in warring activities, so I shall continue working.

Work session 2 (50min)

I opened the Bézier Game and took it from where I was taking it last week. I was making some example levels with my homebrewed relative SVG units and I noticed this wouldn't scale when I reached more complex paths. So I made a quick exploration into using viewBox in combination with the little known property vector-effect: non-scaling-stroke; and I saw it indeed worked. Further investigation revealed places where complexity was reduced (coordinate system) and others where it increased (stroke-dasharray), but all in all it is a win.

This is a big deal, because it will allow me to dedicate more time to the implementation rather than to creating levels. I can use any SVG path to create a level, instead of converting it by hand or investing time in a script that does this for me. Let's celebrate with lunch.

Work session 3 (1h)

Even though at the beginning of the day I said I would not come to the pool until later in the day, I was really close by and thought about working laying on the grass, as usual. However, I asked the attendant if it would be fine if I worked from the bar terrace and he said yes, so I enjoyed an hour of focused work here.

I dedicated this hour mostly to drawing the first exercises of each level. I now have 15 levels complete, with around 35 to go. They should be dispatched in about four hours of work. One thing towards which I feel ambiguity is that I haven't set my conviction if this is a game to help you learn to use the pen tool of existing apps, or a tool to demonstrate what it could be. I see Figma's implementation is way more advanced than anything out there, I can't implement vector networks just to make it justice. I'll keep on working and tackle these things if there is time at the end (read: probably never).

Afterword

The sensation of yesterday's workday is a productive and efficient day. The only thing I would change is lunch. I hadn't prepared anything, so I packed a large avocado and a spoon. It proved itself filling but bland. Things must be going good if this is the only thing that stands out as "things to be improved".