Log in


Criticism Is The Only Known Antidote To Error

7/19/16 09:42 pm - In Their Desperation, They Turned To A Man They Didn't Fully Understand

There is a line that keeps coming into my head. "In their desperation, they turned to a man they didn't fully understand." I did some searches for the line in Superman comics and movies, assuming it was about the storyline in which Lex Luthor was elected President. The line turned out to be from Christopher Nolan's film The Dark Knight, in reference to the Joker.
The quote comes to mind every time I hear something about Trump supporters who-- somehow-- also follow Jesus of Nazareth.

For decades, everyone from preachers to comedians to journalists have held up Jesus and Donald Trump as polar opposites on the spectrum of sacred vs. sleaze. And yet, if Trump is the opposite of Christ, consider this: among fundamentists during the nineties, it was de rigeur to wonder out loud whether Bill Clinton was the Antichrist.

Look through the eyes of a fundamentalist and see if you understand the choice between the Antichrist, and merely the opposite of Christ. The world is growing up, electing a black President twice, celebrating the victory of gay marriage, legalizing weed. Their way of life is coming to an end, so some of them might feel like the world may as well burn down.

I vividly remember being a fundamentalist Christian in the nineties. I remember the conspiracy theories which I believed about the Clintons twenty years ago, as a college student. I believed they killed a lot of people in cover-ups. I believed, as a teenager, that they were capable of any crime.

To you and me, Hilary Clinton might just look like any other untrustworthy politician. But consider how it looks to fundamentalists that twenty years later, this is the family which the nation seems to want to put back in the White House. It looks to them like the end of the world.
Imagine if Dole or G. W. Bush had not run for President. If the nominee had been a real-estate mogul who was rebuked by every preacher my whole life, would I have panicked and slammed my hand down on the Trump button?

Desperation. "In their desperation, they turned to a man they didn't fully understand."

Perhaps the Trump candidacy is an extinction burst for conservatism as we know it. Just before a bad behavior finally goes away, there is one last tantrum of defiance. Parents and pet trainers are deeply familiar with extinction bursts, but it is not just limited to kids and pets-- it's human nature. Perhaps that pattern operates on the scale of entire societies.

1/11/16 01:25 pm - Maintaining Contact

A few months ago, a former Penguicon Board member phoned me, who I had not spoken to in about four years. It turned out we were thinking about a lot of the same issues lately, and some of those issues included how to keep in touch with people, and who to keep in touch with.
What are your strategies for maintaining contact? Mine is to detect another person's level of reaching out to me, and reach out the same amount plus one step.

My strategy is due to my unique circumstances. I have a lot of projects and communities that I work on with other people. In my personal life, when someone stands me up or flakes out, I can simply decide to move on. Whereas in a group, not all of the other group organizers will see it that way. I need to plan around chain reactions in which the loss of one participant results in the loss of more.

Sometimes when someone proposes to work with you, you assume you can take that seriously at face value. But often, you can't. An important part of social calibration is recognizing when another person is not going to follow up; either they are engaging in a pretense to save face, or they are too optimistic about their availability. If I don't realize that, and I take them seriously and follow up, this can be perceived as pushy.

Not only do they have no recognition of the problem they just caused me, they also do not understand the solution. The problem is not that this person will not follow through, but that they will not inform me of it.

The simple solution to overcommitment is to admit when you're overcommitted. Say "I can't do what I wanted to do." Sometimes we all set up expectations we can't meet; it's normal. Keeping those expectations alive makes it much worse. All you have to do is say "I don't have time to work on this project until two months from now". By accepting your own limitations, you have released me from the nebulous semi-commitment of my time during those two months. I would be able to put it on my calendar to follow up then, and it's no longer occupying my mind until then.

10/18/15 01:35 pm - Making A Good-Looking Favicon

I'll walk you through how to make a logo look good when reduced to a 16x16-pixel image. The easiest methods produce ugly results. Craftsmanship is fiendishly challenging at this level. When you only have 256 pixels, each one matters.

Favicons are the tiny images that appear in the title bar of your web browser. It's usually the logo of the site. If you're reading this article on Livejournal in 2015, look for a blue circle with a black pencil in it. Notice how each tab you have open in your browser has a favicon.

