"the invisible hand never picks up the check"

They say your kids will follow whatever you usually do around them, so let's indoctrinate this guy right away

hey @lidia_p maybe you know about the Processed World magazine but it's awesome enough to just leave it here for anyone to find


Every once a year I need to use a remote desktop tool, and it's pretty frequent that the one I have doesn't work anymore (until now I was using xpra, which was removed from the debian repos)

So apparently the current tool is x2go, which is surprisingly seamless and gets you to the other desktop real quick. Super pleased with it.


I had set myself to do daily Shoebot sketches more than a month ago, and silently lost the pace a few days into it. I'm still bummed that I didn't make it, but there was a decent reason.

I've been rather active around covid contact tracing apps, doing media outreach and general activism as part of the PT digital rights group (@d3). After months of hard work (and confirmation of failure scenarios), we got a grant from a European NGO to write a report about the portuguese corona tracing app experiment.

So I switched my evenings from Shoebot dabbling to investigative mode, sourcing hundreds of news to establish a timeline, gathering data and making charts. The report was delivered but we're energised enough to adapt it into a format aimed at a Portuguese audience -- lawmakers, media and concerned citizens.

As a way to kind of redeem myself from setting Shoebot aside, I'm using it to make the visualizations for the report. And now I have loads of plans to build a plugin for Shoebot to provide easy ways to visualise datasets -- the Python coding style is bliss for me, compared to other specialised frameworks like Bokeh or D3 (which I love and use for more demanding contexts).

This is a work-in-progress chart, made for analysis and not (yet) aesthetics, but I'm pretty excited with how it's turning out.

Share a project idea you've worked on in private, made some progress, but eventually gave up on and never published.

Would you still love to finish it some day? Did you find an alternative solution? Realized the idea wasn't that great after all?

Looking forward to seeing all your replies! ❤️

Can anyone help me id this bird species so I know what to feed this little guy? (found in Northern Portugal)

- Non-daily 10 -

Some buggy flickering at the start, but there's some sine wave motion

source code 

fill(0.8, 0.25)

def draw():
for n in range(20):
angle1 = FRAME/2
angle2 = FRAME*5 % 360
arc(WIDTH/2, HEIGHT/2, n*12, angle1, angle2-n*5)

Show thread

- Daily 9 -

Low energy evening, so today's a riff on day 2's rotating arcs

messy source code 

i'm sorry, this is really bad atm!

size(548, 548)

rsz = 30
cols = 16
rows = 16

class LilSquare:
def __init__(self, step=3, sz=rsz, offset=0.5, gap=2):
self.step = step
self.size = sz
self.offset = offset
self.flipped = False
self.gap = gap
self.frontcolor = "#283618"
self.backcolor = ""
self.stepamount = self.offset

def next(self):
if self.step >= self.size:
self.stepamount = -self.offset
elif self.step <= 1:
self.stepamount = self.offset
self.flipped = not self.flipped
self.step += self.stepamount

def draw(self, x, y):
col = self.backcolor if self.flipped else self.frontcolor
rect(x, y, self.step-self.gap/2, self.size-self.gap/2, fill=col)

lilsquares = [[LilSquare(step=x%3+y%2, offset=(y+1)%4+0.2) for y in range(rows)] for x in range(cols)]

def draw():
global lilsquares
translate(50, 50)

firstlsq = lilsquares[0][6]

for x,y in grid(cols, rows, rsz, rsz):
tx, ty = (int(x/rsz), int(y/rsz))
lsq = lilsquares[tx][ty]

Show thread

- Daily 8 -

I spent more time than would be reasonable to implement squares that flip. First I tried to avoid saving their states, but got fed up and just did things with a class. Still grumpy that I couldn't find a nicer way.

Next time I'll see if trig motion makes this less monotonous

- Daily 7 -

Going deeper into @aqua 's epitrochoids and playing with numbers until something nice appears.

One happy discovery -- this particle-like effect is actually a dashed stroke which happens to move nicely as the paths shift shapes. Reminds me of Processing particle examples (and using dashes speeds up rendering considerably)

source code 

from math import sin, cos

lines = True
radius = WIDTH * 0.45
center = WIDTH * 0.5
theta_count = 5
k = 1


def draw():
global lines, radius, center, theta_count, k
if FRAME > 300:
k += 1

td = (300 / (FRAME % 300 + 1)) - 1

