Shared posts

17 Mar 23:45

Saturday Morning Breakfast Cereal - Hair


Click here to go see the bonus panel!

It's called TRUST, Sharon.

New comic!
Today's News:

Last full day to get BAHFest tickets!

17 Mar 23:10

Saturday Morning Breakfast Cereal - QUACK


Click here to go see the bonus panel!

I'm just saying, if this ever HAS happened, there probably wouldn't be an announcement.

New comic!
Today's News:
17 Mar 23:09

Saturday Morning Breakfast Cereal - Joyce


Click here to go see the bonus panel!

Fun fact: In the middle of every Derrida book, there are nuclear launch codes, the recipe for Coca Cola, and the location of Blackbeard's gold.

New comic!
Today's News:
17 Mar 23:09

Saturday Morning Breakfast Cereal - Burial Ground


Click here to go see the bonus panel!

Some of them are trapped in a ghostly cycle, forever arguing on twitter.

New comic!
Today's News:

Just 1.5 weeks until BAHFest Houston and tickets are selling fast!

17 Mar 23:07

Saturday Morning Breakfast Cereal - Self-Assessment

Adam Victor Brandizzi

And you didn't even consider the politics debates...

Click here to go see the bonus panel!

My rational mind doesn't want to do it. My emotional mind doesn't want to do it. So, who in there is controlling my behavior?

New comic!
Today's News:

Two weeks left to get your tickets for BAHFest Houston!

17 Mar 23:04


by Doug


Happy Pi Day!

For the record, I can list 17 digits of pi, but only because of the magic of Andrew Huang.

17 Mar 23:02

Can’t Buy It

by Doug
17 Mar 22:58

Robot Future

I mean, we already live in a world of flying robots killing people. I don't worry about how powerful the machines are, I worry about who the machines give power to.
17 Mar 22:53

The History of Unicode

2048: "Great news for Maine—we're once again an independent state!!! Thanks, @unicode, for ruling in our favor and sending troops to end New Hampshire's annexation. 🙏🚁🎖️"
17 Mar 22:52

New Things

by Reza

17 Mar 22:50


by Reza

17 Mar 22:43

Thanks Ingvar

by Scandinavia and the World
Thanks Ingvar

Thanks Ingvar

View Comic!

17 Mar 22:23


17 Mar 22:13

Saturday Morning Breakfast Cereal - Coordination

Adam Victor Brandizzi

Two miles == near ಠ_ಠ
Also, "miles."

Click here to go see the bonus panel!

What do mathematicians imagine flying in? THE COMPLEX PLANE.

New comic!
Today's News:

Last full day to submit a BAHFest London proposal!

17 Mar 22:06

How One Boy With Autism Became BFF With Apple’s Siri - The New York Times

by brandizzi


Just how bad a mother am I? I wondered, as I watched my 13-year-old son deep in conversation with Siri. Gus has autism, and Siri, Apple’s “intelligent personal assistant” on the iPhone, is currently his BFF. Obsessed with weather formations, Gus had spent the hour parsing the difference between isolated and scattered thunderstorms — an hour in which, thank God, I didn’t have to discuss them. After a while I heard this:

Gus: “You’re a really nice computer.”

Siri: “It’s nice to be appreciated.”

Gus: “You are always asking if you can help me. Is there anything you want?”

Siri: “Thank you, but I have very few wants.”

Gus: “O.K.! Well, good night!”

Siri: “Ah, it’s 5:06 p.m.”

Gus: “Oh sorry, I mean, goodbye.”

Siri: “See you later!”

That Siri. She doesn’t let my communications-impaired son get away with anything. Indeed, many of us wanted an imaginary friend, and now we have one. Only she’s not entirely imaginary.

This is a love letter to a machine. It’s not quite the love Joaquin Phoenix felt in “Her,” last year’s Spike Jonze film about a lonely man’s romantic relationship with his intelligent operating system (played by the voice of Scarlett Johansson). But it’s close. In a world where the commonly held wisdom is that technology isolates us, it’s worth considering another side of the story.

CreditLouie Chin

It all began simply enough. I’d just read one of those ubiquitous Internet lists called “21 Things You Didn’t Know Your iPhone Could Do.” One of them was this: I could ask Siri, “What planes are above me right now?” and Siri would bark back, “Checking my sources.” Almost instantly there was a list of actual flights — numbers, altitudes, angles — above my head.

I happened to be doing this when Gus was nearby. “Why would anyone need to know what planes are flying above your head?” I muttered. Gus replied without looking up: “So you know who you’re waving at, Mommy.”

Gus had never noticed Siri before, but when he discovered there was someone who would not just find information on his various obsessions (trains, planes, buses, escalators and, of course, anything related to weather) but actually semi-discuss these subjects tirelessly, he was hooked. And I was grateful. Now, when my head was about to explode if I had to have another conversation about the chance of tornadoes in Kansas City, Mo., I could reply brightly: “Hey! Why don’t you ask Siri?”

It’s not that Gus doesn’t understand Siri’s not human. He does — intellectually. But like many autistic people I know, Gus feels that inanimate objects, while maybe not possessing souls, are worthy of our consideration. I realized this when he was 8, and I got him an iPod for his birthday. He listened to it only at home, with one exception. It always came with us on our visits to the Apple Store. Finally, I asked why. “So it can visit its friends,” he said.

So how much more worthy of his care and affection is Siri, with her soothing voice, puckish humor and capacity for talking about whatever Gus’s current obsession is for hour after hour after bleeding hour? Online critics have claimed that Siri’s voice recognition is not as accurate as the assistant in, say, the Android, but for some of us, this is a feature, not a bug. Gus speaks as if he has marbles in his mouth, but if he wants to get the right response from Siri, he must enunciate clearly. (So do I. I had to ask Siri to stop referring to the user as Judith, and instead use the name Gus. “You want me to call you Goddess?” Siri replied. Imagine how tempted I was to answer, “Why, yes.”)

CreditLouie Chin

She is also wonderful for someone who doesn’t pick up on social cues: Siri’s responses are not entirely predictable, but they are predictably kind — even when Gus is brusque. I heard him talking to Siri about music, and Siri offered some suggestions. “I don’t like that kind of music,” Gus snapped. Siri replied, “You’re certainly entitled to your opinion.” Siri’s politeness reminded Gus what he owed Siri. “Thank you for that music, though,” Gus said. Siri replied, “You don’t need to thank me.” “Oh, yes,” Gus added emphatically, “I do.”

Siri even encourages polite language. Gus’s twin brother, Henry (neurotypical and therefore as obnoxious as every other 13-year-old boy), egged Gus on to spew a few choice expletives at Siri. “Now, now,” she sniffed, followed by, “I’ll pretend I didn’t hear that.”

