Making an ASCII Christmas/business-card
Index
- Interesting Business Cards
- My Business Card
- Other Peoples' Code Greetings Cards
- My Christmas Card
- Relevant Sites
- Rolling updates
Interesting business cards
A pal recently sent me this: 15 lines of code for setting up an HTTP client on the back of a metal business card.
A small part of the joke in American Psycho's business card scene is that the cards are poorly designed (odd spacing, typos, distracting textures etc), yet they care about them so much. Most business cards I pick up are perfunctory, discardable things; I'd not forget someone who gave me a "code card".
With the exception of nice hand-made ones, or ones containing real written content, the whole culture around birthday and Christmas cards are often given out kind of gives me the ick. Receiving an overpriced piece of card stock with a bad joke printed on it, with my name at the top of a pre-printed text template and theirs at the bottom, is the sort of impersonal behaviour American Psycho mocks yuppies for.
I decided to try making a proof of concept of something the novelty of which would work in both these contexts, functioning as "fun propaganda" in tech (job market is Bad), but also able to function (as intended) as a sincere & friendly mini-gift to friends, even ones not much into coding.
# #
## ##
### ###
#### ####
Way back in January 2022 I wrote a program based on the CS50 Mario Pset, in which you must generate the above shape at variable height.
My program turned that into a christmas tree, with little randomised snowflakes changing position every second:
* * ## *
*||#* *
* * *#||#* * *
** ###||*##
*###||#*##
#####||*#### *
* || * *
_________||_田______
So for this I ported it to Python and cut the linecount right down. It needed to be brief enough to copy out if wanted, obfuscated enough to not be obvious how it works, but have hints enough to give them some ideas of what is happening.
import os,time;from random import randint as rnd,sample as smp
seed=rnd(12,20); present='\u7530'; s,n,o,w,y=' ','_','|','#','*'
def bud(len, chr): return chr*len
def snow(branch):
for i in sorted(smp(range(len(branch)),int(seed/rnd(3,6)))):
if branch[i]==present or branch[i]==n:continue
else: branch=branch[:i]+y+branch[i+1:]
return branch
def grow(rows):
time.sleep(1.0);os.system('cls'if os.name=='nt'else'clear')
for row in range(rows):
if row>=rows-2:twig=bud(rows,s if row==rows-2 else n)+o
else:twig=bud(rows-row,s)+bud(row,w)+(o if row!=0 else w)
print(snow(twig+(twig[::-1][:3]+present+twig[::-1][5:]\
if row==rows-1 else twig[::-1])))
while True: grow(seed)
It can be made terser but I like this to be somewhat readable to an experienced dev.
The easiest way to get what is going on here is to bear in mind that for each row of the tree, I'm building the left half of it, and then building the right half by appending the string with a reversed copy of it. Then it's just a matter of replacing some of the characters with asterisks.
My Business Card
First, I put together a business card like this:
I made up a few of these with some filofax divider paper and handed them out to folks at a tech event or two. You can peek at the repo here.
Making a Christmas Card
Inspiration
Having missed the deadline for Christmas and refusing to pay local printing prices for custom cards, I had time to do research. Of the paltry lot available the best by far were Matt Raw's 2011-made letterpress "Code Cards" (see some more pics here):
Similar businesses are lacking -- most cards found on Etsy, for example, are like those if (thirsty) { drinkCoffee(); }
programmer mugs -- not really something an actual SWE would appreciate, but rather something for people who are buying things for their SWE friends.
My Christmas Card
The back of Raw's cards had a short and well-placed colophon which I sought to include in my design. Because my tree motif would take up the centre of the front, I decided to keep the back's centre empty, and bracket with such a colophon on the top and bottom. I wanted a fairly firm, off-white paper stock, slightly more office card than letterpress artwork, and, being in China at the time, went with 荷兰白卡300克, got 40 made for 15 quid and have them scheduled to be sent out for Christmas 2024.
So here's my card, building on top of all this influence:
I would quite like to sell these for a marginal profit but it's at time of writing November 14th, so it'll have to wait till next year.
Sites
A few days after, I found Reuben Son's site index, which, if you like what you've seen so far, you will probably agree is really excellent (this here below is an iframe and may not display well on a phone):
The same night I came across Son's site, I also found Sunday Sites, which are HTML/CSS-only projects where folks design a single webpage project in a day. This little seasonal ASCII animation Four Seasons is likewise quite fun. You should take a look at the source code for that site in the console -- Séan's achieved that in a pretty novel way.
So quickly inspired by that Four Seasons layout, I've thrown a web version together too, as this very simple format is very nice.
Rolling updates
(last updated: 2024/04/13)
Hereon, I'm going to keep a little log of interesting/techy business cards:
- Brian D Carlton's PCB business card and also Anthony Kouttron's implementation
- Lee Byron's site, which adds a bit of embodiment to this little incursion.
- Micah R Ledbetter has this little randomised business card content page.
- Tony Richards found the
Auto Phrame
, an old businesscard-sized metal photo frame that holds a stack of prints.