Live data from Hacker News

“The Mess We're In” by Joe Armstrong at Strange Loop [video]

youtube.com

31–40 of 80 posts

Re: “The Mess We're In” by Joe Armstrong at Strange Loop [video]

#31
post #22

So, while in general I've enjoyed other things Joe Armstrong has written, I think this talk is pretty discombobulated and doesn't have a coherent narrative. Here are some of the problems Joe posed: - bugs in software like Open Office, Keynote, grunt - code not being commented - computers booting slowly - computers using too much energy - code being written for efficiency rather than readability He talks about distrib…

Came here to see this. I expected to see a well reasoned argument for functional programming and how entrenched the OO mentality is. What's the mess we're in again?

Re: “The Mess We're In” by Joe Armstrong at Strange Loop [video]

#32

I totally agree with the "abolish names and places". Why can't I just write: $ cp hash:// . and have my computer do whatever it takes to retrieve a file with this hash and copy it on my disk?

How would you remember the hash? I guess one could have some sort of directory-like system for mapping human-memorable names to hashes...

And of course it would have to be tree structured to avoid naming collisions and bloat. Oh, wait...

Re: “The Mess We're In” by Joe Armstrong at Strange Loop [video]

#33

I totally agree with the "abolish names and places". Why can't I just write: $ cp hash:// . and have my computer do whatever it takes to retrieve a file with this hash and copy it on my disk?

I'm not sure if this is sarcasm or not. The usability of such an approach is terrible: humans like names, and like hierarchy. This is the same reason we use DNS instead of IP addresses.

There was URN https://en.m.wikipedia.org/wiki/Uniform_Resource_Name many moons ago that is still used. A URN resolver is a software library that could convert that identifier to a URL.

URLs aren't much different from URNs but they actually specified a default resolution algorithm that everyone could fall back on. They were more successful because there was less need to separate identifiers and locators than originally thought, though it's still a debatable point whether the results are intuitive (eg. HTTP URLs for XML namespace identifiers which may or may not be dereferenceable).

HTTP URLs took advantage of DNS as an existing globally deployed resolver, coupled with a universally deployed path resolver (the web server) the rest was history. You could create a URL scheme called "hash" but it would be hard to see how you could design a standard resolver unless it was one big centralized hash table in the sky - you still would need to, at the very least, map objects to IP addresses.

Re: “The Mess We're In” by Joe Armstrong at Strange Loop [video]

#34

I totally agree with the "abolish names and places". Why can't I just write: $ cp hash:// . and have my computer do whatever it takes to retrieve a file with this hash and copy it on my disk?

How would you remember the hash? I guess one could have some sort of directory-like system for mapping human-memorable names to hashes...

> How would you remember the hash?

I wouldn't. I'd make a symbolic link.

Basically the current directory/names structure would be an abstract layer above the hash-based system.

Re: “The Mess We're In” by Joe Armstrong at Strange Loop [video]

#35

I totally agree with the "abolish names and places". Why can't I just write: $ cp hash:// . and have my computer do whatever it takes to retrieve a file with this hash and copy it on my disk?

I'm not sure if this is sarcasm or not. The usability of such an approach is terrible: humans like names, and like hierarchy. This is the same reason we use DNS instead of IP addresses. There was URN https://en.m.wikipedia.org/wiki/Uniform_Resource_Name many moons ago that is still used. A URN resolver is a software library that could convert that identifier to a URL. URLs aren't much different from URNs but they act…

> humans like names, and like hierarchy.

They do, but that does not mean there should not be other ways to access data. Hashes are universal and unambiguous. There should be a way to retrieve a file given its hash.

> You could create a URL scheme called "hash" but it would be hard to see how you could design a standard resolver unless it was one big centralized hash table in the sky - you still would need to, at the very least, map objects to IP addresses.

There would be an underlying P2P protocol that cp would use. On the other hand, cp doesn't even use FTP or HTTP so maybe that's too much to ask.

Maybe with curl or wget, then.

Re: “The Mess We're In” by Joe Armstrong at Strange Loop [video]

#36
Joe and I are thinking similarly :D I'm going to dump some ideas here.

---

# JRFC 27 - Hyper Modular Programming System