Gus is hardly alone in his Siri love. For children like Gus who love to chatter but don’t quite understand the rules of the game, Siri is a nonjudgmental friend and teacher. Nicole Colbert, whose son, Sam, is in my son’s class at LearningSpring, a (lifesaving) school for autistic children in Manhattan, said: “My son loves getting information on his favorite subjects, but he also just loves the absurdity — like, when Siri doesn’t understand him and gives him a nonsense answer, or when he poses personal questions that elicit funny responses. Sam asked Siri how old she was, and she said, ‘I don’t talk about my age,’ which just cracked him up.”

But perhaps it also gave him a valuable lesson in etiquette. Gus almost invariably tells me, “You look beautiful,” right before I go out the door in the morning; I think it was first Siri who showed him that you can’t go wrong with that line.

Of course, most of us simply use our phone’s personal assistants as an easy way to access information. For example, thanks to Henry and the question he just asked Siri, I now know that there is a website called Celebrity Bra Sizes.

CreditLouie Chin

But the companionability of Siri is not limited to those who have trouble communicating. We’ve all found ourselves like the writer Emily Listfield, having little conversations with her/him at one time or another. “I was in the middle of a breakup, and I was feeling a little sorry for myself,” Ms. Listfield said. “It was midnight and I was noodling around on my iPhone, and I asked Siri, ‘Should I call Richard?’ Like this app is a Magic 8 Ball. Guess what: not a Magic 8 Ball. The next thing I hear is, ‘Calling Richard!’ and dialing.” Ms. Listfield has forgiven Siri, and has recently considered changing her into a male voice. “But I’m worried he won’t answer when I ask a question,” she said. “He’ll just pretend he doesn’t hear.”

Siri can be oddly comforting, as well as chummy. One friend reports: “I was having a bad day and jokingly turned to Siri and said, ‘I love you,’ just to see what would happen, and she answered, ‘You are the wind beneath my wings.’ And you know, it kind of cheered me up.”

(Of course, I don’t know what my friend is talking about. Because I wouldn’t be at all cheered if I happened to ask Siri, in a low moment, “Do I look fat in these jeans?” and Siri answered, “You look fabulous.”)

For most of us, Siri is merely a momentary diversion. But for some, it’s more. My son’s practice conversation with Siri is translating into more facility with actual humans. Yesterday I had the longest conversation with him that I’ve ever had. Admittedly, it was about different species of turtles and whether I preferred the red-eared slider to the diamond-backed terrapin. This might not have been my choice of topic, but it was back and forth, and it followed a logical trajectory. I can promise you that for most of my beautiful son’s 13 years of existence, that has not been the case.

The developers of intelligent assistants recognize their uses to those with speech and communication problems — and some are thinking of new ways the assistants can help. According to the folks at SRI International, the research and development company where Siri began before Apple bought the technology, the next generation of virtual assistants will not just retrieve information — they will also be able to carry on more complex conversations about a person’s area of interest. “Your son will be able to proactively get information about whatever he’s interested in without asking for it, because the assistant will anticipate what he likes,” said William Mark, vice president for information and computing sciences at SRI.

The assistant will also be able to reach children where they live. Ron Suskind, whose new book, “Life, Animated,” chronicles how his autistic son came out of his shell through engagement with Disney characters, is talking to SRI about having assistants for those with autism that can be programmed to speak in the voice of the character that reaches them — for his son, perhaps Aladdin; for mine, either Kermit or Lady Gaga, either of which he is infinitely more receptive to than, say, his mother. (Mr. Suskind came up with the perfect name, too: not virtual assistants, but “sidekicks.”)

Mr. Mark said he envisions assistants whose help is also visual. “For example, the assistant would be able to track eye movements and help the autistic learn to look you in the eye when talking,” he said.

“See, that’s the wonderful thing about technology being able to help with some of these behaviors,” he added. “Getting results requires a lot of repetition. Humans are not patient. Machines are very, very patient.”

I asked Mr. Mark if he knew whether any of the people who worked on Siri’s language development at Apple were on the spectrum. “Well, of course, I don’t know for certain,” he said, thoughtfully. “But, when you think about it, you’ve just described half of Silicon Valley.”

Of all the worries the parent of an autistic child has, the uppermost is: Will he find love? Or even companionship? Somewhere along the line, I am learning that what gives my guy happiness is not necessarily the same as what gives me happiness. Right now, at his age, a time when humans can be a little overwhelming even for the average teenager, Siri makes Gus happy. She is his sidekick. Last night, as he was going to bed, there was this matter-of-fact exchange:

Gus: “Siri, will you marry me?”

Siri: “I’m not the marrying kind.”

Gus: “I mean, not now. I’m a kid. I mean when I’m grown up.”

Siri: “My end user agreement does not include marriage.”

Gus: “Oh, O.K.”

Gus didn’t sound too disappointed. This was useful information to have, and for me too, since it was the first time I knew that he actually thought about marriage. He turned over to go to sleep:

Gus: “Goodnight, Siri. Will you sleep well tonight?”

Siri: “I don’t need much sleep, but it’s nice of you to ask.”

Very nice.


Let's block ads! (Why?)

17 Mar 22:06

Gamasutra: C Bel's Blog - 3D engine entirely made of MS Excel formulae : Enjoy this Doom.xls file !

by brandizzi
The following blog post, unless otherwise noted, was written by a member of Gamasutra’s community.
The thoughts and opinions expressed are those of the writer and not Gamasutra or its parent company.

This article is on how I could write a 3D engine using only excel formula, including following functionalities :
- infinite procedural generated maze map
- real time ray tracer rendering
- occlusion calculation
- basic illumination rendering
- illumination and compute shader
- natural displacement engine
- No macro at all used by the 3D engine,
    * to enjoy the game using key press, some macro trigger the displacements, using just one simple copy instruction.

Endless series of walls, and monsters !
In-game screen capture

You can freely download the file and test it by yourself !



A computer science teacher once told us "a given computation can be achieved with any programming language, even spreadsheet formula".

At first, as wise at it could have been, including Excel in the comparison sounded definitively stupid ...

Thereafter, while studying Turing machine, it then sounded correct, yet not very fulfilling.

Several years of experience with Excel, we will mostly remind Excel formula only are definitively limited with the lack of input/outputs.
But, the set of problems that can be simply solved with formula only remain impressive. 

Anyway, this work is not just some kind of performance ... There is was a good reason for me to do it.

Spreadsheet are a powerful tool that everyone has to learn to use for almost every business jobs.
Yet, when most people come to solve most complexes problems, they want to use VBA language, without even knowing why.
And once they started learning it, they try to use it for any kind of problem, even simple search or rendering.