if lines:
start = False
for i in range(360 * theta_count):
theta = i / theta_count
# fill(sin(theta) + 1, 1, 0.4)
stroke(sin(theta) + 1, 1, 0.4)
t_r = 1
tr = t_r / k
t_total = t_r + tr + td
t_scale = radius / t_total
rr = t_r * t_scale
r = tr * t_scale
d = td * t_scale
x = (center + (rr+r)*cos(theta) - (d*cos(((rr+r)/r)*theta)))
y = (center + (rr+r)*sin(theta) - (d*sin(((rr+r)/r)*theta)))
if lines:
if not start:
moveto(x, y)
start = True
lineto(x, y)
rect(x, y, 1, 1)
if lines:

Show thread

- Daily 6 -

Fell behind a couple of days because of work, so let's begin catching up

This is my first take at porting @aqua 's beautiful epitrochoids demo to Shoebot. Original at picardia.co/static/vanitas/

The only goal for now was getting anything on the screen; it's still pretty glitchy, I'll probably keep playing with this more as I try to understand what's going on

source code 

margin = 60
spacing = 40
swidth = 20
colors = ["fec5bb","fcd5ce","fae1dd","f8edeb","e8e8e4",


def draw():
for n in range(2,12):
arc(margin, HEIGHT-margin, n*spacing, -90, 0,
strokedash=[50, 25, 100, 25], dashoffset=n*20+FRAME*1.5)

for n in range(1,12):
arc(WIDTH-margin, margin, n*spacing, 90, 180,
stroke=list(reversed(colors))[n%len(colors)], blendmode='multiply',
strokedash=[50, 25, 100, 25], dashoffset=-n*20-FRAME*1.5)

Show thread
Show older

Welcome to post.lurk.org, an instance for discussions around cultural freedom, experimental, new media art, net and computational culture, and things like that.

<svg xmlns="http://www.w3.org/2000/svg" id="hometownlogo" x="0px" y="0px" viewBox="25 40 50 20" width="100%" height="100%"><g><path d="M55.9,53.9H35.3c-0.7,0-1.3,0.6-1.3,1.3s0.6,1.3,1.3,1.3h20.6c0.7,0,1.3-0.6,1.3-1.3S56.6,53.9,55.9,53.9z"/><path d="M55.9,58.2H35.3c-0.7,0-1.3,0.6-1.3,1.3s0.6,1.3,1.3,1.3h20.6c0.7,0,1.3-0.6,1.3-1.3S56.6,58.2,55.9,58.2z"/><path d="M55.9,62.6H35.3c-0.7,0-1.3,0.6-1.3,1.3s0.6,1.3,1.3,1.3h20.6c0.7,0,1.3-0.6,1.3-1.3S56.6,62.6,55.9,62.6z"/><path d="M64.8,53.9c-0.7,0-1.3,0.6-1.3,1.3v8.8c0,0.7,0.6,1.3,1.3,1.3s1.3-0.6,1.3-1.3v-8.8C66,54.4,65.4,53.9,64.8,53.9z"/><path d="M60.4,53.9c-0.7,0-1.3,0.6-1.3,1.3v8.8c0,0.7,0.6,1.3,1.3,1.3s1.3-0.6,1.3-1.3v-8.8C61.6,54.4,61.1,53.9,60.4,53.9z"/><path d="M63.7,48.3c1.3-0.7,2-2.5,2-5.6c0-3.6-0.9-7.8-3.3-7.8s-3.3,4.2-3.3,7.8c0,3.1,0.7,4.9,2,5.6v2.4c0,0.7,0.6,1.3,1.3,1.3 s1.3-0.6,1.3-1.3V48.3z M62.4,37.8c0.4,0.8,0.8,2.5,0.8,4.9c0,2.5-0.5,3.4-0.8,3.4s-0.8-0.9-0.8-3.4C61.7,40.3,62.1,38.6,62.4,37.8 z"/><path d="M57,42.7c0-0.1-0.1-0.1-0.1-0.2l-3.2-4.1c-0.2-0.3-0.6-0.5-1-0.5h-1.6v-1.9c0-0.7-0.6-1.3-1.3-1.3s-1.3,0.6-1.3,1.3V38 h-3.9h-1.1h-5.2c-0.4,0-0.7,0.2-1,0.5l-3.2,4.1c0,0.1-0.1,0.1-0.1,0.2c0,0-0.1,0.1-0.1,0.1C34,43,34,43.2,34,43.3v7.4 c0,0.7,0.6,1.3,1.3,1.3h5.2h7.4h8c0.7,0,1.3-0.6,1.3-1.3v-7.4c0-0.2,0-0.3-0.1-0.4C57,42.8,57,42.8,57,42.7z M41.7,49.5h-5.2v-4.9 h10.2v4.9H41.7z M48.5,42.1l-1.2-1.6h4.8l1.2,1.6H48.5z M44.1,40.5l1.2,1.6h-7.5l1.2-1.6H44.1z M49.2,44.6h5.5v4.9h-5.5V44.6z"/></g></svg>