humancode.us

Robots should not look like people

October 11, 2024

We already live among robots; machines that autonomously relieve us of tedious chores have existed for more than a century. We lived among robots when James Watt sold steam engines that milled wheat tirelessly all day. Our cars have lane-keep assist, adaptive cruise control, and automatic headlights. At home, we have washing machines, rice cookers, thermostats, and automatic floor sweepers. In factories, robots make and assemble everything from ramen noodles to automobiles. Robots are already everywhere.

But none of these robots look like people; and that’s for a good reason: their shape is dictated by their purpose. They are optimized to do one or two jobs very well and economically, and as every generation of robots get better at what they do, their shapes become more optimized for their intended jobs.

So why do a certain class of folks continue to lust after a future of robots that look like humans?

While humans are fantastic generalists, we are not very good at any repetitive chore. Human-shaped robots will not only inherit our flexibility, but also our limitations. Our lanky, limbed bodies evolved to satisfy evolutionary pressures that robots aren’t subject to, so why bother making robots that are constrained to the human form, teetering on two tiny feet, doomed to never be very good at any task in particular?

Read more…

The proof of passion is time

October 5, 2024

The proof of passion is time.

Not just the days you spend working on something, but also the tiny moments you spend thinking about it when you’re away. The daydreams in which you mull the next step, the long showers wherein you ruminate about how you’d go about it.

The proof of love is time.

It’s when something distracts you as it bring your love to mind, and takes up a tiny bit of time in the middle of your day. It’s when you think about what you should pick up while you’re already about, because it may benefit your love. It’s the hours you spend observing, listening, learning, in order to know that love more deeply.

Read more…

Thoughts on AI art

October 4, 2024

Thoughts on #AI art, from my conversation on Mastodon:

Art is, fundamentally, a form of communication; that to me is what differentiates art from natural phenomena such as “nature” and math, within which we can still find beauty, but do not expect an author on the other side.

AI art breaks this contract in the most fundamental way: it is math that’s designed to feign humanity. It mimics communication, setting an invitation for the viewer to comprehend and communicate, only to yank the rug from under their feet—gotcha, you’ll find only random numbers here. This is what I mean by “dishonest”. It’s fundamentally a bait-and-switch at the most meaningful, human level.

I’m not as concerned about procedural art, because…it’s obvious what it is. A Lissajous pattern on an Apple II is as beautiful as a poster of plotter art, but it’s up front with me: the art is in the author’s choice of math, not in the image itself.

Dealing with Objective-C Protocol types in Swift

September 19, 2024

When Objective-C headers are imported into Swift using a bridging header, a single Objective-C protocol appears as two different entities in Swift code.

Say we have the following Objective-C header file that has been imported into a Swift target using a bridging header:

// Fungible.h

@protocol Fungible<NSObject>
- (NSString *)funge;
@end

There are two ways to refer to this protocol in Swift: using a native Swift type, or using an Objective-C Protocol object reference.

let fungibleSwiftProtocol = Fungible.self
let fungibleObjCProtocol = NSProtocolFromString("Fungible")!

These two types should be the same—after all, they refer to the same protocol—but they are not, as shown when we print out their descriptions and ObjectIdentifiers:

print("fungibleSwiftProtocol: \(fungibleSwiftProtocol)")
print("fungibleSwiftProtocol object identifier: \(ObjectIdentifier(fungibleSwiftProtocol))")
print("fungibleObjCProtocol: \(fungibleObjCProtocol)")
print("fungibleObjCProtcol object identifier: \(ObjectIdentifier(fungibleObjCProtocol))")

Which produces the output:

fungibleSwiftProtocol: Fungible
fungibleSwiftProtocol object identifier: ObjectIdentifier(0x00000001f5d8e300)
fungibleObjCProtocol: <Protocol: 0x100008780>
fungibleObjCProtcol object identifier: ObjectIdentifier(0x0000000100008780)

They are different! But of course they’re different, you say: one of them is a Swift Any.Type, while the other is a Protocol instance. Sure, but they refer to the same thing. Is there a way to actually test if they refer to the same thing?

Read more…

Open Source Software is the Pastime of the Rich

September 18, 2024

Open Source Software in a world of capitalism can only exist as a pastime for the already-rich. Only companies extracting profit from something else can afford to maintain OSS. Only individuals paid for something else can contribute significant time to OSS projects in their spare time.

It’s a precarious thing to profit directly from maintaining OSS and selling it as a service, precisely because someone else can copy and repackage your work for less money—which is entirely within the spirit of OSS—and undercut your business model. A business truly in the spirit of GPL would celebrate such a copy; but a business that must profit from their work on OSS would see it as theft of their livelihood.

In other words, insistence on “pure altruism” as the basis of open-source software is essentially a shorthand for excluding those who are not already wealthy. It’s elitist.