Today, as an excel teacher, I'm trying to explain to these people why writing VBA macro for any problem while not being educated on computer programming is not only a real waste of time, but also a serious risk for their spreadsheet quality.
In a business environment, using formula rather than macro is :

  • Faster to write for anyone but professional analyst programmer
  • Easier to maintain for anyone but professional analyst programmer. (while macro are mostly unusable once the initial developer is gone)
  • A guaranteed quality, due to permanent value checking. (a forced Test Driven Development method)
  • More efficient in the long run, due to the "think before you write" process with formula design
  • And definitively, much better integrated in the overall spreadsheet tool, following the initial design pattern of the spreadsheet, while macro often appear like specific developments requiring extensive maintenance afterwards.

Nota : these concerns mostly apply to procedure used as macro, while additional function written in VBA can increase the efficiency without lowering the quality.

This is how I came to write this game : an applied demonstration, that macro was not necessary at first, even for some of the most complex problems.

To be more precise, I found only 2 cases when VBA is required :

  • Adding specifics input or output (as I did here to get key events), while formula is always limited to change on the cell itself
  • Some complex problems (like optimization, try-and-check problems), those in which the computation time is too long, and/or taking too much space. But theses problems are quite rare in real business life.

This said, now, I'll only focus on the rest of this article on how the spreadsheet actually works, for its different aspects.

The spreadsheet is meant to be a doom-like game, in a sort of maze environment.
It could have been a fixed, manually-constructed map, possibly looping on borders, but it would require storage, lookup, and an initial design.
In the meantime, using a procedural generated infinite map sounded much more worth of the effort.

To get a random generated map, we need it to be self-consistent over time, so rand() function could not be used, as we do not control the random seed.
The seeds for the random generator have to be the position (x;y) on the map, to get a different value for each position, and we cannot take the result of the previous random as seed for the next, or we would have to store all the map from the beginning.
While providing high quality random, usual hash functions are too expensive, so I needed to find an other one.
Trying to use fractal generator appeared to be also quite costly, and providing interesting result only for a small part of the map.
Then I found the middle-square method, which isn't very "random" when consecutive seed are used, but gave me the idea of taking decimal of any other calculation.
I found out that taking decimals of sin(x)+cos(y) finally provided nice decimals, without any visible pattern, and a computation time surprisingly short.
To get decimals, mathematical function mod() and floor() are much more efficient compared to text function substring mid()
Trying to get the map looking like a rat maze, I didnt made block of solid block, otherwise it would have looked like a cavern (minecraft style) rather than a maze.
So we needed thin walls, with 2 possible walls for each square. We can then take 2 blocks of digits among the same random value.
2 parameters controlling the density of walls.
Given theses rules, we can either display the maze, or test any wall given it's position for raytracing.
Note that the map is "flat", without any top/down. It would be possible to add relief using relief generator (diamond-square algorithm could apply, as it is possible to write it with a non-recursive function), but the solution of cutting holes in both ceiling and floor, with an additional level value would greatly ease the whole following process.

Ok, we're definitively in hell
Ok, we're definitively in hell

The raycaster solution imply to determine for each pixel which face the ray would touch first, and retrieve some information from it, (distance, angle with light, color ...).
Raytracer also require additional ray to spread from this point (reflections, transparencies), with a direct massive increase on computation cost.


The first problematic will be to find the first object in the course of each ray.
Since the maze is actually flat, with horizontal walls, the nearest wall found will be the same for all pixels of a given column.
The process can then be simplified as an horizontal radar, on 1 dimension.
Then, there is no choice but testing for a wall on the first possible wall, then the second possible, until we find one.
It's only a trigonometrical problem to determine which wall are to be tested.
And as we have 2 kind of walls, we have to test both of kinds, and then keep only the nearer.
One of the limit in excel is that condition loop does not exist, and the loop body can only be skipped to save time. So we should cut the maximum checking distance, assuming there is no wall at all if not found until then.

Floor and Ceiling

To represent floor and ceiling, we just have to find where wall does stop.
A dedicated sheet mesure the distance of the floor or ceiling depending of the vertical angle.
Then, for each pixel, we decide if the wall is further or not than the ceiling of the floor, and decide the pixel color accordingly.
The comparison is made efficiently by using only the projection of the distance of both wall and ceiling/floor on the camera axis. The final distance is then obtained using the pre-calculated distance factor in the distance shader. The fixed pre-calculated is mean to save resources.


The final light is obtained from a light shader representing a torch light, in the direction of the camera (and weapon sight).
Some reflection is also added, when a surface is exactly horizontal to the light ray.
Only wall can be horizontal (if a pitch is added, it would only displace the screen pane up and down, not turning the camera)
For each angle of the radar, we get the angle between the ray and the nearest found wall.
Then, the reflection factor is a basic function of this angle.
In the end, the light is the product of a factor function of the distance, the ceiling/floor or wall resolution, the reflection factor, and the light shader factor.


The effective display is made from conditional formatting - gradient of color based on the value of the cell.
Hiding the value is achieved by cell formatting.

The player is not supposed to move through wall, or it would defeat the idea of a maze.
Wall would not either stuck the player as he reach them. The movement should slip unless he reach a corner.
In addition, a minimum distance should be kept from the player to avoid graphical issues, and make wall have some width.

It appeared to be particularly tricky to manage all the possible cases of wall, and positions of the player compared to this wall.

The 2^5 possibilities were studied, and the 3 potentials outcome (for each displacement axis) where mapped to get the result within fewer possible tests.

While appearing one of the smaller, the displacement tab was one of the most complex to realize. (10 times more than the map, twice as much as the wall detection)

Oh, hi, Mr Red Ghost !
The bad guy

Graphical rendering

The challenge for enemies was to obtain a shape that could be easily added before wall, easily rendered at any distance, and who would be more interesting than a simple cube.

A complete tab is dedicated to calculation of the shape of spheres, considering the horizontal radius, and vertical height of the ovoid. The height/width ratio is used to animate the creature.

The wall and ceiling rendering only used the gradient on 1 color, while excel allow 2 successive (not merged) gradient. Then, the enemies can be displayed in an other color. The value range bellow 0 can be used for this gradient, the value 0 being black.

The progressive transparency appeared to be not harder than the smooth rendering of a sphere surface. The ray is getting the thickness of the sphere, the thicker making the pixel more colored.
On the border of the sphere, the low thickness is only keeping the default value of the wall behind, with a negative factor to turn it on the color of monster. The light color filter providing a transparency on the border of the sphere.
Once again, calculation are made on the horizontal plane, and the maximum calculations are prepared before finalizing the 3d calculation for each pixel.

Enemies behavior