When I was hired to create BlackBoxMontreal.com, the designer of the company's visual identity Christine Garofolo, sent me her art (used here with permission).

To demonstrate the simple and ugly way to make a favicon, I opened it in Photoshop, and used Image Size to scale it down to 16 pixels wide:

There are two problems. The logo is wider than it is tall, and as you can see, the forms are no longer distinct. This is like ordering pizza, and receiving it after the pizzeria put it through a blender-- the crust, cheese, sauce, and toppings are still there, but their forms are gone.

This has a lot of what we call "anti-aliasing": a quality of digital art in which pixels on an edge between two colors are a mixture of those two colors, to create the illusion of smoothness. Unfortunately, we used an automated process to shrink the image, which made each pixel an average of several nearby colors. Each pixel is trying to represent too much detail with just one color. The resulting color is an average, weighted by the distance of several colors from the center of the pixel. But the colors in the original image were not designed keeping in mind their distances from a grid of 256 point. The result is blurrier than it has to be.

Next, I took the second ugly approach to a favicon, by limiting the image to 9 colors: black, white, green, two shades of purple, and four shades of grey. I used the Pencil tool to color one pixel at a time.

The edges now look jagged and harsh. When anti-aliasing is in the right place at the right amount, it doesn't blur detail; it actually increases the perception of detail. With all the anti-aliasing removed, we have even less visual information than we did before. This is like if you order a pizza, and you receive all of the ingredients separately and unbaked.

A good favicon would find a balance between keeping the forms distinct from each other, and keeping them smooth enough to approximate their true shape. But making a pizza is not figuring out how long to put it through a blender; it's all about arrangement. And so it is when making a favicon.

Fortunately, the source art of the logo is in vector format, which will make this much easier. So I will open it in a vector drawing program, Adobe Illustrator.

A word about "vector" and "raster" formats. These are two main ways to represent visual information in a computer. Raster art is a grid of pixels, each of which is assigned a particular color. Vector art is a mathematical description of paths that connect coordinates in 2D space. A color is assigned as a stroke following a path, or assigned to fill the interior of the path.

Photoshop processes raster information (which is good for photography), and Illustrator processes vector information (which is good for logos). They each can import each other's files, so in Photoshop, you can "rasterize" vector art, and in Illustrator, you can "vectorize" raster art.

My first task in Illustrator is to remove fine details. Those details would be lost in the favicon, and would do nothing but add blurriness. I will select all the shapes and remove the white strokes on the paths. I will change the fill-colors of the shapes until there remain only six colors: the black of the box, the green of the monster arm, the white of the claws, the grey of the robot arm, and two shades of purple for the tentacle.

That color reduction removes all the details except for the monster claws and the tentacle suckers. I could remove those too, because in the final image, they will be faint hints-- if they appear at all. But we'll see how it comes out.

Next I'll open the art in Photoshop, which converts the vector paths to a raster image of pixels. Then I once again will use Image Size to scale down the raster to 16 pixels wide. The colors do not sufficiently stand out against each other at this scale, resulting in indefinite forms. I'll throw away this raster and go back to the vector art in the state I left it, in Illustrator.

I'll select each shape and apply Effect > Stylize > Inner Glow. For the black shapes, I'll select a white glow color, and for the light shapes, I'll select a glow color which is a dark version of that shape's color.

You might wonder how this is better than the strokes which I previously removed. At 16x16 pixels, your eye will not see this gradual transition as a detail. At a glance, your eye will see a solid color. Now when I rasterize it in Photoshop, and scale it down to 16x16 pixels, the forms stand out to the eye. Each glow is a gradual transition. Your eye will not resolve these transitions as details. Instead it just tricks your eye into seeing each shape as one consistent color throughout. But now the dark edge on a light shape will stand out against the light edge on a dark shape, so each shape is distinct from its neighbor.

This is better, but the logo still does not fit well into a square. I'll throw out this raster and go back to Illustrator.

If I crop the image to only show the center, I would lose the important shapes at the sides. So instead, I'll carefully adjust some of the shapes so that the logo occupies less width.

Each shape is made out of invisible coordinates called "anchor points", connected by paths. Illustrator will show me these anchor points and let me drag them around to edit the shapes of the monster arm and the tentacle:

I made some tradeoffs here. On the one hand, I distorted the actual shapes. On the other hand, this step provided a bigger payoff in legibility than any of the previous steps. The irony is, the best way to preserve recognition is through distortion. Previously, each feature of the graphic occupied a tiny space, in order to fit blank space into the top and bottom of the image. Now, each individual shape now takes up a larger area. When space is at a premium, when it comes to making something more legible, nothing beats making it bigger.

Here are all of the versions side-by-side:

I would like to hear your thoughts or contributions for how to accomplish legibility at such a small size.

10/2/15 03:57 pm - Antagonism Embargoes

Today a sheriff at a press conference reminded us to embargo the name of the latest gunman-of-the-month. Identifying him provides the attention he was after, and motivates someone else to do the same for fame. Your antagonism is the reward they seek.

At that moment, I realized there are some who I used to be close to in my communities, who I now only think about when dozens of people are murdered. Tragically-frequent repetition has trained me to make one main connection in my memory with some of my former loved ones: the massacre of someone else's loved ones.

Maybe the argument we get into after each massacre feeds a cycle of emotional reward. Both parties in the argument feel proud to stand up for something they believe in. Hate twists us up the inside, and it's not healthy, but all hate is based on love; on virtue. It produces a jolt of brain chemicals which your brain will interpret as a reward. The conversation is polarizing because it makes the participants feel good about themselves. Your position will become more extreme in order to regain the burst of addictive chemicals.

So will theirs. You can see your opponent posturing in a display, like a bird puffs out its feathers, to defend their self-image. In that case, are you counter-productive when you engage in an argument? An argument is a perfect opportunity for a display.

9/22/15 02:13 pm - My U-Con Schedule

I'll run Alien Frontiers and Flash Duel (Co-op mode) at U-Con this year, November 20-22 in Ypsilanti; plus Terracosm and Mirage, two unpublished prototypes of my own game designs.

Alien Frontiers. Friday 7p-9p.
Roll and place your dice to gain advantages over your opponent and block them out of useful areas of the board. Use Alien Tech cards to manipulate your dice rolls and territory bonuses to break the rules. Steal resources, overtake territories, and do whatever it takes to get your colonies on the map first!

Flash Duel - Co-op Mode. Friday 10p-11p.
Up to five fighters spar against one player who is the Deathstrike Dragon. Play a number card to end your move on an opponent's space by exact count to land a hit. When attacked, reveal the same number from your own hand to block the hit. But choose wisely when to show your cards to your allies-- one of them is secretly on the Dragon's side!

Unpublished Prototype: Mirage. Saturday 12p-1p. Sunday 11a-12p.
Players are leaders from an isolated coastal community which has just opened up to the outside world, rich in opportunity and hazard. They quickly agree to split up, and explore the surrounding desert and ocean, competing to establish the most far-flung network of trading encampments. By laying tiles, you will seek to claim regions of sand or dirt with your camels, and regions of shallow water or deep water with your ships. When someone encounters an oasis in the desert or an island in the sea, the player with the most camels or ships in the regions attached to it will set it up as their own trading encampment (a tent). Can your foresee uncertain spots in the geography, indeterminate in the distance? Will they resolve in your vision, to reveal your verdant destinations? Or evaporate into salt and sand?

Unpublished Prototype: Terracosm. Sunday 9a-11a, and 2p-4p.
Control the weather cycle. Dominate the food chain! Change the position of discs on the track so your own actions arrive earlier. Place your carnivores, herbivores, and plants where they will not starve or be eaten. This is an unpublished but highly-playtested prototype.

8/28/15 09:31 pm - The Best Job I Have Ever Had

I have now worked for one month at the best job I have ever had. I have never seen a software development environment so supportive of learning, and so well-disciplined in following responsible practices.

Almost all day, every day, we sit with a colleague and code as a team.

We write a test for a piece of functionality before we write the code to implement it.

We use a continuous integration server which turns a screen very visibly red and alerts our chat channels whenever someone commits code that breaks the build. We call a stop to all work until it's fixed, so the project is always functional.

We review new code with a pull request, then merge it directly into master-- and we delete every branch within two or three days of creating it.