(moving it over to https://github.com/jbenet/random-ideas/issues/27)

Over the last six months I've crossed that dark threshold where the desire of building a programming language has become an appealing idea. Terrifyingly, I _might_ actually build this some day. Well, not a language, a programming _system_. The arguments behind its design are long and will be written up some day, but for now I'll just dump the central tenet and core ideas here.

## > Hyper Modularity - write symbols once

### An Illustration

You open your editor and begin to write a function. The first thing you do is write the ([mandatory](https://code.google.com/p/go-wiki/wiki/CodeReviewComments#Do...) [doc comment](http://golang.org/doc/effective_go.html#commentary) describing what it does, and the type signature (yes, static typing). As you write, [your editor suggests](http://npmsearch.com/?q=factorial) lists of functions [published to the web](npmjs.org) (public or private) that match what you're typing. One appears promising, you inspect it. The editor loads the code. If it is exactly what you were going to write. You select it, and you're done.

If no result fits what you want, you continue to write the function implementation. You decompose the problem as much as possible, each time attempting to reuse existing functions. When done, you save it. The editor/compiler/system parses the text, analyzes + compresses the resulting ASG to try to find "the one way" to write the function. This representation is then content addressed, and a module consisting of the compresses representation, the source, and function metadata (doc string, author, version, etc) is published to the [(permanent) web](http://ipfs.io/), for everyone else to use.

### Important Ideas

- exporting a symbol (functions, classes, constants, ...) is the unit of modularity (node)

- system centered around writing _functions_ and writing them once (node)

- stress interfaces, decomposition, abstraction, types (haskell)

- use doc string + function signatures to suggest already published implementations (node, Go)

- content address functions based on compressed representations

- track version history of functions + dependents (in case there are bug fixes, etc). (node)

- if a function has a bug, can crawl the code importing it and notify dependents of bugfix. (node, Go)

- use static analysis to infer version numbers: `.` (semver inspired)

- when importing, you always bind to a version, but can choose to bind to `/` or just ``

- e.g. `factorial = import QmZGhvJiYdp9Q/QmZGhvJiYdp9Q` (though editors can soften the ugly hashes) (node + ipfs)

- all modules (functions) are written and published to the (permanent) web (public or private)

- when importing a function, you import using its content address, and bind it to an explicit local name (`foo = import ` type of thing)

- the registry of all functions is mounted locally and accessible in the filesystem (ipfs style)

- _hyper modular_ means both to "very modular" and "modules are linked and on the web"

Note: this system is not about the language, it is about the machinery and process around producing, publishing, finding, reusing, running, testing, maintaining, auditing, bugfixing, republishing, and understanding code. (It's more about _the process of programming_, than _expressing programs_). This means that the system only expresses constraints on language properties, and might work with modified versions of existing languages.

Re: “The Mess We're In” by Joe Armstrong at Strange Loop [video]

#37
post #22

So, while in general I've enjoyed other things Joe Armstrong has written, I think this talk is pretty discombobulated and doesn't have a coherent narrative. Here are some of the problems Joe posed: - bugs in software like Open Office, Keynote, grunt - code not being commented - computers booting slowly - computers using too much energy - code being written for efficiency rather than readability He talks about distrib…

There are a couple of things that seem incoherent, but maybe I'm missing something:

- Is the only reason why he touches upon the limits of computation and computing efficiency that it secures distributed hash tables and that there is space for improvement in terms of energy consumption, respectively?

- It seems contradicting that he advocates biologically inspired systems and lowering entropy at the same time. Aren't biological systems even messier than current computer systems?

- Wouldn't the 'condenser' very likely require AGI to be of any use for us?

Re: “The Mess We're In” by Joe Armstrong at Strange Loop [video]

#38

Earlier quoted context omitted.

How would you remember the hash? I guess one could have some sort of directory-like system for mapping human-memorable names to hashes...

> How would you remember the hash? I wouldn't. I'd make a symbolic link. Basically the current directory/names structure would be an abstract layer above the hash-based system.

Plan 9 already did that in its file system...

Re: “The Mess We're In” by Joe Armstrong at Strange Loop [video]

#40
post #14

During the last minute of the talk, he says: "Computers are becoming a big environmental threat. They're using more energy than air traffic." Is this actually true? Sure, the average person spends a lot more time on a computer than in a plane, but still it seems crazy that they'd be comparable. Or at least the comparison isn't very relevant, because the Internet can significantly reduce people's need to travel.

"Save the environment, code in C."

There's a lot to be said for keeping things as simple as possible. Although what qualifies as simple varies from application to application.

I was doing some preliminary analysis for a small project recently, and considering various frameworks and tools. Eventually I realized I could implement what was needed using four JSPs producing static html, with a bit of styling in CSS. No AOP, no injection framework, no JavaScript. And no explicit differentiation between device types.

The resulting application will start up quickly -- which is important when running in a PaaS environment -- and should work on any browser, including weird old stuff like Lynx. Less butterfly. More rat.

Post reply on HN