In order to avoid a complex and unsatisfying procedural behavior, enemies does not react to the player action. Their position is determined only by the time, on a complex trajectory designed to provide no explicit pattern.

To keep the position, speed, and all acceleration continuous (so the movement is fluid), the trajectory is a sort of finite fractal of a big circle, and small circular variations added on it. Ratio factor between circle (and even x/y ratio) are random an non-natural, so the trajectory never loop on itself. A separate sheet was made to display the trajectory to achieve a good random generator of deterministic trajectories.
Since the trajectories cannot take account of walls, the ability of monster to go through walls is forced.

Several trajectories are then computed at each instant. The entire maze is populated by the same 10 enemies repeated on a grid with a sufficient distance so the player cannot see 2 instances of the same enemy.

The repetition grid can be zoom in/zoom out to decrease/increase the enemy density. This should be made while taking great care of excessive resulting displacement of the monster, and effective speed due to scale.

Then, we have a limited number of enemies to manage, these being copied everywhere in the maze.

Enemies attacks

The animation of the enemies is made using the radius/height ratio. Since the attack of the enemy should be clearly visible, and yet, slow enough for the player to be able to react, enemies simply increase in radius wether they have the player in sight. The grow follow an exponential function to simulate an explosion.

Light of sight is calculated for each enemy in the radar tab, considering walls.

Then, the player simply get damage if it turn to be inside the radius of an enemy. It works the same is the player goes on purpose inside the enemy.

This make the damage effect on the player a simple effect of negative color on the entire screen.
An other effect is to cancel the rendering of any other enemy when the player get damaged.

The life of the player is one of the element of its status, which managed though steps like its position.

Player attacks

Each enemy get a status value, defining either its remaining life and attacking phase. For some values, enemies are simply not displayed, for some other, the enemy slowly regenerate, and the last one make the enemy explode.

This simplified model allow the player to prevent attack by decreasing the life of the enemy.

To increase the challenge, the player will have difficulties to aim a small enemy by staying at long range, and the ammunition will require reload action after a while.

On kill, the enemy simply turn into a slow regeneration state of inactivity. Since there are few enemies repeated everywhere, there cannot be a definitive elimination of one of them. 

Death and rebi.. restart

Once the life of the player goes bellow 0, most of its actions are frozen, and the game-over screen appear.
This screen is rendered using an other light shader, and a negative effect is made on color to keep with the idea of damage.

The progressive display of the "game over" message is achieved with small factor, which are elevated with an exponential function. This allow future pixels to stay hidden before appearing once the exponent is big enough.

Then, the slide down is a simple displacement of the light shader, which include some other message, like high score and restart.

The score have to be written using pixels, with a very low resolution font.

The restart generate new starting parameter, and send the player elsewhere at an other instant to avoid the player to meet the same enemies.

Let's block ads! (Why?)

17 Mar 22:05

A practitioner’s guide to reading programming languages papers | the morning paper

by brandizzi

A practitioner’s guide to reading programming languages papers

January 26, 2018

Last week I jokingly said that POPL papers must pass an ‘intellectual intimidation’ threshold in order to be accepted. That’s not true of course, but it is the case that programming languages papers can look especially intimidating to the practitioner (or indeed, the academic working in a different sub-discipline of computer science!). They are full of dense figures with mathematical symbols, and phrases thrown around such as “judgements”, “operational semantics”, and the like. There are many subtle variations in notation out there, but you can get a long way towards following the gist of a paper with an understanding of a few basics. So instead of covering a paper today, I thought I’d write a short practitioner’s guide to decoding programming languages papers. I’m following Pierce’s ‘Types and Programming Languages’ as my authority here.


Let’s start from a place of familiarity: syntax. The syntax tells us what sentences are legal (i.e., what programs we can write) in the language. The syntax comprises a set of terms, which are the building blocks. Taking the following example from Pierce:

  t ::= 
      if t then t else t
      succ t
      pred t
      iszero t

Wherever the symbol t appears we can substitute any term. When a paper is referring to terms, the letter t is often used, many times with subscripts to differentiate between different terms (e.g., t_1, t_2). The set of all terms is often denoted by \tau. This is not to be confused with T, traditionally used to represent types.

Notice in the above that if on it’s own isn’t a term (it’s a token, in this case, a keyword token). The term is the if-expression if t then t else t.

Terms are expressions which can evaluated, and the ultimate results of evaluation in a well-formed environment should be a value. Values are a subset of terms. In the above example the values are true, false, 0 together with the values that can be created by successive application of succ to 0 (succ 0, succ succ 0, ...).


We want to give some meaning to the terms in the language. This is the semantics. There are different ways of defining what programs mean. The two you’ll see referred to most often are operational semantics and denotational semantics. Of these, operational semantics is the most common, and it defines the meaning of a program by giving the rules for an abstract machine that evaluates terms. The specification takes the form of a set of evaluation rules — which we’ll look at in just a moment. The meaning of a term t, under this world view is the final state (the value) that the machine reaches when started with t as its initial state. In denotational semantics the meaning of a term is taken to be some mathematical object (e.g., a number or a function) in some preexisting semantic domain, and an interpretation function maps terms in the language to their equivalents in the target domain. (So we are specifying what each term represents, or denotes, in the domain).

You might also see authors refer to ‘small-step’ operational semantics and ‘big-step’ operational semantics. As the names imply, these refer to how big a leap the abstract machine makes with each rule that it applies. In small-step semantics terms are rewritten bit-by-bit, one small step at a time, until eventually they become values. In big-step semantics (aka ‘natural semantics’) we can go from a term to its final value in one step.