We take seriously the feedback generated at retrospective meetings, with specific action items and deadlines which we all follow up on.

Instead of just adding more features, we keep a list of tasks to restructure the whole codebase, to make it easier and faster to add features-- and we are allocated official time to work on that.

And best of all, we only work forty hours a week, which prevents the errors that would result from exhaustion.

Does all this put us behind schedule? No. All of it makes our process faster in the long run.
Tags: ,

8/27/15 11:08 am - Which Problems Can Be Made Self-Solving?

Today I had a conversation with a graphic design client who, for the past several years, I have charged $20 per image. It is an example of how, merely by setting your own boundaries in a healthy place, you often don't have to filter other people out of your life, because they will do so for you. I refer to this as a "self-solving problem".
Hi Matt,
I leave for a conference in Israel on Wed, Sept 2. Have any time between now & then to upgrade some graphics?
Probably. It will depend on the nature of the upgrades. There are more demands on my time these days, so I will have to raise my rates somewhat, but it will still be proportional to the amount of time I expect it to take. What did you have in mind, specifically?
Hi Matt,
I find your response of raising your rates because of "more demands on your time”very disappointing. It sounds like you have taken on the attitude of big business (airlines)…meaning charge whatever the traffic will bear.
I am sorry, but this “attitude” is contrary to my thinking and I withdraw my request for your services.
This is why it's so valuable for me to put things out there from the outset, which will prevent going down a path that can only end poorly. In various areas of life, this could be "I don't take on new clients unless you pay me to have our first meeting", or it could be "I don't want to work more than 40 hours a week", or it could be "I'm not interested in monogamy and I have a vasectomy." Etc.

Unfortunately, not everyone who should self-select out of your life will do so. Some of them will stick around and complain about your boundaries, or exert other pressures.

There are two main categories of this, depending on the power imbalance. In one case, the person who wants to set boundaries is vulnerable to the pressuring party, as I was financially vulnerable when I originally met this client.

In the other case, the power imbalance is reversed. The pressuring party has too much to lose if the boundary-setting party asserts healthy boundaries. This is often expressed as a form of romantic love, in which the chemical attachment of bonding persists long after the problems of a relationship outweigh the benefits.

If you (as the boundary-setting party) have sufficient alternatives, and if the pressuring party has sufficient alternatives, they will filter themselves out of your life. Then the only way you will continue to have the wrong people in your life is if you fail to assert yourself calmly but firmly. Sometimes walking away is not failure-- it's success. You do not have to make every relationship work.

This is also why it's smart to empower other people with independence and alternatives. Seeking out power imbalances, or setting them up, generates more conflict than it resolves.

7/4/15 11:38 am - Thoughts On Teaching

A few weeks ago, I applied to Grand Circus as a Javascript instructor. They asked me to fill out a questionnaire about my teaching style. Answering the questions was very thought-provoking, so I'll share my answers with you. Let me know what you think.
You're teaching an 8 week adult bootcamp, from 9am-5pm daily. *
One of your students is very, very overwhelmed. It's week 2 and he doesn't feel that he is understanding the materials or that he will ever catch up to his classmates' progress. What do you do?
One factor in a bootcamp structure is the level of energy-- therefore, the approach of staying afterward for more learning is of limited use after an exhausting day. Very little information is retained when tired. Instead, I would pair students of different achievement levels, to solidify their learning through teaching it to someone else.

I would walk this student through the process of narrowing down each problem he is encountering, until he finds the question behind that problem-- more specific than just "Why doesn't this work?"

I would not be one of those teachers who says "You are all really quiet. I'm not sure whether to back up and explain it again. Someone nod if you understand." Instead, when I am uncertain that a student is following me, I would say "How would you rephrase what I just said in your own words-- if it made sense?"

During the second week it's a bit late in the process to emphasize keeping a TXT file with notes, but it still can't hurt.

I would encourage him to not measure himself against others, but against his past self. No one was born knowing how to do this. There is no one global standard of minimum adequacy. At each level of his development in the future, he will find places where that level fits.