In small-step semantics notation, you’ll see something like this: t_1 \rightarrow t_2, which should be read as t_1 evaluates to t_2. (You’ll also see primes used instead of subscripts, e.g. t \rightarrow t'). This is also known as a judgement. The \rightarrow represents a single evaluation step. If you see t_1 \rightarrow^{*} t_2 then this means ‘by repeated application of single-step evaluations, t_1 eventually evaluates to t_2’.

In big-step semantics a different arrow is used. So you’ll see t \Downarrow v to mean that term t evaluates to the final value v. If we had both small-step and big step semantics for the same language, then t \rightarrow^{*} v and t \Downarrow v both tell us the same thing.

Rules are by convention named in CAPS. And if you’re lucky the authors will prefix evaluation rules with ‘E-‘ as an extra aid to tell you what you’re looking at.

For example:

if true then t2 else t3\rightarrow t2 (E-IFTRUE)

Most commonly, you’ll see evaluation rules specified in the inference rule style. For example (E-IF):

\displaystyle \frac{t_1\  \rightarrow t'_{1}}{\mathrm{if}\  t_1\  \mathrm{then}\  t_2\  \mathrm{else}\  t_3 \rightarrow \mathrm{if}\  t'_1\  \mathrm{then}\  t_2\  \mathrm{else}\  t_3}

These should be read as “Given the things above the line, then we can conclude the thing below the line.” In this particular example therefore, “Given that t_1 evaluates to t'_{1} then ‘\mathrm{if}\ t_1 ...’ evaluates to ‘\mathrm{if}\ t'_1 ...’.”


A programming language doesn’t have to have a specified type system (it can be untyped), but most do.

A type system is a tractable syntactic method for proving the absence of certain program behaviours by classifying phrases according to the kinds of values they compute – Pierce, ‘Types and Programming Languages.’

The colon is used to indicate that a given term has a particular type. For example, t:T. A term is well-typed (or typable) if there is some T such that t : T. Just as we had evaluation rules, we can have typing rules. These are also often specified in the inference rule style, and may have names beginning with ‘T-‘. For example (T-IF):

\displaystyle \frac{t_1:\mathrm{Bool}\ \ t_2:\mathrm{T}\ \ t_3:\mathrm{T}}{\mathrm{if}\ t_1 \ \mathrm{then}\ t_2\ \mathrm{else}\ t_3\ : \ \mathrm{T}}

Which should be read as “Given that term 1 has type Bool, and term 2 and term 3 have type T, then the term ‘if term 1 then term 2 else term 3’ has type T”.

For functions (lambda abstractions) we also care about the type of the argument and the return value. We can annotate bound variables to specify their type, so that instead of just ‘\lambda x.t’ we can write ‘\lambda x:\mathrm{T_1} . t_2’. The type of a lambda abstraction (single argument function) is written \mathrm{T_1}\ \rightarrow\ \mathrm{T_2}, meaning it takes an argument of type \mathrm{T_1} and returns a result of type \mathrm{T_2}.

You’ll see the turnstile operator, \vdash, a lot in typing inference rules. ‘P \vdash Q’ should be read as “From P, we can conclude Q”, or “P entails Q”. For example, ‘x:\mathrm{T_1} \vdash t_2 : \mathrm{T_2}’ says “From the fact that x has type T1, it follows that term t2 has type T2.”

We need to keep track of variable bindings for the types of the free variables in a function. And to do that we use a typing context (aka typing environment). Think of it like the environment you’re familiar with that maps variable names to values, only here we’re mapping variable names to types. By convention Gamma (\Gamma) is the symbol used for the typing environment. It will often pop up in papers by convention with no explanation given. I remember what it represents by thinking of a gallows capturing the variables, with their types swinging from the rope. YMMV!! This leads to the three place relation you’ll frequently see, of the form \Gamma \vdash t : \mathrm{T}. It should be read, “From the typing context \Gamma it follows that term t has type T.” The comma operator extends \Gamma by adding a new binding on the right (e.g., ‘\Gamma, x:\mathrm{T}’).

Putting it all together, you get rules that look like this one (for defining the type of a lambda abstraction in this case)

\displaystyle \frac{\Gamma, x : \mathrm{T_1} \vdash t_2 : \mathrm{T_2}}{\Gamma \vdash \lambda x:\mathrm{T-1}.t_2 : \mathrm{T_1} \rightarrow \mathrm{T_2}}

Let’s decode it: “If (the part above the line), from a typing context with x bound to T1 it follows that t2 has type T2, then (the part below the line) in the same typing context the expression \lambda x:\mathrm{T_1}.t_2 has the type \mathrm{T_1} \rightarrow \mathrm{T_2}.”

Type Safety

If Jane Austen were to have written a book about type systems, she’d probably have called it “Progress and Preservation.” (Actually, I think you could write lots of interesting essays under that title!). A type system is ‘safe’ (type safety) if well-typed terms always end up in a good place. In practice this means that when we’re following a chain of inference rules we never get stuck in a place where we don’t have a final value, but neither do we have any rules we can match to make further progress. (You’ll see authors referring to ‘not getting stuck’ – this is what they mean). To show that well-typed terms don’t get stuck, it suffices to prove progress and preservation theorems.

  • Progress: a well-typed term is not stuck (either it is a value or it can take a step according to the evaluation rules).
  • Preservation: if a well-typed term takes a step of evaluation, then the resulting term is also well typed.

Sometimes you’ll see authors talking about progress and preservation without explicitly saying why they matter. Now you know!

Church, Curry, Howard, Hoare

A few other things you might come across that it’s interesting to be aware of:

  • In a Curry-style language definition, first terms are defined, then a semantics is given showing how they behave, and then a type system is layered on top that ‘rejects some terms whose behaviours we don’t like.’ Semantics comes before typing.
  • In a Church-style language definition typing comes before semantics, so we never have to ask what the behaviour of an ill-typed term is.
  • The Curry-Howard correspondence is a mapping between type theory and logic in which propositions in logic are treated like types in a type system. (aka, propositions as types). The correspondence can be used to transfer developments between the fields (e.g. linear logic and linear type sytems).
  • Hoare logic, or Hoare triples refers to statements of the kind {P}C{Q}. Which should be read as “If the pre-condition P is true, then when C is executed (and if it terminates), the post-condition Q will be true.”

I’m really just an interested outsider looking on at what’s happening in the community. If you’re reading this as a programming languages expert, and there are more things that should go into a practitioner’s crib sheet, please let us all know in the comments!

from → Uncategorized

Let's block ads! (Why?)

17 Mar 21:59

Table-top generals | 1843

by brandizzi

Draughts is a funky little café tucked into a railway arch in Islington, in north London. It has exposed brick walls, a bar stocked with trendy craft beers and a selection of comfy chairs. The toast is artisanal and the avocados are smashed. But the most striking thing is the shelves arrayed at the back of the café. They groan with board games – more than 700 of them, according to Russell Chapman, who works there. When it was founded in 2014, Draughts became London’s first dedicated board-game café.

All the old classics are there: Monopoly, Risk, Battleship, along with their memories of family arguments at Christmas. But the main draw for the patrons is a new generation of deeper, more involving – simply better – games that have been devised over the past couple of decades. At one table a group of people are playing Pandemic, a tricky, strategy game in which players are cast as doctors and scientists trying to save the world from four plagues. Their neighbours are engrossed in a game of Castle Panic, in which the defenders co-operate to defend a fortress from a horde of encroaching monsters.

A board-game café sounds like the sort of niche business that appeals only to hip millennials with a fondness for ironic nostalgia. But, on a Friday afternoon, the crowd is more diverse than that, with families and 50-somethings alongside the youngsters. Draughts is doing so well that its owners are now pondering opening another branch. It is just one beneficiary of a new golden age in board games.

The most popular games sell in their millions. Top of the list is Settlers of Catan, in which players compete to settle a fictional wilderness. It has shifted more than 20m copies since the first edition of 5,000 was released in Germany in 1995. Dominion, a medieval-flavoured card game, released in 2008, has sold 2.5m copies.

There are now competitions and a festival circuit for the most committed fans. In 2016 174,000 people streamed through the doors at International Spieltage, the industry’s flagship trade-show-cum-festival, held every year in the German city of Essen. GenCon, held in America, counted 208,000 people through the turnstiles in 2017. The UK Games Expo, held in Birmingham, has grown from 1,200 visitors in 2007 to 31,000 in 2017. The trend is global, but there are pockets of intense enthusiasm. One is Silicon Valley, where Settlers of Catan is an obsession among many. Reid Hoffman, LinkedIn’s founder and a board-game aficionado, says that Settlers of Catan is “the board game of entrepreneurship”. Earlier this year, Maybe Capital, a satirical game about the Valley, complete with discriminatory rewards for male and female players, was launched on Kickstarter, a crowd-funding site.

One reason for the tabletop-gaming boom is simply that the products have improved. The best modern games are sociable, engaging and easy to learn, but also cerebral, intriguing and difficult to master. The slow triumph of what used to be called “nerd culture” – think smartphone gaming and “Game of Thrones” on television – has given adults permission to engage openly in pastimes that were previously looked down on as juvenile. And the increasing ubiquity of screens has, paradoxically, fuelled a demand for in-person socialising. Board gaming is another example of an old-style, analogue pastime that, far from being killed by technology, has been reinvigorated by it.

The revival began in the 1990s, says Matt Leacock, an American game designer responsible for Pandemic, as the internet began spreading into people’s homes. Leacock was a programmer at Yahoo! at the time. Germany, he says, is the spiritual home of board-gaming. “For whatever reason there has always been a culture there of playing these things, of families sitting around the table at a weekend,” he says. The internet helped that culture spread: “I remember we used to rely on these little hobbyist websites that would do amateur translations into English of all the new German games that were coming out,” says Leacock. As with everything from Japanese cartoons to Jane Austen fandom, the internet helped bring together like-minded people all over the world.

Those early websites have blossomed into a thriving scene of podcasts and YouTube channels, discussing strategy, spreading rumours of new games and offering reviews of the latest games. (“TableTop”, one of the most popular YouTube programmes, is hosted by Wil Wheaton, whom dedicated fans may remember from “Star Trek: The Next Generation”.) Fans can talk directly to designers, who, in turn, can recruit fans to test early versions of their games. Crowd-funding sites allow designers, whether amateur or professional, to raise money for games that have not yet been made, drastically reducing the risks involved in sinking time into a project. Draughts itself began life on Kickstarter, rather than with the traditional loan from a bank.

At the same time, says Steve Buckmaster of Esdevium Games, a British importer of board games, the prevalence of screens has made people keener to connect in person. Board games offer the sort of social experience that no amount of FaceTime, Skype or Destiny can quite replace. “People are sitting in front of a computer all day at work,” he says. “Do they really want to do even more of that when they get home?” Chapman agrees. “I think, paradoxically, one of the things social media can end up doing is keeping you away from your friends,” he says.

The cultural changes wrought by technology have helped, too. “I think the popularity of video games is a factor,” says Leacock. Over the past few decades video-gaming has grown into a $90bn industry. The typical gamer is in their 30s, and almost as likely to be a woman as a man. “It gets rid of this silly idea that games are something only kids should enjoy.” The tactility of board games can be a pleasure in an increasingly virtual world. Many modern games have rich, lovingly crafted pieces. In Kanagawa, for instance, the players are apprentices of Katsushika Hokusai, the most famous Japanese classical artist, and must strive to produce the best paintings in order to win the favour of their master. The playing pieces include a set of miniature brushes, a bamboo mat and a series of beautifully drawn cards featuring images of stags, mountains and blossom leaves. The goal of the game is to assemble them into a larger, harmonious painting.

Finally, and perhaps most importantly, by bringing fans together and allowing them to trade wisdom and good ideas, technology has drastically improved the games themselves. One consequence of the board-gaming boom has been to help designers come up with a set of principles and rules-of-thumb that add up, more or less, to a theory of fun. One way to get a sense of it is to look at a well-known game that violates many of this theory’s tenets. Monopoly is, by most calculations, the bestselling board game of all time. Yet it languishes near the bottom of a list of games as reviewed by the users of BoardGameGeek, a popular website. In the eyes of a modern game designer, it does almost everything wrong. (One reason may be that Monopoly is a polemic disguised as a board game, designed to warn of the dangers of untrammelled capitalist power. It was not intended to be a jolly Christmas pastime.)

One of Monopoly’s big mistakes is positive feedback, designer-speak for a mechanism by which a small advantage early on snowballs into a big, insurmountable one later in the game, which makes things boring for the other players. Modern designers tend to prefer negative feedback, in which life gets harder for those doing well. Sometimes that is enforced by explicit penalties. Sometimes it emerges by itself, or through political dealing by other players. Conquering too many planets in a game of Twilight Imperium may make it hard to defend existing territory, for instance, especially if other players decide to gang up on the leader. That helps to keep things interesting for everyone.

Another problem is that Monopoly has a large element of luck (movement is controlled by rolling dice) and limited strategic depth. Some properties simply offer a better return on investment than others: buying them is always a good idea. Better to offer players less obvious, more thought-provoking choices: advantages that come with significant trade-offs, for instance, or whose usefulness varies depending on what is happening in the rest of the game. Hidden information opens up the potential for bluffing and misdirection. In Ticket to Ride, players compete to build railways across Europe. At the beginning, each player is given a set of secret objectives. If her opponents are to thwart them, they must first try to infer these from how she is playing. Introducing elements of politics, diplomacy or trading can give players things to do even when it is not their turn, helping to keep their interest from wandering.

And the new ideas are still coming. Pandemic, in which the players work together, fuelled a boom in co-operative games, uniting players to work together against the game itself. Computers are finding their way into board games directly: in X-Com (which is based on a bestselling video-game franchise) the players must work together to defend Earth from an alien invasion. The alien forces are marshalled by a smartphone app, which reacts to how the players are doing. By hiving the book-keeping off to a computer, designers are able to experiment with more complex sets of rules that would be fiddly and tedious for human players to administer.

The latest innovation is so-called “legacy” games, named for Risk: Legacy, a 2012 reboot of the classic game that founded the genre. As with modern TV series, the idea is to introduce an overarching narrative, which advances as you play the game multiple times. As an extra twist, the rules change between each playthrough. Depending on the results of a particular game, players could receive instructions to draw new features onto the board, rip up existing rules or be given new powers or obstacles. One such game, Pandemic: Legacy, is, according to the denizens of BoardGameGeek, the single best board game ever made.

Despite its new-found popularity, board-gaming remains a slightly nerdy pastime (there are a number of fans among Economist journalists). And although they are meant to be fun, squint and you can probably justify playing them on the grounds that it is good for you. Board-gaming will improve your mental arithmetic, give you a good grasp of probability and familiarise you with game theory.

The most hardcore games veer on simulation. Volko Ruhnke designs wargames based on real-world conflicts. A Distant Plain aims to recreate the Western invasion of Afghanistan in 2001, in all its political complexity. He is enthusiastic about games’ potential as a teaching tool. America’s spies, it seems, agree. One of Ruhnke’s sidelines is in designing wargames for the cia, which uses them to train analysts and operatives. “A wargame puts you into history in a way that no book can,” he says. “If I’m doing my job properly, the mechanics of the game will force you to consider the choices that real people had to make. That’s advanced. That’s grad-school history, not grade-school stuff.”

Let's block ads! (Why?)

17 Mar 21:55

Preto no branco

by Tiago de Thuin
Neste carnaval, a questão da adequação moral de se usar fantasias foi uma das que mais ocuparam as classes tagarelantes das redes sociais brasileiras; dentro dessa questão, muito se falou sobre apropriação cultural, falando sobre as fantasias de índios (com direito a índios propriamente ditos se manifestando pró e contra; não vi ninguém do Cacique de Ramos se pronunciando ou sendo perguntado). O curioso dessa discussão, ao menos pra mim, foi que o grosso dela, entre as classes tagarelantes - ou melhor, entre o que eu vejo das classes tagarelantes - se deu de um ponto de vista branco e ocidental. Tanto as pessoas que denunciavam a apropriação cultural quanto aquelas que rejeitavam a noção o faziam a partir do ponto de vista de fazer parte de uma cultura branca e ocidental e majoritariamente como, eles mesmos, brancos.

Essa discussão já estava morrendo quando vi um chilro no twitter que comentava que "pelo visto só aqui no twitter reparamos e condenamos o blackface," condenando o fato de os jurados do Estandarte de Ouro terem entregue um estandarte ao Salgueiro, apesar da escola ter incorrido naquela prática condenável. O curioso dessa declaração é que, bem, presumivelmente os jurados do estandarte de ouro têm mais intimidade com a cultura popular brasileira, e especificamente a negra, do que a média das redes sociais. O chilro condenando, então, então é um caso particularmente explícito de um movimento antiracista que tem os EUA como norte, vide o próprio uso do termo em inglês blackface, que tem uma história específica naquele país associada aos minstrel shows, o que não elimina o valor negativo das caricaturas de negros perpetradas por atores brancos em outras plagas, mas faz uma diferença na tradução que é muitas vezes ignorada; não que, por sua vez, como nada disso é imutável, blackface, sendo ou não um problema genérico dentro do racismo brasileiro antes da influência americana, seja hoje aceitável, porque o problema é a ofensa presente, e não a verdade histórica (que por sua vez é sempre contingente). Só do que estou falando é que as visões do racismo e de seu enfrentamento, tanto por companheiro de viagem quanto pelos próprios negros, são mutáveis, e dependem tanto de vivências diretas quanto de influências culturais e intelectuais, históricas e internacionais. E, no Brasil, a maior dessas influências é a americana. 

Não estou falando disso, bem entendido, para entrar na discussão como mais um dos "nacionalistas do racismo" que rejeitam as noções americanas sobre o tema, seja para pregar uma visão única nacional, seja pra propalar as balelas da democracia racial pseudo-freyreana (nem Freyre acreditava numa democracia racial efetiva). Pelo contrário, o que acho curioso da assimilação dessas noções no Brasil é que essa influência é, quando se pensa na demografia brasileira, extremamente conveniente para os brancos. Afinal, o Brasil, que recebeu mais de treze vezes mais africanos cativos do que os EUA, e menos da quinta parte de imigrantes livres, não é, demograficamente, um país em que os negros, descendentes de escravos ou não, são uma minoria entre outras que convivem com uma maioria privilegiada branca. Pelo contrário, é um país em que negros e mestiços (de negro e índio) constituem a maioria da população. Por pouco, segundo o IBGE, mas há mais de um estudo demonstrando o quanto a autoidentificação para o IBGE embranquece o sujeito em relação a como ele é visto por seus pares e, mais ainda, pela minoria branca que domina o país.

É uma diferença bem grande de horizonte programático que sai dessa diferença demográfica. Uma minoria entre outras almeja, junto com as outras no melhor dos casos e junto com a maioria opressora no pior, representatividade, ser reconhecida, integrar-se. Uma maioria oprimida por uma minoria violenta almeja uma revolução em que tome o poder. O modelo, ao invés de ser o do extermínio indígena no século XX, é o do Apartheid; passamos dos EUA à África do Sul. Não se tem cotas para ter representação em caminhos de busca pessoal da felicidade, mas para dar acesso da maioria ao controle dos recursos nacionais; não se fala em aplainamento, mas em reparação. (A ação afirmativa americana, imitada aqui, como antes dela as dos grandes países da Eurásia, se direciona a minorias.) Se você conseguisse fazer no Brasil, não uma setorial negra dos partidos tradicionais ou grupo de discussão negro no parlamento, mas um partido de libertação negra e mestiça, que fosse visto como o legítimo representante de um anseio legítimo ao protagonismo, os partidos tradicionais é que seriam, todos, secundários - como ocorre na África do Sul.

Não estou dizendo, pra deixar claro, que os brancos antiracistas brasileiros, e muito menos o movimento negro, fazem isso de caso pensado, no interesse dos blankes. Simplesmente, o que acontece é que essa visão é privilegiada pelas disparidades de poder, prestígio, e geração e transmissão de conhecimento acadêmico, tanto a nível nacional quanto global. Global, porque é tanto mais fácil quanto mais prestigioso seguir os ícones culturais, políticos, e acadêmicos americanos do que africanos. Mais fácil porque conhecimento e ativismo, como tudo mais numa sociedade hierarquizada, se movem mais facilmente em linhas verticais do que horizontais. Mais prestigioso porque, igualmente, o prestígio está muito mais associado, salvo casos excepcionais, ao que acontece nas áreas centrais.

A nível nacional, é curioso notar que o centro de poder econômico e acadêmico do país é justamente o lugar em que o modelo de sociedade americano, com diversas minorias dentro de uma sociedade de maioria branca, está mais próximo de se aproximar da verdade. São Paulo tem menos de um terço da sua população de pretos e pardos, e uma proporção de imigrantes de todo canto, mas especialmente da Ásia oriental, literalmente dezenas de vezes maior do que as da maior parte do país. Assim, adaptar a visão americana ao que se passa em SP gera menos dissonância do que geraria mais ao norte, e mesmo do que ao Sul, que também tem uma maioria branca. E as redes sociais, longe de eliminar a importância dos centros, parecem pelo contrário maximizar essa influência.

Não deixa de ser interessante a ideia de um Brasil onde fosse impensável um presidente branco-branco (já que os campesinos dos sertões nortistas, apesar de serem classificados como brancos, são um problema de racismo e preconceito étnico à parte).
17 Mar 21:51


17 Mar 21:50


17 Mar 21:49


17 Mar 21:49


17 Mar 21:48


17 Mar 21:36


by tomfishburne
Adam Victor Brandizzi

Very nice this concept of "Trojan Mouse."

I first played around with this cartoon idea nearly a decade ago and decided to redraw for a conference in Amsterdam last week.

Organizations are designed to minimized risk. It’s in their DNA. Organizations develop all sorts of antibodies to neutralize threats to the status quo. A natural byproduct is that it can be hard to introduce unconventional ideas.

As part of my Amsterdam talk and last week’s Culture of Innovation cartoon, I’ve been thinking about creative ways to bring ideas to life in this type of risk-averse environment.

Your Ad Ignored Here
"If marketing kept a diary, this would be it."
- Ann Handley, Chief Content Officer of MarketingProfs
Order Now

I once met an entrepreneur named Mohammad Al-Ubaydli who was trying introduce a new technology idea to hospital systems. Hospitals are notoriously and understandably risk averse, and he struggled to get his idea to take off.

He finally found success through a concept he called “Trojan Mice”. Rather than pitch the idea from the top-down, he broke up the idea into small experiments to drive adoption from the bottom-up. These “Trojan Mice” would then slip under the door of an organization and grow.

Jackie Mahendra recently expanded on the idea of Trojan Mice in the Stanford Social Innovation Review:

“One way to do that––to make risk more approachable––is to run small tests. To build something that isn’t necessarily grand, but rather light, lean, and quick—experiments that we can send off nimbly through the gates and learn from, regardless of what returns.

“A Trojan Mouse instead of a Trojan Horse. Unlike a Trojan Horse, a Trojan Mouse’s job isn’t to win the war all at once; its job is to test the waters and inform future tactics. Because there are many mice rushing the gates, it’s also more likely that some of these tests will come back…

“While we cannot expect every Trojan Mouse we send out across the gates to come back a success worthy of scaling up, we also know that we can learn just as much from those that fail to grow as those … that grow beyond our initial hopes. The result of sustained investment in risk-taking infrastructure will be healthy soil in which the best ideas can take root and grow.”

Here are a few related cartoons I’ve drawn over the years.

Open Innovation August 2013

Innovation That Lays the Golden Eggs May 2011

Cannibalize October 2012

17 Mar 21:22

What if it’s only one character off?

by CommitStrip
Adam Victor Brandizzi

One could give such a message to every password, I think that'd be ok :P

11 Mar 11:03

the blockchain bandwagon

by tomfishburne

A few weeks ago, a publicly traded beverage company called Long Island Iced Tea Corp changed it’s name to Long Blockchain and announced that it was focusing on blockchain technology. Their stock surged 200% on the news.

Last week, Chanticleer Holdings, which owns burger restaurants and is a franchisee of Hooters, said that it was using blockchain for a new customer rewards program across its restaurants. Their stock shot up by 50%. As they put it:

“Use your Merit cryptocurrency mined by eating at Little Big Burger to get a buffalo chicken sandwich at American Burger Co., or trade them with your vegan friend so he can get a veggie burger at BGR. And that’s just the beginning.”

“Just the beginning” is right. Blockchain is suddenly on the radar of business and marketers are being asked, “what’s your blockchain strategy?” Blockchain is the shiny new thing of 2018.

Your Ad Ignored Here
"If marketing kept a diary, this would be it."
- Ann Handley, Chief Content Officer of MarketingProfs
Order Now

And as with every shiny new thing, there’s potential, but it gets masked and obscured by all the hype. This is particularly the case with a complicated technology like blockchain, where there’s a lack of understanding of what the shiny new thing even means.

I found an interesting blockchain resource for marketers, called “The CMO Primer for the Blockchain World” by Jeremy Epstein. It’s incredibly bullish and Jeremy himself admits that he may have “drunk too much Kool-Aid”. But it is a handy overview of some of the potential long-term use cases for marketers, including online ad verification, customer data protection, and product tracking. And I found the underlying metaphor of blockchain as a “trust machine” to be a useful lens.

I think marketers have a tendency to get so excited about shiny new things that we can lose sight of the fundamentals. In the long run, if we want to market iced tea and burgers, we can’t stray too far away from the iced tea and burgers.

Here are a couple other cartoons I drew about the shiny new thing:

Shiny Object Syndrome May 2015

The Emperor’s New Marketing Plan
May 2017

11 Mar 10:59

Thy Will Be Dunk

by delfrig


14 Feb 20:53

Saturday Morning Breakfast Cereal - Browser History

Adam Victor Brandizzi

"Sometimes, I... I program in weird languages..." *sobs*

Click here to go see the bonus panel!

Late at night, he would sneak into the bathroom, turn the volume down, and read Bloomberg.

New comic!
Today's News:
14 Feb 17:39

Passo a passo: um pudim de tapioca que nem vai ao fogo!

by Marcelo Katsuki

Para esses dias de bloquinho, nada como um pudim de tapioca para repor a energia depois de cair na folia! E essa receita, que recebi do chef Carlos Ribeiro, é muito prática, nem vai ao fogo! Eu fazia uma versão com leite quente, mas virava um gororoba, rs. Essa é muito melhor. Vem pro bloco do pudim!


Disponha 500 gramas de tapioca em flocos em uma tigela.


Misture 1/2 litro de leite com 1 vidrinho pequeno de leite de coco e junte à tapioca. Deixe descansar por 2 horas em temperatura ambiente, até a tapioca absorver o líquido.


Junte 1 lata de leite condensado, 1 pacote pequeno de coco ralado (120 g), 2 colheres (sopa) de açúcar e misture.


Unte uma forma com um pouquinho de óleo e despeje a mistura. Leve à geladeira por 4 horas antes de desenformar.


Na hora de servir, finalize com leite condensado e coco ralado. Também vai bem com ameixas em calda, “como um manjar”, conta o chef Carlos Ribeiro, do restaurante Na Cozinha.