If I get the sense that he has been inculcated with the tech culture's odd standards, I might remind him that software development is a job for normal people. He is going to be competent, and that's all that matters. You know the tech culture I mean. Constant use of terms like "rockstar" or "ninja" imply that you're either a super-genius, or worthless. It's not reality. Apply for jobs anyway, and do them proudly, with an understanding that 99% of devs provide plenty of value to their employers without being superhuman miracle workers.
You're teaching an 8 week adult bootcamp, from 9am-5pm daily. *
There are only 3 women in a twenty person class. Does this affect how you prepare group projects? If so, how?
I would ask other instructors I know, to find out how they have approached this. If I directly ask the students for feedback on how they would like me to approach it, this might discourage them, as studies have shown students perform more poorly when it is pointed out that they are in a disadvantaged group, in an effect called "priming".

It might be better to assign all three women to work in the same group to avoid one woman being in a group with two men, and being talked-over or dismissed. On the other hand, I don't want them to feel segregated. I would need to do more reading and ask for more advice from women who are software developers.
You're teaching a 10 week public course, offered 2 nights a week from 6pm - 8pm. *
One of your students is not showing up regularly but he is still handing in work on time and his work shows relatively thorough understanding of the concepts you're teaching in class. Do you do anything about his lack of presence in class?
I would ask him why he is absent. Is it due to life circumstances, or because he feels it is unnecessary? I would tell him that collaboration with others is one of the most important skills in software development, and that he can greatly improve on where he already is if he helps students who know less about it than he does.

If his absences continue, I would work within the school's certification policies regarding those who did not take the course they signed up for-- for example, is it a graded class in which I can reduce his grade based on number of missed classes? Or is it a "pass or fail" certification?
You're teaching an introductory programming class. *
One of your students clearly has had programming experience in the past. She finishes independent projects quickly and frequently helps classmates understand concepts. However, she occasionally asks questions during class that introduce higher-level concepts than you plan to teach and that the rest of the students do not understand. This often leads to confusion and derails your instruction. How do you handle this situation?
I would thank her for the question and explain that we don't have time to cover that. After class, I would ask her when this happens to jot a note to herself, reminding her to ask me one-on-one or email me. I would then respond either with explanations, or with blog posts which lead to more self-directed learning materials.
You're teaching at a high school for one of our youth programs. The course you are teaching is part of the students' daily schedule. *
One of your students seems distracted and regularly goes on random websites while you are teaching. Her grades are low, which seems to match her understanding of the material. She refuses help from the TA and occasionally falls asleep in class. What do you do?
That's me in high school, in any class I was not interested in. I have been thinking about this ever since. When a student doesn't get a choice about whether to learn, they often don't want to. Without the student's consent, teaching is effectively wasted, especially when they see it as capitulating a power-struggle over their own right to their own lives. Establishing the student's consent seems like step one.

I would make the material as engaging and approachable as possible. I would ask what she does want to do with her time, and springboard from that to see if any of her activities can be improved by creating a website about it.

I would gently ask questions which might indicate whether she has an adequate support network, because of sleeping in class, and I'd see if maybe she needs to go somewhere quiet during my class and get an opportunity to sleep. Maybe give her some food that increases blood sugar.

If none of that works, well, I'm going to be completely up-front and honest with you about my position on high school. The bodily autonomy of being in my classroom is a consent issue. That matters to me more than her parents paying me. I want to be a resource, not a jailer.

6/27/15 09:56 am - Startups and Corporations: Expectation Fit

Perhaps I should learn something that makes developers cringe, such as Visual Basic or .NET. This will take multiple steps of reasoning to explain, so bear with me.

I have been interviewing for various startups. That has been a very educational experience about the "expectation fit" between types of companies and types of employees. When discussing my recent job interviews with a friend who worked for one of the startups, he made a comment that he and his colleagues all worked long hours for very high salaries, and given my life goals, I should try to work someplace large and corporate. I then had the following hypothesis.

  1. I have focused on programming languages, version control systems, and other technologies with one common denominator: developers like using them. Also, I have been favoring seeking out workplaces with processes and management styles that support job satisfaction among developers. What if this disadvantages my specific life goals?

  2. According to this hypothesis, this affects who my colleagues are.

    A. They compete to get into companies that allow them to use these satisfying technologies.

    B. The project they work on for employment is so interesting to them that they consider it to be the main thing they are doing with their lives right now. As a result, they work long hours, and have very little free time after studying and practicing.

    C. Being a software developer is a major part of their identity, not just a way to pay the bills.

    D. They hold strong leadership opinions, rather than saying "I'm sure however you want to do it will be fine". They often seek out companies with fewer developers, each of whom is crucial.

    E. They are playing a game in which the victory condition is measured in dollars. The income necessary to sustain my frugal lifestyle is roughly 2/3 of the lowest end that motivates them -- or 1/2 if I don't mind living hand-to-mouth with a lot of risk.

  3. Reportedly, in some huge companies maintaining ugly legacy codebases in Visual Basic or .NET, software developers are only working when they are at work. They provide financial value for forty hours a week. Then they go home at the end of the day, forget about their jobs completely, and pursue their own projects.

My challenge will be to find a source of about $30,000 to $40,000 per year, which does not completely take over my ability to work on my own projects after hours. I have been given to understand that such jobs are scarce in the post-middle-class economy. My education and experience now disqualifies me from low-skill minimum-wage jobs, since employers would be concerned that I would quit to go back into software development. Income inequality is a game of thrones.
"When you play the game of thrones, you win or you die. There is no middle ground." -Cersei Lannister

The most appealing idea (although possibly not feasible) is to select one of my projects, focus 100% of my time on it, and generate an income through Patreon, rather than just fit my ambitions around a day job. That's a subject for another essay.

I spent fifteen years of my adult life performing unskilled labor for my day job, and the past two years experimenting with performing skilled labor for my day job. Each of us have a "personal business model", whether intentionally or accidentally. I'll continue to refine my personal business model as an ongoing experiment.

6/20/15 01:37 pm - Your Choice Of Relationship Structure Is Not A Hostage Situation

This week at a theater festival, I have heard several monologue actors, comedy musicians, and other performers put on shows about relationship structures, such as monogamy and polyamory. A recurring theme is talking about their relationships like they are in a hostage situation. They feel like because they are in love, they are forced (as if at gunpoint) to "have a relationship". But that vague phrase "have a relationship" means different things to the two of them. They are two people with two contradictory definitions of success. And then they wonder why they are miserable.

Unhappiness is simply not sustainable over the long term. Therefore, the bottom line in your choice of relationship structure is this: Will my partner's preferred relationship structure drain me more than it energizes me? Will my preferred relationship structure drain my partner more than it energizes her? For now, set aside words like "should" and "deserve", and "you're lucky to have this", because those words will not change the outcome that you get.

If a polyamorist dates a monogamist-- or a solo poly dates someone who loves cohabitation and promises-- or a fetishist dates a vanilla-- sometimes it can work out. But what makes the difference? One factor: they are not too drained. They don't end up dreading being around each other. It's that simple. If the compromise is too draining, then there's nothing you can do differently that will save your relationship. Don't adopt a pretense in order to have a good attitude, or to be sacrificial, or to be more enlightened. Those do not fill your emotional fuel tank. Those do not change what outcome you get.

The only thing that changes the outcome is this: "Is our compromise more energizing than draining? Or is it more draining than energizing?" For example, is my girlfriend getting enough of my time? Am I getting enough alone time to recharge? If so, then it's fine. Keep that process at the center of your decision-making about relationship structures.

You do NOT have to keep the relationship going at the expense of your needs, or your partner's needs. The well-being of both people in the relationship is more important than the continuation of the relationship.

I have gently ended some of my mis-matched relationships using this exact reasoning. "We're happier when we're friends. When we're lovers, you and I are obstacles for each other instead of opportunities. You're going to be angry at me all the time. It's impossible for me to be emotionally present in the relationship, because this relationship is bad for us. That will just toxify into mutual resentment. We tried to find an overlap between our needs. There isn't one. Your needs are important. Please find someone more equipped to meet them."

Edited to add: All the above is fine so far as it goes, but how do you tell? What are the signs to distinguish a "want" from a "need"? Unlike a want, going without a need is unsustainable. It looks like this:
  • You feel all the energy drain out of you over time.

  • You stop looking forward to being around your partner.

  • It becomes more and more difficult to be emotionally present.

  • Your resentment increases until it can no longer be suppressed, and leaks out in passive-aggression. Or aggressive-aggression.
Powered by LiveJournal.com