You are viewing archived messages.
Go here to search the history.

Ope 🕰️ 2020-07-18 15:00:21

Thinking about it now, won’t configuring Kubernetes be a good fit for Visual Programming? Definitely sounds better in my head that yaml. Does this already exist? Is there a complication I’m missing?

Kartik Agaram 2020-07-20 03:10:07

I'm curious to hear more about Pulumi. I had a similar question after looking at Hashicorp's Terraform CDK over the weekend: what's the point? It has to emit a static configuration. JSON basically. What does having a general-purpose PL buy you if you can't add a loop or conditional to the output? Pulumi seems the same, going by tutorials like https://www.pulumi.com/docs/tutorials/aws/ec2-webserver. Can someone point me at a more complex scenario that it can handle?

I'd like to create a host, then monitor its health for 60 seconds before creating a second identical host. Does Pulumi or any other infrastructure-as-code allow me to do that? If I'm reading it right, the declarative-code article above has the same issues with Pulumi.

nicolas decoster 2020-07-20 08:08:13

I don't know exactly how Pulimi works, but I have some experience with Terraform (I use it on my last project as a corporate employee).

The point is that generally you define a desired state and ask Terraform to do all it can to create/modify the corresponding infrastructure. And for that it analyzes your code, checks that everything is OK and proposes you a "plan" which describes what Terraform will actually do: create new resource, deleting some others or just modifying some. Terraform then asks you if you want to proceed and then actually do the job. Of course, you can tell to Terraform to apply changes automatically without asking, if you are very confident about you code or don't care to break things, but generally this is desired thing to be asked because of the tricky nature of infrastructure management.

So I guess the scenario "create something, wait a bit, create something else" is not very common and is actually "not in the spirit". But if this use case is really needed, if I recall well there are some trick to allow doing this kind of pause. In the definition of the first resource you add a script that sleep 60 seconds, maybe with some monitoring, and make the second resource depends on this resource, which will make Terraform wait the end of the script before creating the second resource. The paradigm is to define resources and dependencies.

For loops, there is something that allows you to create a set of ressources with a single definition. I used it to generate thousands of VM. In fact you have a series of tools for "loop/conditionals" at the language level, but always in a spirit of "templating".

But after a bit of practicing, I felt sometime that I would have prefer to code things with a general purpose language. For things like getting env vars, managing some files, etc. I guess it is what Pulumi is about, and I am very curious about it.

Ionuț G. Stan 2020-07-20 08:37:06

Pulumi is very much like Terraform, it actually uses the Terraform providers behind the scenes (Pulumi does not generate files, as AWS CDK does). The only major difference is that you declare that desired state using an API of a general purpose language. But otherwise, Pulumi does exactly what @nicolas decoster said Terraform does — keeping that desired state, creating a plan, previewing it, applying it, etc.

Regarding Kartik Agaram's problem, I think the solution in Pulumi would be similar to the one in Terrraform. Define a custom resource that does nothing than just block execution for an amount of time and then to the health check, then use this resource as a dependency of the second host you want to create.

Going back to the original question of whether it would make sense to have a visual editor for k8s config files, I don't think it would help that much. The problem with YAML is not that it's YAML, it's that it offers no means composition and abstraction. With only a visual editor that all it does is to offer affordances for YAML concepts, things will be the same. But, if that visual editors starts adding some PL concepts, such as variables and functions, then it can be useful, but at this point I think it's no longer about YAML or k8s, it's just about structural editors in general.

Ricardo A. Medina 2020-07-20 04:32:50

Probably asked before but, what is your go-to tool for the implementation of a language prototype in terms of parsing, compiling, etc? Language, library, generator...?

Chet Corcos 2020-07-20 04:39:10

For me, prototype = typescript. Parsimmon is a great parsing library to start with. Or if you feel fancy you can check out ohm which is a compiler-compiler.

Chet Corcos 2020-07-20 04:40:48

Meta 2 is a really cool paper about compiler-compilers btw. Here’s a nice overview: https://youtu.be/L1rwVBLHGiU

Emmanuel Oga 2020-07-20 05:23:17

I think I'll try instaparse for my next experiment https://github.com/Engelberg/instaparse and https://github.com/noprompt/meander to manipulate the parse tree

Engelberg/instaparse

Emmanuel Oga 2020-07-20 05:24:43

If you are not sure about clojure for language implementation this talk might be interesting for you: https://www.youtube.com/watch?v=t8usj1fN9rs (since strictly typed languages are often considered "the best" for compiler work)

Chris Maughan 2020-07-20 07:05:08

I’ve found this library useful in the past, especially for quick parsing tasks. https://github.com/orangeduck/mpc

Last time I did a language, I rolled my own tokenizer and lexer. I find things easier to understand that way. I know that Jonathan Blow’s Jai language uses the same hand rolled approach.

orangeduck/mpc

Chris Maughan 2020-07-20 07:18:29

It has the nice feature of being able to just pass a grammar to the library, and it builds the parser combinators. Very quick and easy.

Jack Rusher 2020-07-20 07:33:31

I find the question a bit underspecified, as which tools one might choose will hinge on both the specifics of what one is building and a variety of personal preferences. In my case, I like languages/environments that allow me to develop new semantics from within them, only worrying about adding syntactic affordances later. If one prefers that approach, it's hard to beat https://racket-lang.org

Mariano Guerra 2020-07-20 08:38:01

I use the compiler tools from erlang, leex, yecc, absform and the compiler module

Ian Rumac 2020-07-20 09:16:11

I just use kotlin and wrote my own parser, the language feels so nice and expressive that I just keep coming back to it for everything.

Basically just find special tokens, create a index of [position, token], then recursively parse it breadth first. tho it isn’t a complete “language”, but a DSL language so it’s easier than full on lang :)

Ian Rumac 2020-07-20 09:18:17

and weird, nobody mentioned ANTLR yet

Doug Moen 2020-07-20 17:15:41

I hand rolled the lexer and parser for Curv in C++, because I didn't want to fight tool limitations in defining the syntax or implementing error recovery. In retrospect,

  • A regex-based scanner generator like re2c would have made the scanner easier to write.
  • My hand-written recursive descent parser was easy to write and continues to be easy to modify. No regrets.
  • After hanging out in FoC for a year, I have IDE envy. To properly implement completions and hints, I need an incremental parser. So maybe I should switch to the tree-sitter parser generator? https://github.com/tree-sitter/tree-sitter
  • For me, the hard part is the back end, not the parser/lexical analyser. What are the libraries/DSLs for semantic analysis, optimization and code generation?
Christopher Galtenberg 🕰️ 2020-07-18 14:57:41

🐦 vilterp: Finally wrote up a project I've been working on for a while:

Codebase as Database: Turning the IDE Inside Out with Datalog https://petevilter.me/post/datalog-typechecking/

This is a subject that's long fascinated me, and quarantine finally gave me the focus to explore it. Enjoy!

Chet Corcos 2020-07-20 05:34:46

Whoa. This is really cool! Thanks Garth Goldwater!

Chet Corcos 2020-07-20 05:36:01

I’ve been working in a project involving datalog as a durable database with p2p collaboration and sync.

Ionuț G. Stan 2020-07-20 09:33:42

I've read the article last night, awesome stuff there. It's been a while since I also started thinking that codebase should be treated as a portmanteau of code + database, so this article was right up my alley. However, it never occurred to me that Datalog could be used for the database, even though I played a bit with Eve. I always thought of using a graph database, such as Neo4j.

@Pete Vilter did you follow any resource for your Datalog implementation? Do you know of any tutorial-like resource that shows how to do that? I'm pretty familiar with unification I'd say, since I wrote a few Hindley-Milner type inference implementations, but I haven't yet come across a good exposition of how to write a Datalog interpreter.

Pete Vilter 2020-07-20 18:31:21

@Ionuț G. Stan the main guide I had is a simple interpreter that a friend wrote, which isn’t open source. So, really the best I can offer up is my own implementation (simpleEvaluate.ts in the repo; not guaranteed to be bug free 😛) or these miniKanren implementations (a minimal logic programming language): http://minikanren.org/

Ionuț G. Stan 2020-07-21 19:09:11

Thanks, @Pete Vilter. I did a bit of research last night and I found some other resources. Some people, though, make a pretty important distinction between Datalog and Prolog. I'm yet to understand the differences, but it will be fun.

Pete Vilter 2020-07-21 19:13:46

to be honest, I’m not completely clear on exactly what differentiates them — just that prolog is somehow more powerful / less decidable. there were some comments on my posts’s HN thread about this: https://news.ycombinator.com/item?id=23888656 (a bit over my head)

Ionuț G. Stan 2020-07-21 20:06:53

Some good links and explanations in that HN thread, thanks.

Chet Corcos 2020-07-22 00:22:22

I've found that the term "datalog" is often used to represent an idea more so than a concrete implementation detail whereas Prolog is an actual syntax+implementation. But in my experience, here are some differences:

  • Datalog tends to refer indexed 3-tuples, whereas prolog (and prepositional logic) deals with arbitrary N-tuples which tend to be prohibitively expensive to index.
  • Prolog allows for arbitrary recursion (I think) whereas Datalog tends to guarantee polynomial-time execution. <- this might be wrong
  • Datalog typically refers to a database where data is persisted whereas Prolog is programming language.
Cole Lawrence 2020-07-22 01:07:23

On the topic of Datalog implementations, I found the write-up by Frank McSherry really interesting. He describes the implementation of DataFrog (a bare-bones Rust embedded "datalog" impl) https://github.com/frankmcsherry/blog/blob/master/posts/2018-05-19.md

It took me a couple sessions to encode the ideas, but it is still fascinating! We'll likely be using DataFrog as the basis of many parts of our type system, too!

Xandor Schiefer 🕰️ 2020-07-19 07:40:10

🐦 Shreya Shankar: Got my invite to the @OpenAI GPT-3 API from @gdb. I actually think it deserves more hype than it’s getting, but not necessarily for the magical reasons Twitter touts. Why? My quick thoughts and impressions: (1/11)

Ian Rumac 2020-07-20 09:11:16

Are humans any different than machines?

We are. Our “model” does wetware based optimisation, morphing and most importantly localisation, which is something machines cant do while in hardware mode. Yeah, you can rearrange it in memory, but memory is 2D and that means huge overhead we don’t have. You need a multidimensional graph and mocking that in 2D is annoying as hell. And we are geared towards survival and reproduction, so we have “emotions” that reinforce our models

Can we just continue to make better models and achieve understanding or consciousness or intelligence?

Not this way. OpenAI has other stuff that is more geared toward better AI and intelligence. If we just continue to make better models but keep them shallow like this, only thing we will understand that intelligence isn’t pattern recognition.

Stefan Lesser 2020-07-20 09:58:55

@Ian Rumac I'd love to read some material about what you describe as "wetware based optimization, morphing and localization" — do you have any pointers to sources that go into depth on these?

Ian Rumac 2020-07-20 10:15:15

Let me look it up, I remember a paper last year that was about how brain uses spatial localisation to optimise (kinda annoying now Neural networks are muddying up my search results 😂)

By “optimization” I mean about constant retraining and optimisation our brains go through.

Our “internal optimization agent” sees we have a graph G(n) of n nodes and a graph G(m) of m nodes. They get combined into a graph of k=(<m*n) nodes, while maybe not retaining the absolute combined precision, but probably having a modulator which is extracted as a separate graph.

For example, Gn is trained for a fluid (oil) and Gm is trained for oil. Then, they are merged/splitted into a model that recognizes “fluid” pattern and a “viscosity” pattern (our brains are constantly looking for patterns. constantly. they are our primary source of optimization, i believe that this skill is critical to our brains evolution and that that is why geometry is important in our brains arrangements). Let’s say you input lava, it would be recognized by both models, one recognizing it’s a fluid and the behaviors of fluid and one that can tell you the viscosity of it. Hope I explained it OK, will try to find papers, they do it better probs (i mean, this is my conclusion from reading multiple of papers, so its dot connecting conclusion from multiple sources).

Ian Rumac 2020-07-20 11:01:20

(https://gtr.ukri.org/projects?ref=MR%2FL009013%2F1#/tabOverview here is one that dabbed into that, but can’t find the one I wanted, an article is at https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4598639/ that is a nice intro)

Ian Rumac 2020-07-20 11:11:52

Also, the more I read about GPT-3 it seems like:

“Hey, remember that car we invented? Well, after making the engine a 1000 times bigger we get a lot more horsepower out of it!”

Stefan Lesser 2020-07-20 12:59:32

@Ian Rumac Thanks for digging this up; looks promising. I have the same issue, often running into neural network stuff when searching for brain research.

I’m specifically interested in categorization and how semantics manifest in our brains, schemas and frames, essentially the parts between the biochemistry of the brain and the philosophy of thought and reasoning — here’s a good overview from Lakoff: https://youtu.be/WuUnMCq-ARQ

If you or anyone else comes across research in that area, please send it my way.

Ionuț G. Stan 2020-07-20 13:02:47

Reading the conversation in this thread kinda makes me wish this Slack also had a philosophy channel 🙂

Ian Rumac 2020-07-20 13:40:03

Stefan Lesser oooh interesting video, will check it out later when I have time! tldr as far as I see its about research that tries to find primitive model our brain recognizes and which are used as building blocks to build more advanced models by having a few types of interactions between them?

Stefan Lesser 2020-07-20 14:21:53

@Ian Rumac Yes, that describes the gist of it. It’s focused on language, which is only one of many parts of thinking — arguably quite an important one. Helps to be familiar with the work of George Lakoff and Mark Johnson on metaphorical structuring. There’ll be plenty of pointers in the lecture.

Ian Rumac 2020-07-20 14:22:43

No clue who any of those people are but lecture sounds awesome, tnx for the link 👍

Alex Miller 2020-07-20 15:47:47

https://medium.com/the-long-now-foundation/six-ways-to-think-long-term-da373b3377a4

prompt: how does this frame affect your thoughts about the future of programming?

Ian Rumac 2020-07-20 17:27:35

Re: affecting programming in this frame - less hype chasing, more deep knowledge, research and standardisation. The ego stance of “me and my ass” is affecting programming world a lot, especially through middle management.

re: article - it’s surprisingly bad, 99 cent philosophy. I wrote a lenghty comment on HN about it, but I don’t think this article deserves even a minute more of my time considering how badly thought out it is. https://news.ycombinator.com/item?id=23899952

Kartik Agaram 2020-07-22 20:30:02

I quite liked this article. It's stayed with me for the last couple of days.

@Ian Rumac A few years ago I may have felt the same way, that it was just empty words and not very actionable. But I have a little more of a sense lately of how progress happens in the softer aspects of human endeavor, where the problems are harder and incremental progress is harder to measure. And yet, progress can happen if a new way of adding one more level of structure (such as decomposing "long-term thinking" into 6 pieces) can help people talk about things in just a little bit more detail, and influence how we make decisions. I think this dynamic may be a big part of why people tend to over-estimate what they can do in a month but under-estimate what they can do in a decade. Imperfections are easy to see, and it's easy to forget that progress can compound.

Even for past me, though, there's one part that's unambiguously great: the way it lays out possible teleological goals of human existence:

Just section 6 is worth the time spent on this article, IMO.

Ray Imber 2020-07-22 21:01:03

That next ten billion years link is a hell of a story... extremely depressing and yet oddly beautiful. It gives me "https://www.planetary.org/explore/space-topics/earth/pale-blue-dot.html" vibes. (It's always worth re-reading Carl Sagan every once and a while imo 😜 )

Kartik Agaram 2020-07-22 22:26:39

This linked article is also quite thought-provoking with its radical new visualization of a city's usage and distribution patterns.

https://www.theguardian.com/world/2020/apr/08/amsterdam-doughnut-model-mend-post-coronavirus-economy

Xandor Schiefer 🕰️ 2020-07-19 06:00:54

https://citrine-lang.org/ seems like this'll lead to an interesting discussion.

Not sure about

Citrine does not support comments, forcing authors to write self-documenting code. 
Gregg Tavares 2020-07-21 04:10:00

I'd be curious if writing code in your native language is a net plus or net minus. Plus, use words you like and are used to. Minus, 70-90% of the world can't look at your code. If your code looks like this

関数 距離(頂点ー、頂点二){

 返す 平方根(足す(二乗(頂点ー)二乗(頂点二)))

}

Only people in your own language can read it. People not in that language can't even type it . If you ask for help you can only get that help from a much smaller set of people.

Also what do you do about libraries? Do you need a localized version of every library just so you can keep everything in your language?

Of course I say this as a "privileged" English speaker. I have no idea what I would feel like using all these languages that are generally based in English if I wasn't fluent in English.

Also, I don't know about China or Korea but as an example when non-ASCII domain names became possible lots of people in Japan though kanji based domain names would take off. They didn't though. It's been 15+ years since it was possible but almost no companies use them.

Chris Knott 2020-07-21 08:35:00

I recently finished Exhalation, a collection of short stories by Ted Chiang. This one (The Truth of Fact, The Truth of Feeling), which interleaves a near-future journalist, with a colonial era missionary and tribe, I found very insightful regarding the effects that thinking tools have on thinking - http://web.archive.org/web/20131204053806/http://subterraneanpress.com/magazine/fall_2013/the_truth_of_fact_the_truth_of_feeling_by_ted_chiang

Chris Knott 2020-07-21 08:40:10

When I was at university I studied maths, and the faculty was a bit out of town, so when we had lectures it took about 30mins to walk back. We (very!) occasionally discussed the material on the way back, but found that it was almost impossible to even talk about maths without a pen and paper. I remember thinking that a mathematician isn't really a human. No human has ever demonstrated any real ability for maths. A mathematician is human-pen-paper system, like a cyborg.

S.M Mukarram Nainar 2020-07-21 12:25:32

Counterpoint: supposedly Euler did math even after he went blind

Chris Knott 2020-07-21 12:59:20

🤔 hmm yes a good point... Although I wonder if something like this might have been going on https://youtu.be/6m6s-ulE6LY (watch to the end)

Chris Knott 2020-07-21 13:00:26

That is, it's difficult to know if the augmentary effects had already happened and been internalised

Chris Knott 2020-07-21 13:00:39

Also, you know, it's Euler 😂

Ope 2020-07-21 15:01:32

That’s interesting Chris Knott cos some code I write is like that I need pen and paper.

Kartik Agaram 2020-07-22 14:39:43

This was as fantastic a short story as I expect Ted Chiang to always be. Thank you Chris Knott! Hadn't seen it before.

Chris Knott 2020-07-22 14:51:39

I liked the ideas about how using a tool heavily actually affects your brain. I am sure my brain has adapted massively to having a computer at my fingertips all the time. I don't remember stuff in full any more, what I do is remember a compressed link/pointer, that I will know I will be able to use to recover the information - via the internet - if necessary.

Not deliberately, I think it's a kind of optimisation my brain's adopted. I find it very, very frustrating sometimes when I can half remember something

Kartik Agaram 2020-07-22 15:08:07

My mind is blown by the idea that the transition from oral culture to written culture is an example of a broader phenomenon where the shift in quantity of memory turns into a qualitative change.

Chris Knott 2020-07-22 15:19:13

Here are TC's notes from the back of Exhalation

Chris Knott 2020-07-22 15:20:27

Perhaps you would enjoy Orality and Literacy (I don't know anything about it other than this mention!)

Chris Knott 2020-07-22 16:06:57

But the illumination does not come easily. Understanding the relations of orality and literacy and the implications of the relations is not a matter of instant psychohistory or instant phenomenology. It calls for wide, even vast, learning, painstaking thought and careful statement. Not only are the issues deep and complex, but they also engage our own biases. > We—readers of books such as this—are so literate that it is very difficult for us to conceive of an oral universe of communication or thought except as a variant of a literate universe.>

I think people have talked before about how this must apply to us, as programmers. This is why I am sure a key tool in FoC will be studying the experience of highly intelligent, computer illiterate people. How easily can, for example, Ruth Bader Ginsburg learn Python? What are her fail modes? I would be fascinated to find out. (Apologies to RBG if she's actually a computer wiz!).

Chris Knott 2020-07-22 16:10:01

How about this - could a remote tribesperson from a oral culture be taught Python, skipping normal written language? What about a completely visual PL?

Doug Moen 2020-07-22 17:29:02

Ivan illich wrote "ABC: the alphabetization of the popular mind", on the transition from orality to literacy. I found it insightful.

S.M Mukarram Nainar 2020-07-22 19:09:06

Orality and literacy is a popular topic—Neil Postman talks about it as well, across all his work

Kartik Agaram 🕰️ 2020-07-15 00:24:31

If I could pin one thread from the history of this Slack, it would be the one where we discussed Jonathan Blow's https://www.youtube.com/watch?v=pW-SOdj4Kkk

Today I ran into an amazing article that adds nuance, historical context (literature surveys) and concrete analysis to the problem.

https://palladiummag.com/2020/07/10/how-late-zhou-china-reverse-engineered-a-civilization

Andreas S. 2020-07-21 10:56:43

Nice! I always love it when we as programmers can acutally do some hacking to circumvent artifical problems of monopolies 🙂

Dalton Banks 2020-07-21 13:27:15

Is this excerpt a draft or is it up somewhere? Can’t wait to hear more about what you’re working on!

[July 7th, 2020 11:48 AM] ibdknox: hah, I was writing about just that yesterday: &gt; In both blocks and nodes editors, the interaction loop boils down to summoning a node and then connecting, or placing, it into context. This ends up being a very verb-centric model where you get the + node/block and then wire it up. This is like painting off to the side, moving it to the correct location, and then blending it into the rest of the painting. While there are times where that flow is useful, it’s much less direct than just painting in place and requires tedious actions inserted in the middle. Going from two steps to three for every action in a system adds up quickly and makes even the most basic operations feel heavy in these editors. Rather than operating in context, you’re always working off to the side and then rewiring things to make them work.

Dalton Banks 2020-07-21 15:51:11

(Don’t know if sharing to #general notifies the recipient, so I’m adding an Chris Granger for good measure)

Chris Granger 2020-07-21 16:45:13

This was from an internal thing I was writing just to layout some of our thoughts. 🙂

Chris Granger 2020-07-21 16:45:48

In particular, I was contrasting the "summon and place" style of interaction that nodes/blocks have vs the "locate and act" that you have with text:

Chris Granger 2020-07-21 16:45:59

Text on the other hand works just like normal painting. You locate the area where you want to do something and then act directly in that area. This places more emphasis on the result rather than the change itself. Afterall, the > +> node isn’t what I care about, it’s the actual behavior that we end up with that matters. This fits more of a noun/subject-first way of thinking where you first find what you want to work on and then act directly on that thing. 

Visual density aside, I believe the difference in interaction style is a big part of what holds these other types of editors back. In most situations, locate + act is a much more contextual and expressive way to work. It’d require significant advantages to offset all the awkwardness and busy work that comes with painting off to the side.

Chris Granger 2020-07-21 16:49:34

We're trying to take a bit of a different approach this time and aren't saying too much publicly until the explorations have settled down a bit. We'd like to already be some level of "successful" first instead of showing lots of things that just end up being cool demos rather than a fully fledged system.

Chris Granger 2020-07-21 16:57:56

The good news is that after evaluating quite a lot of stuff I think we're ready to put a stake in the ground and move forward. We've learned and created a lot since Eve and I'm pretty excited about where things are headed. 🙂

Dalton Banks 2020-07-21 19:21:08

Exciting to hear— can’t wait to see where it goes. Thanks for the extra context!

I was intrigued by your comment from a while back: “the language I designed based on everything we’d learned through Eve was dataflow with state machines embedded in it, but it turns out if you flip that the other way around you get something pretty neat.” Curious if that had legs, or if the stake landed somewhere else? (Of course if you’d rather not say yet I respect that.)

Chris Granger 2020-07-21 19:29:19

still very positive on both variants, though where we're landing is a bit muddier on which one is the "embedded" one

Chris Granger 2020-07-21 19:29:55

in some sense they serve different purposes. I've come to think of hierarchical statecharts as more a form of structure rather than as actual behavior

Chris Granger 2020-07-21 19:32:26

one thing that I really took from Eve was the idea that what we really need is a system that somehow mixes declarative and imperative expression seamlessly

Chris Granger 2020-07-21 19:32:52

interestingly dataflow is kind of both, same with statemachines

Chris Granger 2020-07-21 19:33:17

but I think they address pretty different aspects of the design space

Chris Granger 2020-07-21 19:34:42

StateCharts with a couple of modifications are a pretty good way of directly describing structure and certain kinds of stateful processes. Dataflow is quite a bit better at describing computation, but at the cost of being a pretty poor structural representation.

Chris Granger 2020-07-21 19:34:54

So the question is which do you try to bring to the foreground?

Chris Granger 2020-07-21 19:36:51

Regardless of the choice, the idea of states (in the statemachine sense) being a core primitive of the system seems to be a really good one and makes the expression of many programs significantly better

Chris Granger 2020-07-21 19:40:31

where "better" = clearer to understand, easier to write, and easier to confidently modify from our experiences.

Chris Granger 2020-07-21 19:45:19

it'll be interesting to see to what degree our editing workflow will focus on states/dataflow vs having them melt away into the background. I don't really have a good sense for that yet. 🙂

Dalton Banks 2020-07-21 19:45:32

Sweet. Sounds like you’re really onto something. State machines are a cool “tool for thought” in that they can actually help an inexperienced programmer walk through edge cases and design more robust programs. I’ve been kind of barking up a similar tree for an internal project (combining state machines and dataflow), and finding the dividing line sometimes confusing. In my thinking right now it’s something like control flow vs. data flow. The weird thing is that HSM has a concept of “state machines all the way down”, but data flow does too, and you can kind of mix and match as you go down (but it’s not clear to me yet how useful this is in practice)

Chris Granger 2020-07-21 19:45:55

yeah

Chris Granger 2020-07-21 19:46:24

simulink is an example that focused on dataflow with HSMs embedded to good effect I think

Chris Granger 2020-07-21 19:47:20

one interesting thing is that we found that in dataflow you still want to represent control flow meaningfully within the same space.

Chris Granger 2020-07-21 19:47:58

The latest work in VPLs for game engines have also found that and started doing vertical control flow, horizontal data flow, which I think is really effective

Chris Granger 2020-07-21 19:48:23

it lets you read the "spine" to get the main idea of what's going on and then look off to the left for the details if you need to

Chris Granger 2020-07-21 19:49:37

a bunch of our explorations centered around digging into that further and trying to find nice ways to address some of the remaining downsides of the node/wire paradigm

Dalton Banks 2020-07-21 19:49:50

Nice, I’ve had the same vertical/horizontal thought but didn’t realize that about game engine VPLs. Most of my prior art is Labview plus a bunch of demos I’ve seen here. I’ve used matlab but never simulink, I’ll take a look. When you say HSM are good for structure, one way I’m thinking of them is as a sensible way to perform dynamic switching of the links between dataflow nodes. Is that what you mean or something different?

Chris Granger 2020-07-21 19:51:31

yeah, that's a way of thinking about their purpose from a behavioral structure standpoint. You also need the structure of the entities themselves, which we found can map pretty nicely to states as well if you squint

Chris Granger 2020-07-21 19:52:56

in a turtles all the way down sense, you tend to have entities and states interleaved throughout the hierarchy

Chris Granger 2020-07-21 19:53:08

so we just made everything a state

Chris Granger 2020-07-21 19:53:13

and explored that

Chris Granger 2020-07-21 19:53:25

very cool model and lots of goodness to be had there

Dalton Banks 2020-07-21 19:55:57

Love it. I resonate with everything you’re saying, but I think your picture on implementation is much clearer than mine. Hopefully we can just swap out my experiment with Eve++ once it’s ready for primetime 😀

Chris Granger 2020-07-21 20:02:46

🙂

Chris Knott 2020-07-21 20:19:23

Did you explore and abandon any areas that you think are dead ends?

Chris Granger 2020-07-21 20:23:15

it depends on how you define dead end. I think most of the things we looked at could/have found success in certain domains

Chris Granger 2020-07-21 20:24:34

so at some level it depends on what your goals are

Chris Granger 2020-07-21 20:27:03

I think the "summon and place" workflow is a bit of a dead end, but there are ways to address it

Chris Granger 2020-07-21 20:27:27

e.g. having composite "formula" nodes and such

Chris Granger 2020-07-21 20:29:11

the conclusion we arrive at in the document I was quoting before more or less boils down to the idea that making meaningful progress requires finding combinations of things that have largely been considered dichotomous

Chris Granger 2020-07-21 20:30:49

declarative vs imperative, text vs graphical, implicit vs explicit..

Chris Granger 2020-07-21 20:31:28

there's a ton more to explore down any one of these, but I think choosing one and assuming it'll be enough likely is a dead end

Chris Granger 2020-07-21 20:34:02

If we step out of the domain of computers, there's more than enough evidence to start to see what the pros and cons of each end of the spectrum are

Chris Granger 2020-07-21 20:35:14

unless you can find a way to offset those cons, you'll end up with something that is a difference in degree rather than a difference in kind

Chris Knott 2020-07-21 20:50:29

I remember a while ago I think you said how something you realised with Eve was it was too hard to go straight for new people/expanding the market, and you need to get people who are coding already on board to be sustainable

Chris Knott 2020-07-21 20:50:42

(I might have misquoted that a bit)

Chris Knott 2020-07-21 20:51:03

Is that still how this new project is going?

Chris Granger 2020-07-21 20:52:34

we kind of always knew that going after end-users requires first getting more technical folks on board, the more recent belief is that I've become far less convinced that going after end-users (unless for pedagogical purposes) is the better path

Chris Granger 2020-07-21 20:53:44

if we want to frame things in terms of global utility, it's likely the case that over a shortish timeframe (< 20 years) you'll gain more going after people who are already aware they need to program

Chris Granger 2020-07-21 20:54:40

the new project is motivated by the question "if we only care about making Josh and I superhuman, what would that take and how far could we get?"

Chris Granger 2020-07-21 20:56:13

I think we've implicitly expanded that to "any sufficiently motivated person who already programs or wants to," but I think that's a reasonable place to start

Chris Granger 2020-07-21 20:57:29

There's a difference between building tools that will accelerate people to crazy heights and convincing a group of folks that flying is interesting to begin with.

Dalton Banks 2020-07-21 20:59:48

Sounds like a fantastic goal. Curious if distributed systems and realtime applications are in scope. Same with graphics.

Chris Granger 2020-07-21 21:00:00

Yes, yes, and yes! 😄

Dalton Banks 2020-07-21 21:00:49

Amazing 😄

Chris Granger 2020-07-21 21:01:19

Actually, depends on what you mean by realtime applications

Chris Granger 2020-07-21 21:01:57

in principle it would be fast enough to do hard realtime stuff, but I'm not particularly worried about synchronized clocks and hard budget cutoffs

Dalton Banks 2020-07-21 21:02:22

Lol me neither. I’m thinking more IoT and games. Though robotics would be cool too

Chris Granger 2020-07-21 21:02:44

ah yeah, those would be fine. A flight controller? probably not?

Chris Granger 2020-07-21 21:03:00

it could ostensibly be extended in that direction if you want I guess

Dalton Banks 2020-07-21 21:03:07

But a drone remote control 👍

Chris Granger 2020-07-21 21:03:19

yep

Dalton Banks 2020-07-21 21:03:54

How far are you thinking on the graphics side?

Chris Granger 2020-07-21 21:04:17

all the way to shaders

Chris Granger 2020-07-21 21:04:52

one of our tests is if we can build a high fidelity game with it

Dalton Banks 2020-07-21 21:05:15

I’m gonna cry

Dalton Banks 2020-07-21 21:05:18

Lol

Dalton Banks 2020-07-21 21:05:30

I’ve been wanting something like this for a long time

Chris Granger 2020-07-21 21:05:46

haha, well you don't know what it is yet so don't get too excited 😉

Chris Granger 2020-07-21 21:06:05

we're taking some interesting directions that I suspect will be a bit controversial

Chris Granger 2020-07-21 21:06:36

but we have a mounting list of evidence that's giving me more and more confidence

Dalton Banks 2020-07-21 21:07:07

Between eve, the team, and the stated goals I feel like I have enough to get excited about 😉 but of course will suspend judgment. Any nuggets about the interesting directions?

Chris Granger 2020-07-21 21:08:28

a very high performance system that removes almost all the power you would have in a normal systems programming language is one example

Chris Granger 2020-07-21 21:08:43

you have no control of layout

Chris Granger 2020-07-21 21:09:23

because of that decision though, we can do utterly insane stuff

Chris Granger 2020-07-21 21:10:28

e.g. your whole program is laid out to optimize cache coherency based on an analysis of the access patterns actually present in the code

Dalton Banks 2020-07-21 21:11:46

🤯

Chris Granger 2020-07-21 21:12:06

I was matching hand-written, cached optimized rust - but our code looks like a domain description rather than the horrid stuff you normally do.

Dalton Banks 2020-07-21 21:12:07

Ok, I love both of those decisions

Chris Granger 2020-07-21 21:12:23

it was running in JS 😛

Chris Granger 2020-07-21 21:13:05

another side effect of that choice is that you can just grab a set of things and say "these live on the GPU"

Chris Granger 2020-07-21 21:13:36

to your distributed systems question, you can also say "these live in this postgres database" or "these live on a server"

Chris Granger 2020-07-21 21:14:31

We talked about the "world-scale computer" that we wanted to create with Eve. A big part of what I've been trying to figure out since is how we could actually have it.

Chris Granger 2020-07-21 21:18:51

I don't intend to run into performance issues again. 🙂

Dalton Banks 2020-07-21 21:19:08

This all sounds so right, for 99% of use cases. Any rough feeling on a beta at this point? 1-2 years? I’m sure a lot will change as you go

Chris Granger 2020-07-21 21:20:27

not sure when we expand it out, but I'm expecting to show at least this crowd stuff in the next couple of months

Dalton Banks 2020-07-21 21:23:08

Awesome. Well thanks for sharing some tidbits, and I’ll be keeping an eye out

Chris Granger 2020-07-21 21:24:23

👍 😄

Kartik Agaram 2020-07-22 14:37:43

The idea of looking at control flow first really resonates. On my project I trace all events and I've often found myself doing a blunt grep label trace as the first step of debugging a problem.

Harry Brundage 🕰️ 2020-07-06 18:36:29

Is anyone aware of a good meta-analysis on why node and link based programming has only found limited success? lookin' to learn more

Aleks Litynski 2020-07-21 15:17:20

When I'm programming, I usually think about code in terms of both control flow and data flow. Most dataflow systems seem to only have one type of wire. Are there systems with different wires to represent different flows through the graph (eg blue wire for data flow, red wire for control flow)?

Ivan Reese 2020-07-21 15:25:45

Max/MSP and Pure Data have one kind of wire for messages (discrete data), and another for audio signals ("continuous" data — not truly continuous, but discrete samples of a continuous function at a sufficiently high sampling rate).

Many visual programming tools will assign a type to their ports, and whenever a wire is connected to one such port, it can only be connected to other ports with a compatible type.

In my project Hest, wires are used both to convey data (and there may be different kinds of wire, with different appearance and properties and modes of interaction based on the type of data being conveyed), and to exist as "edges" in the sense of 2d vector / 3d graphics, so in that way they're both an aspect of the code and data literal.

Aria Minaei 2020-07-21 15:33:53

I just came across this https://www.semilattice.xyz/. It's an interesting take on the idea of notes, knowledge management, exploration, and, well, Memex.

Especially interesting for me is the fact that it acknowledges the benefits of linear encoding of information in tools like Roam Research, yet rejects it as insufficient as it excludes "other mentalities."

Another highlight is that it asks browsers to work within the information blocks, rather than in parallel to them. A nice example of composable tools over integrated apps.

Christopher Galtenberg 2020-07-21 16:04:24

Gorgeous

Chris Knott 2020-07-21 16:12:36

It seems quite similar to Capstone from ink & switch lab https://www.inkandswitch.com/capstone-manuscript.html

Aria Minaei 2020-07-21 16:26:46

It does. It mentions the project from Ink&Switch as inspiration.

Ope 2020-07-21 17:57:14

How can I download Muse? Can’t seem to find it on the App Store. Love love things like this. Also had a thought yesterday that perhaps coding and even innovations like visual programming are held back by the keyboard mouse input paradigm.

How different would code be written if it could be written with a pen?

I think this point was brought up when I was reading why APL failed - no standard characters. Free form writing with a pen might make that be less of a headache.

Ope 2020-07-21 17:58:30

Chris Knott thanks for the links!

Aria Minaei 2020-07-21 19:01:47

How different would code be written if it could be written with a pen?GRaIL comes to mind https://www.youtube.com/watch?v=QQhVQ1UG6aM

Ope 2020-07-21 19:10:57

That’s pretty cool. Wonder it hasn’t been revisited and isn’t more mainstream

Chris Knott 2020-07-21 19:11:13

Does anyone have a Remarkable tablet? There is a fairly active dev community for it I think

Garth Goldwater 2020-07-22 02:24:55

Ope https://museapp.com/ looks like you sign up via email on their website

🔗 Muse

Ryan King 2020-07-22 03:05:25

Yes, Muse'll just email you an invite, I tried it last month. It's more just a zoomable "canvas tree" whereas I'd personally like to see more backlinky stuff as in the Semilattice demo (🤞 it gets built). Muse is still super cool and will probably be my goto once they polish the UI and implement handrwiting search (it's the only reason I can find anything in GoodNotes).

Ope 2020-07-21 18:23:54
Ivan Reese 2020-07-21 18:42:07

Came here to post this, but you beat me to it! Nice.

The tl;dr is that they're running a contest with a $10k prize, where you design and submit a novel programming language (ideally an unconventional one).

They're also looking for judges, if you are interested in that. Current judges are some names you might recognize: Mary Rose Cook and Jordan Walke.

Tim Plotnikov 2020-07-21 19:23:43

It would be interesting to hear what a novel language can look like!

New lisp dialect (not that novel but still) comes to my mind, maybe prolog-like or something more crazy 😁

I guess they talk about textual PLs only, right?

Ivan Reese 2020-07-21 19:42:19

Yeah, I think it has to be a textual language. But I imagine you could make a spatial language like https://github.com/batman-nair/IRCIS

Ivan Reese 2020-07-21 19:42:42

(Though maybe not with animated execution)

Tim Plotnikov 2020-07-21 20:17:16

Wow, that’s impressive!

Ope 2020-07-21 20:27:22

Maybe someone revisits APL

Shalabh Chaturvedi 2020-07-21 21:24:16

Replit ceo says it can be graphical? not sure if I read the tweet correctly: https://twitter.com/amasad/status/1285667493034565637

🐦 Amjad Masad: @jonathoda Good point 🤔

You can totally make a web or graphics thing tho, @replit supports both graphics via VNC and of course HTML.

Shalabh Chaturvedi 2020-07-21 21:29:28

Exciting to see this jam, either way.

Ivan Reese 2020-07-22 01:27:56

Displaying graphics is one thing. Making a nice GUI for graphical programming is a waaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Ivan Reese 2020-07-22 01:28:01

aaaaaaaaaaaaaaaa

Ivan Reese 2020-07-22 01:28:08

[trim]

Ivan Reese 2020-07-22 01:28:16

aaaaaaay different thing.

Steve Dekorte 2020-07-22 15:33:54

Is parsing all it helps with?

Ivan Reese 2020-07-22 15:37:49

Steve Dekorte Not sure what you mean by "it"

Ray Imber 2020-07-22 17:39:09

Ope If you make an APL, the first thing it needs to do is 3D print the special keyboard you will need to use it 🤣 (Sorry, I couldn't resist making an APL joke. Those APL keyboards http://ageinghacker.net/hacks/apl-keyboard/apl-keyboard-1.jpg)

Ope 2020-07-22 17:42:50

I was actually thinking more like using OCR instead to recognise custom characters. So you write it 🤓.

Ray Imber 2020-07-22 17:45:53

Actually, thinking about that idea more seriously, we have much better auto-complete these days (shout out to tab9 again lol). APL with a decent autocomplete widget might be interesting...

yoshiki 2020-07-22 23:57:21

Corporate hackathons are more about benefiting the corporation with publicity and hype, which can only be created by the labor of a critical mass of entrants. But despite the incredible value of this publicity - and the allure of glamorous prizes- virtually none of the entrants get compensated.

In fact, it is an equation sorely in the corporations favor: the more entrants, the more hype, but since the prize pool is fixed, the cost never goes up.

I would recommend anyone considering joining any hackathon to think hard about the power dynamics at play, and the material value of your time spent participating, especially when a hackathon requires you to use the corporation's products(consider particularly that for a public publishing platform, the more usage a product gets the larger its user conversion pipeline becomes). This isn't a novel observation - much has been written about concerning the exploitative nature of hackathons.

And if as a potential participant you want the good-natured competition and dedicated time for hacking on a cool idea that a hackathon affords, it's always possible to organize your own jam, centered around and for the community, without any ulterior motives at play(EDIT: look at game jams like https://ldjam.com/ for a very successful model of how this can be done).

(And also, I think the word "grant" should be reserved for actual grants- not marketing contests. I like the idea of grants, and if a company wants to give grants, it should do so in a way that requires minimal effort by the participants, and focus on underrepresented people that badly need them)

Kartik Agaram 2020-07-23 00:12:44

I had similar thoughts but censored myself. Perhaps I shouldn't have.

yoshiki 2020-07-23 00:17:56

Kartik Agaram thanks for expressing that. I really like what replit does, the sponsorship(esp. of the foc podcast) and community work they do, and they seem to have a lot of great people there, so I also felt pressure to hold my tongue*. But after thinking about this since when the announcement was posted, I decided I don't like seeing the community being exploited more than I don't like rustling feathers.

*to clarify: I meant this as in, I felt bad about criticizing an organization that I believe is doing quite a lot of good.

Ivan Reese 2020-07-23 00:56:27

I think this contest is best for (eg) highschoolers, who don't yet have the network to throw their own jam, who (in theory) have a lot of free time, and who might need something to motivate them to take on a new challenge that'd be good for their portfolio even if they don't win. For folks in this community, we might stand to gain more from being a judge than being an entrant — maybe. And yeah, totally agree, some details of how Replit are structuring and promoting this contest are gross. But I think that's just capitalism — we here have the option to not participate in it, and I don't think that they do (what with investors to satisfy, etc.)

Love that you shared these thoughts, Yoshiki. Even though Replit are a benefactor of this community, their support should not shield them from criticism, especially criticism that we could all learn from that will help us do better if/when some of our projects are turned into businesses and we're faced with marketing challenges and the pressures of capitalism ourselves.

(And if Replit decide that they don't want to fund a community that reflects honestly and critically on what they do — though I expect Amjad et al would be fine with it — then there will be other ways to pay for the podcast, fear not)

yoshiki 2020-07-23 01:27:42

Yeah, and to be clear, I think they're good people who can accept criticism.

yoshiki 2020-07-23 01:44:56

Fwiw, Amjad has heard and responded to my criticism(albeit a version I shared that was much more concise to fit into a tweet):

https://twitter.com/amasad/status/1286092042179813376

🐦 Amjad Masad: @yoshikischmitz @replit Hey Yoshiki -- I'm a fan of your work.

We tried to do something different targeted mostly at younger audience who are excited by jams &amp; fun events.

I certainly see your point. In future installments we'll decouple the grant from the jam.

Thanks for your feedback.

Gregg Tavares 2020-07-23 10:14:39

It's easier to show up at some corporate jam and meet new people than to organize one yourself. You don't have to find the space, get the food, clean the place after, etc etc etc. Plus you'll likely meet people you don't know.

That said I don't personally get the idea of jams/hackathons that take place online. I can make something on my own at home. Saying "this weekend is abc jam! just upload your submission online!" doesn't motivate me all. All I want out of a jam is to spend time with actual people, make some new friends, see a new venue, that kind thing.

Ivan Reese 2020-07-23 10:34:17

When I was a teenager, these sorts of contest-jams were fun as I learned 3D modelling. A good way to get some audience (and thus feedback) that my work wasn't yet good enough to earn on its own.

yoshiki 2020-07-23 20:23:35

Yeah I mean, there is a value esp. in the physical events. And I don't want to discount the individual moral calculus people are making in their heads when they decide to participate, which I think is often quite sophisticated, and perhaps a lot of what I wrote is more of a reaction to my own past naivety toward these events(and I think, there is some unnecessary paternalism in my original post I should reflect on...).

My intuition is that the computing community in general would be healthier tho if there was a bigger focus on community-driven jams than corporate hackathons, but I need to do more research and thinking to substantiate this.

nicolas decoster 2020-07-23 21:06:43

So what about a Future of Coding jam driven by the community and sponsored by... Replit? 😄

nicolas decoster 2020-07-23 21:21:14

More seriously, there is something interesting in the Replit announce:

If languages are mediums of thought, and there are more and more people interested in expressing themselves digitally, shouldn't we expect to see many more types of languages?and later:

Programming languages are undoubtedly hard to make. They require a combination of design skills and technical chops. But for some reason, language designers are typically solo hackers. But what if we made programming languages easier to make? If we showed that it is possible for anyone, even those with limited experience, perhaps especially beginners, can create and experiment with languages? Wouldn’t we get a lot more exciting and fresh ideas?It is true that few people try to create language. And I guess it would be good it was different. As an example, I thought about trying to actually do it myself after years of programming. I guess I felt unlegitimate to do so before.

But, of course now I see it can be fun (and that you can even learn thing from it). In fact during workshops with kids sometime we start approaching programming by asking them to create programming languages: one kid plays the role of a robot that has to move on a landscape and an other kid writes down some "formal instructions" of her invention on a paper, and the robot-kid follows the instructions to reach a particular place of the landscape.

So I agree with Replit that it would be nice if creating languages was easier and more widespread.

Xandor Schiefer 🕰️ 2020-07-03 16:43:20

I don't necessarily agree with all the claims, but that's a cool demo: https://twitter.com/Altimor/status/1278736953836400640?s=19

🐦 Flo Crivello: GPT3 writing code. A compiler from natural language to code. People don't understand — this will change absolutely everything. We're decoupling human horsepower from code production. The intellectual equivalent of the discovery of the engine. https://player.vimeo.com/video/426819809 https://pbs.twimg.com/media/Eb78a5IUYAAKXMn.png

Shubhadeep Roychowdhury 2020-07-21 22:12:22

i guee they are using openai api 🤔

Ope 2020-07-22 07:00:57

https://twitter.com/opeispo/status/1285824479923515392?s=20 really really good talk here about what to realistically expect from program synthesis - related to GPT-3, TabNine etc.

🐦 Opemipo: https://buff.ly/32ESBOK This is sooooo coooolllll! Hila Peleg - Automatic Programming - How Far Can Machines Go by @hilapeleg (I think) https://pbs.twimg.com/media/EdgqjDBWAAM9mFJ.jpg

📷 https://pbs.twimg.com/media/EdgqjJvXkAE7e_D.png

Shubhadeep Roychowdhury 2020-07-22 12:14:21

Thanks for it!

Sverrir Thorgeirsson 🕰️ 2020-07-05 12:20:27

Lately I've been thinking about syntax highlighting and how helpful it is for developers. Recent research on this seems to be mostly focused on students and beginners, but the consensus (if there is any) seems to be that SH has negligible effects on source code comprehension (some examples: https://dl.acm.org/doi/pdf/10.1145/2987491.2987536, https://refubium.fu-berlin.de/bitstream/handle/fub188/21867/emip2017_report.pdf;jsessionid=D5D8345F061D423D87BB519F94D6B346?sequence=1#page=6, https://link.springer.com/content/pdf/10.1007/s10664-017-9579-0.pdf). A https://d1wqtxts1xzle7.cloudfront.net/38888331/sarkar_2015_syntax_colouring.pdf?1443186018=&response-content-disposition=inline%3B+filename%3DThe_impact_of_syntax_colouring_on_progra.pdf&Expires=1593952423&Signature=VAr9tKNZznILbhZz9-f5PlsVtDUIiQgnZCMjbfgYFjf31o5omzBx8D8-WnGRS~Y9O9QyYuUeRgycsfqW1do5wZQv4WE2FkIUmfcv~-yFWwDmxPliMDVAm759IeTPjZr9s3yVyOj-XNZHP9THuot3Zt4b6elvTWGdNqENvjFzB424N6QmV3z5zXpzMT9xWveglmRB7P-Pd9~Z5AsFifJQ5De3wCwFSyIAwi2L9UW8KgDQHO~z9rU6IiZ0EV2lg822bxezra~OiYike1LsxgWy7U7o402G2DV3D~vsJ3OK~nMH7Z5ceWxq6nGi3BGIMTl0GfDTIyuiRyjvx~Ls-9u7VQ__&Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA found an positive benefit, but the study had a small sample size and found that the effect is strongest for beginners.

The authors of the https://link.springer.com/content/pdf/10.1007/s10664-017-9579-0.pdf (linked above) made the following claim:

Our findings indicate that current IDEs possibly waste a feedback channel to the developer with an ineffective code highlighting scheme. This feedback channel could convey more meaningful information, for example the font colour could encode the type of function in terms of its namespace.

In other words, "semantic highlighting" could be more beneficial for programmer productivity, a paradigm that "attempts to reveal the meaning of the code" instead of just "identifying syntactic elements" [https://dl.acm.org/doi/pdf/10.1145/2846680.2846685]. This can mean something simple like giving each variable its own colour, but I think it can also incorporate more creative ideas.

I found two IDE packages for semantic highlighting: https://marketplace.visualstudio.com/items?itemName=AndreasReischuck.SemanticColorizer for Visual Studio and https://atom.io/packages/semanticolor for Atom. Has anyone here has used those packages (or something similar) and found them useful? I'm also interested what opinions you have about syntax highlighting in general (I've already read https://groups.google.com/forum/#!msg/golang-nuts/hJHCAaiL0so/kG3BHV6QFfIJ). 🙂

Chris Maughan 2020-07-22 10:07:49
hamish todd 2020-07-22 12:06:13

Hey folks, there's something I saw a while ago and I'm looking for. It was:

-A recently made hybrid IDE and language

-Whose opening webpage had a demo of them making pong. It involved being able to click on the paddle to open a menu

-There were quite a lot of wires around but they had put a bunch of thought into its presentation

Ivan Reese 2020-07-22 15:41:38

This is the only pong-like demo I'm aware of: https://www.youtube.com/watch?v=Gy5m091fOTU

🎥 DeepUI 1

hamish todd 2020-07-22 15:51:46

THAAAAAAAAAAAAAAAAAAAANK YYYYYYYYYYYYYOOOOOOOOOOOOOOOOOOOOOOOOOOOUUUUUUUU

hamish todd 2020-07-22 15:53:10

Fuck these people's SEO. A friend of mine correctly guessed that it had "deep" in the name, but 45 minutes of googling of that kind got me bugger all

Ivan Reese 2020-07-22 16:12:50

(Newcomer note: we don't slag people here, even if they're outside the community, since they might join in the future.)

I had a DM conversation with the creator of this demo and got some backstory you might be interested in. (Paraphrasing, so apologies to the creator if I get this wrong. Also, I believe they wish to remain slightly anonymous.) They originally built this demo in C++, inspired by Bret Victor. They made a video of it, posted it online. (That's why you couldn't find this via search — their "website" was only ever just a demo video on an otherwise empty, and now offline, landing page). As they continued to work on it, they realized that they didn't have a good way to scale up their approach to handle more complex cases, not without a tremendous amount of work they weren't prepared to do. Also, they saw what the folks at Luna (now https://twitter.com/enso_org) were doing, and felt that that was a much better approach — and that they actually had the funding necessary to make a go of building a novel visual programming environment.

Ivan Reese 2020-07-22 16:16:17

Frankly, I disagree with the assessment. I think the DeepUI prototype was taking a far more interesting and potentially fruitful approach than Luna. To me, Luna is (was) a way of making an ML family language much nicer to work with, but it is not truly visual programming (and neither is Max/MSP, etc). Whereas, DeepUI actually is visual programming in the truest sense, and that, for my money, is a very exciting space just waiting to be explored. There absolutely are ways to scale this sort of a model up handle arbitrary complexity — but, I agree, it will take a tremendous amount of work. (Though, certainly, not as much work as has gone into gcc, JVM, or v8)

Chris Knott 2020-07-22 16:25:01

Was there ever a usable demo of this or just the video? Even in the pong demo there must be a load of logic not represented on screen

Ivan Reese 2020-07-22 16:47:43

Just the video. I believe they continued hacking on the project in such a way that it no longer resembles the demo, and no longer runs, and is not in a publishable state.

hamish todd 2020-07-22 23:00:43

Thank you for that Ivan, that is interesting!

hamish todd 2020-07-22 23:06:18

I agree that DeepUI is more interesting than Luna, but I'm not surprised they couldn't figure out how to make it scale.

So far apart from Bret's work I am most impressed by Chalktalk, which I'm sure you know about. It has problems scaling too.

One of the reasons I was asking about DeepUI (and why I joined this slack) is that I am going to make a presentation on, surprise surprise, my own visual programming IDE ideas 😅 I hope to make it a bit more scalable... although I realize the odds are stacked against it

Ivan Reese 2020-07-22 23:19:32

Cool! I hope you'll share some of your work in #feedback, or in #two-minute-week if you want to make short (2 minute) weekly updates as you go.

Ivan Reese 2020-07-22 23:21:39

I'm aware of Chalktalk, but I haven't actually seen it. Do you have a good link?

Joe Nash 2020-07-22 23:23:00

Ahh I’m so glad you found the project @hamish todd! (I was the guy who replied to you from the enso twitter, spent a good while being like “wait did I miss someone making pong in Luna?!? and hunting around the interwebs!)

hamish todd 2020-07-22 23:51:34

Heh thanks Joe. To be clear I think Luna is more scalable than DeepUI too 😄

hamish todd 2020-07-23 00:01:22

Chalktalk: so the deal is that Ken Perlin has given the same presentation using chalktalk about 6 different times on youtube. He is a deep thinker on the philosophy of all this, almost as much as Bret and Alan, and his thinking around chalktalk is worth listening to; this 2017 presentation is as good as any https://www.youtube.com/watch?v=xuzrF_82z7U and this (timestamped) link shows you where it was in 2011 https://youtu.be/O9b-rtrcPEA?t=2707 showing a nice AR approach

Ivan Reese 2020-07-22 17:05:06

Update on Luna Enso: https://medium.com/@enso_org/your-enso-questions-answered-3e5fcac23801

I'm going to comment in the thread with some hot takes.

Ivan Reese 2020-07-22 17:07:59
  • Business Model

Hosted SaaS and on-prem — cool? Whether this is worth paying for depends on what you'll use Enso for, so I guess this means they're going to (perhaps subtly) focus Enso on server-y stuff rather than GP programming. (Edit much later: I misread this as hosting the output of Enso, rather than hosting the tool Enso itself. Hosting the tool makes a lot more sense.)

Marketplace — this is my "if I can't think of anything better, copy Unity" idea for monetizing Hest. I hope I think of something better, because this feels like the sort of thing you should do after your tool becomes wildly popular. Otherwise, you end up with a bit of a ghost-town effect, and I've certainly been put off of participating in marketplaces because of that.

Ivan Reese 2020-07-22 17:14:28
  1. Variable Bindings = Lines

In other words, there are no variables. There's no way to put some data down, run away, come back later, and pick up the data where you left it. The data has to flow immediately from producer to consumer.

Perhaps they have some idea about a database or tuple space or some such in the background. But no mention of that yet.

Chris Granger 2020-07-22 17:57:22

Yeah, they're going to have to create some kind of value container for #2. You can't get very far without it and it's one of the worst parts of dataflow-centric systems. Part of the problem is that if all references need to be represented as lines, you get really nasty graphs the moment you have stateful containers like these.

Chris Granger 2020-07-22 17:58:16

Marketplace strategies pretty much always fail unless you're an incumbent

Chris Granger 2020-07-22 18:27:06

The way I've been thinking about #1 is paid SaaS for the tools with optional hosting (+ some very compelling reasons to use that hosting), but you can take the resulting artifact and run it wherever.

Ivan Reese 2020-07-22 19:39:27

Any time your business model is hosting, you're now just an AWS reseller, and that feels like a business that can be shut down without warning at a moment's notice.

It worked for Heroku, but... there is already a graveyard here.

Chris Granger 2020-07-22 19:54:37

yeah, just hosting doesn't seem to work very well, but tool integrated hosting seems to workout fine. Webflow, bubble, retool, etc

Ivan Reese 2020-07-22 20:19:09

Well, we'll see how many of those live past the end of their funding rounds. Webflow are at $70m, according to crunchbase, which is.. just mind-blowing to me. That's too much.

Anyway... hot takes!

  1. Seems interesting, but there's nothing here about what this looks like. Do nodes with an error as part of the type signature turn red? Can you do any debugging on the visual side?

Moreover, the language was designed such that, even if you create syntax errors, all expressions not affected by the error will still work. That is that, if one of the nodes in your graph has a syntax error, the other nodes still function correctly. This sounds like an obvious requirement for a visual language, but is currently not implemented in any textual language.

That's cool, but that's how JavaScript works. You can have a function that throws an error or fails to parse, and code that's outside the stack of the thrown error or the scope of the syntax error (but in the same JS context) will continue to run unaffected. They probably meant to say "not implemented in any textual language ill with the type disease" :P

(Gotta be spicy or these aren't hot takes)

Chris Granger 2020-07-22 20:20:07

all of those companies are/were cashflow positive, fwiw

Ivan Reese 2020-07-22 20:20:51

Ah, nice. I tried to verify that but couldn't find that info. Is this just something you knew offhand, or was there somewhere I could have looked?

Chris Granger 2020-07-22 20:21:21

know the founders for most of them, bubble was bootstrapped

Chris Granger 2020-07-22 20:21:37

so yeah, no secrets, just network 😞

Chris Granger 2020-07-22 20:22:26

I do wish there was more openness around business models and such, but I get why there usually isn't

Chris Granger 2020-07-22 20:22:45

interestingly enough, I've found indie game devs to be fairly open

Chris Granger 2020-07-22 20:23:05

watch enough GDC talks and you can get a good sense of outcomes in that space

Ivan Reese 2020-07-22 20:23:29

Yeah, going back at least as far as 2D Boy being totally open about the financials of World Of Goo.

Ivan Reese 2020-07-22 20:28:14

Hot take 4.

will provide you with a widget for that type

Good! Hopefully there's a way to define new widgets that are of an equal class to the built-in ones.

We have created a sophisticated > https://github.com/enso-org/ide/tree/main/src/rust/ensogl>  capable of displaying millions of data points in an interactive fashion, in a browser. This will allow Enso 2.0 to display much more data than any solution we know.

I don't care about how many "data points" it can draw unless I'm building a scatterplot. Can I work with 3D models? Vector graphics? Texture maps? Animations? Can I build user interfaces?

Chris Granger 2020-07-22 20:35:41

I always struggle a bit with statements like:

This will allow Enso 2.0 to display much more data than any solution we know.

Chris Granger 2020-07-22 20:36:21

Those kinds of sentences pretty much only open you up to being wrong, while providing no real value.

Chris Granger 2020-07-22 20:36:50

they make people want to prove you wrong and derail the actual point.

Chris Granger 2020-07-22 20:45:05

I love the idea of "just render it all in GL", but boy is that a big pill to swallow. There are so many things we take for granted that you have to do, and do correctly, to make something even remotely useful in the real-world.

Chris Granger 2020-07-22 20:45:57

Things we think are trivial, like text rendering, can take you years to get right and even there you'll likely be picking the lesser of a few evils.

Chris Granger 2020-07-22 20:53:28

As an example: font rendering in both unity and unreal still sucks and they have functionally infinite resources.

Chris Granger 2020-07-22 20:57:16

When we were trying to ship Visual Studio 2010, there were several people solely dedicated to font rendering in WPF. Fonts were still blurry in some circumstances all the way up to the last couple of months before going live. As I recall, they'd been working on it for almost 5 years at that point. 😕

Joe Nash 2020-07-22 23:14:03

This was not as spicy as I expected when I opened the thread 😂

Joe Nash 2020-07-22 23:15:19

Thanks for the takes Ivan Reese, appreciate your thoughts and insight! Some of these I can get you more info on tomorrow (it’s late here) - the error stuff for example, the visual part of that is just straight up not implemented at the moment, but there’s a vision for what that should look like.

Ivan Reese 2020-07-22 23:17:51

Trying to strike the balance between being spicy, while still being constructive and not being mean :)

Joe Nash 2020-07-22 23:18:41

Those kinds of sentences pretty much only open you up to being wrong, while providing no real value.

Hahaha yes I totally agree, something we have to work on - after a certain amount of time talking to investors and funding bodies, I think it’s hard to turn off. I’ll try to be a better hype-net 😂

Ray Imber 2020-07-22 17:14:51

Jonathan Blow has a new talk that seems very relevant to this group.

It's titled, "Video Games and the Future of Education", but I think many of the ideas apply to Future of Code as well.

https://www.youtube.com/watch?v=qWFScmtiC44

Ray Imber 2020-07-22 17:16:23

I particularly like his phrase: "systems literacy"

Ivan Reese 2020-07-22 17:22:28

I https://www.lunchboxsessions.com in educational games, and this talk resonated a lot with me and my coworkers. It echoes a lot of things we've arrived at over the years. We're big on the idea of "design the gameplay first, then figure out what you can use that gameplay to teach" as opposed to the reverse. We also have a huge focus on systems-thinking, since we specialize in teaching troubleshooting skills. We also also strive to impart the "spirit of engineering", in addition to familiarity with particular technical matter.

One problem that we continually run into is that our biggest clients expect their educational software to fit a very specific, very familiar format. They buy educational software primarily for compliance reasons, not with an interest in helping people learn and do better at their jobs. (Worth noting: these clients are multinational companies, mostly focussed on resources, manufacturing, or transportation — business not known for being progressive.) They want multiple choice quizzes. They want slideshows. When we build things that learners genuinely enjoy using, we often have trouble getting higher-ups to deploy them across their org.

So I bristle at Blow's contention that there aren't people out there trying to make these sorts of games. There are! It's just not a guarantee that if we build it, they (customers) will come.

Christopher Galtenberg 2020-07-22 17:27:09

I work at one of those multinational corps interested only in slideshows and multiple choice quizzes for compliance sake, and "education" is probably the most pointless hours I spend all year (and that is, painfully, really saying something, compared to other useless tasks I trudge through)

I would have no idea how to break through this wall of set expectations, other than to produce something too good to ignore / that resets the marketplace.

Ray Imber 2020-07-22 17:29:08

That's a completely fair criticism! Especially in this community, people are obviously working on these problems.

In Blow's defense, he doesn't blame it all on the creators. He explicitly states how this kind of paradigm will never be bought by the current education establishment. It's the section where he compares the current education system to Cable packages from the 80's.

His suggestion is to ignore that market and go to Steam or the more general game markets instead. It's not a great solution honestly... You have to pay the bills, and Steam just can't compare to these big corporate contracts. The incentive structure is working against you hard here! It's a hard problem for sure.

Orion Reed 2020-07-22 17:29:26

I got into all of this via video games and am a big fan of Jonathan’s principled approach to his work. I personally believe there’s immense value in embedding expressive systems within a more ‘traditional’ game. For example, Minecraft taught many the basics of circuitry, Boolean logic, and even composability, modularity and systems design!

Will Crichton 2020-07-22 17:53:53

Ivan Reese for some reason, I’ve never actually seen what you work on. That’s so cool! I’m really curious what workflows you have for building the interactive animations. I noticed it’s all SVG. What’s the path from designer -> engineer look like?

(As an aside, I was watching the video and made it to “Explanations made simple powered by…” and my mind sadly autofilled with “AI”, and I was very happy when I got “interactive animations”.)

Ivan Reese 2020-07-22 18:10:10

@Ray Imber "Ignore that market" — Totally, and that's basically what we've done. The https://www.lunchboxsessions.com I linked is something we built to run around the establishment and break down the back door.

(You probably know this, but I'll say it for the benefit of anyone reading who doesn't know...) Most companies have a Learning Management System (LMS) and expect to be able to buy modular slideshow+quiz content to plug into it, and then they assign that content to their employees whenever the mandated compliance schedule or some special circumstances (eg: a lawsuit) requires them to do so. To play in this market, you need to be B2B and by the book.

Our strategy for LunchBox Sessions is to force companies out of that mold. It's an iPhone-esq walled garden, that is meant to be discovered first by the employees who will be taking the training, who then tell their managers "This is really good, please buy this for us". Those managers then say to us, "Put your stuff in our corporate LMS", and we say "We can't". Occasionally, the company will relent and buy our material on our terms. The employees using the software love it, and we've won a customer for life. Often though, the company says "too bad" to their employees, and so we just have to wait for them to come around.

This "grassroots" / word-of-mouth approach to sales led to a lot of really interesting design choices at pretty much every level, all the way down to how we plan gameplay and educational objectives and such. Too much to go into here, but (tying back to the original post) there are definitely ways to improve the educational software market — they just, as Blow advocates, have to come mostly from outside the current practice.

Ivan Reese 2020-07-22 18:51:28

Will Crichton The cutesy answer is that the path from designer -> engineer is not travelled by our content, but rather by our content creators. ;)

I'm the only formal programmer at our company, and I don't do any of the work on our content — I just build tools (and... all our web services, from visual design to database optimization, /curtsy/). When we hire a content creator, we hire only for art skills, and then train them how to program well enough to add logic and interactivity to their artwork — basic procedural code: variables, conditionals, calling functions, but not necessarily even arrays or maps. That training process takes about six months (most of it focused on domain-specific stuff), but they're usually able to build simple simulations pretty much immediately. We typically have 3-6 artists on the team. We'd happily train them much further in programming, but none of them have wanted to learn that yet (can't blame them.. which is why we're all here, right?)

Our current pipeline is:

  • Draw in Adobe Animate (nee Flash) or Illustrator, with names given to various objects in the drawing.
  • Export to SVG (which forces us to only use a safe subset of drawing features, sadly)
  • Run a simple CLI tool to scaffold an interactive simulation atop our in-house https://github.com/cdig/svga/wiki (titled SVGA)
  • Write some high-level CoffeeScript code to express the simulation logic, add controls, etc.
  • Run a CLI command to deploy to our site. The final result is a single HTML file that works in any modern browser. Typical build size is about 200 KB, including the framework.

It takes one of our artists about a week to build https://www.lunchboxsessions.com/materials/deere-hitachi-excavators-shovels/hitachi-arm-regenerative-circuit-simulation from scratch, with a fairly even split of time between planning, research, design, art, and coding. According to cloc, that linked simulation is about 1700 lines of SVG art (after automatic optimizations), and 600 LOC of CoffeeScript simulation logic (where the amount framework boilerplate in that is probably less than 5%)

(If you're not familiar with it, the graphical symbols we use are fairly standard in https://duckduckgo.com/?q=iso+hydraulic+schematic, with a bit of our own spin to make them more amenable to animation).

That framework I keep referencing is about 4k LOC, and took probably 6 months to develop, spread out a fair bit.

Finally — the FoC project I'm building, https://futureofcoding.slack.com/archives/C0120A3L30R/p1586795860004500, is intended to take us away from writing text-based code at all, to let us build these simulations inside an Adobe/Autodesk-esq graphical environment. I've been working on Hest off-and-on for about 5 years now, and plan for it to be the main thing I work on for the next decade (aside from keeping our web services alive, of course)

Chris Knott 2020-07-22 18:57:01

This is getting off topic but couldn't you pitch it like a tool on your site where they learn the material, then a module on their LMS where they are tested/audited?

Ivan Reese 2020-07-22 19:02:17

Chris Knott Yeah — sorry for monopolizing the thread. /tugs collar/

Some of our clients choose to do that as a compromise — they fill their LMS with empty content objects that just link to our site, and then we send them "score" data via an API. It sucks, because our idea of testing doesn't fit that mold. We're trying to get away from the notion of a "score" entirely.

Kartik Agaram 2020-07-24 23:05:48

I'm still watching this. Halfway through, this feels complementary to and as important as Bret Victor's work.

Orion Reed 2020-07-22 17:47:44

Quick question I’d like to ask this community: what are your thoughts on communicating to those outside the FoC community and even outside computing and programming? I.e. family and friends.

It’s such a sprawling and deep topic it’s hard to know where to start when trying to get across the excitement, potential, the travesty of the current state of affairs, etcetera. What’s worked? What hasn’t?

Ricardo A. Medina 2020-07-22 18:27:48

My go-to's (ha!) are knowledge anchors (current problems) and analogies (vision).

Could start from:

"Do you know why your printer/bluetooth/some website/whatever fail or sub perform all the time?", "What's up with restarting your laptop on every update?", "Why can't you count how many new instagram followers you had in the last month? And keep a rolling count", "Why can't you send a photo to your phone or friend in one touch?", "Could you disable some tv channels for your young kids on demand?"

But yeah I don't find it easy either. And also the technical level of the audience.

Orion Reed 2020-07-22 18:35:59

@Ricardo A. Medina these are good, I like the division into problems and analogies too. I wonder what other broad categories there are here. It may be a good use of my time to try and collect some of these and organise them a little in a shareable place

Mariano Guerra 2020-07-22 18:33:24

http://www.flashgamehistory.com/

“Being a creator of and steward for Flash as a platform was a privilege. I felt that we were building a pencil and it was the community of creators that was responsible for the creation of Flash as a creative form. Our job as stewards was to anticipate needs, listen and make sure it worked. The core idea of having an accessible system for creating interactive media content that works across a range of devices is still a powerful one. Just like pencil and paper is a powerful tool. I hope it will happen again. Many years ago, I had the idea of Flash Forever. How can we treat what is created in Flash as valuable information like a book? Sadly, the need to drive business growth by adding features and capabilities, trumped the need for permanence. It’s great that Flash still lives in the skills and experiences of the community of people who learned and grew with it.” -- Jonathan Gay, Creator of Flash

Gregg Tavares 2020-07-22 19:03:26

I'm still a little curious why there is no market for a flash like editor that generated HTML/JS apps.

Two things come to mind.

1) there is no way to distribute the creations as a single file like you could with flash and a swf file. It would be a minimum of 3 files, one HTML, one player file (probably too big), one data files. Where as with flash you generally had the player installed.

Unity has this issue. the smallest web app is 5-6meg just for the base engine.

2) pre smartphones there was effective only one platform. a desktop PC with a keyboard + mouse + landscape orientation screen. Now the major market is smartphones and in particular Apple has argrubly actively discouraged browser based games by not supporting the html standards that could make them a good experience.

Of course a flash like editor could export to a native app though maybe at that level it can't compete with unity.

S.M Mukarram Nainar 2020-07-22 19:13:26

I forget what it was called, but was work on this, in particular some people were making a format for distributing html5 games and animations, basically by zipping up the files

Ivan Reese 2020-07-22 20:07:09

Gregg Tavares I think there is a market for that. It'd just cost a lot to build a modern equivalent of Flash (the authoring tool) that publishes efficiently to the web. Not amenable to a startup, and I don't think most existing companies have the culture for it.

This problem is what I've spent much of the last decade working on at my job, but at a small scale, focused just on making an alternative to Flash for our unique needs. We used to be a 100% Flash media shop, and now we still use Flash Animate to draw our artwork, but export to SVG and use CoffeeScript as a successor to ActionScript. The final animation is a self-contained HTML file, with about 50kb of framework code (that can be inlined or served by a CDN). I just posted a big comment about our production process, if you're https://futureofcoding.slack.com/archives/C5T9GPWFL/p1595443888155200?thread_ts=1595438091.136800&cid=C5T9GPWFL.

My FoC project is meant to be a successor to our current framework, so in that way it's meant to be a spiritual descendent of Flash. We're interested in making some money from it, too, so we're staring down that "why is there no market" question. Like our current framework, the plan is for there to be no player — just small, self-contained HTML files.

The plan is to compete with non-consumption, or perhaps to compete with "hire a multimedia team". Definitely looking at Unity as an example, but not going to swim in that part of the pool.

Ryan King 2020-07-22 20:23:58

Actionscript was my first language. I miss how easily you could create and publish unique interfaces and games, and would like to see something like it again.

Ryan King 2020-07-22 20:24:05

Also, here's a related GDC talk. It goes into early approaches to advertising / monetisation, preventing piracy, publishing platforms - super interesting.

https://youtu.be/65crLKNQR0E

Ray Imber 2020-07-22 21:09:58

1) there is no way to distribute the creations as a single file like you could with flash and a swf file. It would be a minimum of 3 files, one HTML, one player file (probably too big), one data files. Where as with flash you generally had the player installed.Isn't this what electron apps do?

It's the same problem as Unity. You get a single distribution format, but it bundles an entire damn web browser...

Ivan Reese 2020-07-22 21:13:02

I think that's an own-goal on the part of Electron and Unity. If you want to produce media for the web, you should leverage the web platform — and it takes very little code to do that. Even ThreeJS seems stuffed to the gills with things that aren't needed by most projects (though, to be fair, I haven't seen what happens if you tree shake it).

Ray Imber 2020-07-22 21:33:48

Before I hijack the thread further (sorry 😛 ) I want to say, great article, I also grew up on Flash games, and I'm glad it's being given the historical curation and respect it deserves.

Ray Imber 2020-07-22 21:33:58

I think there is a market for that. It'd just cost a lot to build a modern equivalent of Flash (the authoring tool) that publishes efficiently to the web. Not amenable to a startup, and I don't think most existing companies have the culture for it.I feel like this discussion needs some clarification. We are talking about "Flash" as this monolithic thing, but it was made up of a few parts that made it successful.

  • A well designed vector animation tool that was intuitive for artists (relatively speaking)
  • An integrated scripting language
  • A compact and widely accessible distribution format

Gregg Tavares in particular made this implication that distribution is intimately tied to the editor. Those are weird things to conflate together imo...

Adobe Animate CC, the modern Flash ancestor in fact has an export to JS/HTML5 option IIRC... I'm not sure how good it is though.

Ryan King 2020-07-22 21:43:31

I do really like the combo for drawing graphics with the code editor (I suppose this is how unity works). Currently to get complex graphics in to webGL I need to draw it export to svg then convert the svg into a mesh - and then reading the code, you can't really see what it really "is". Maybe I should be just doing my project in unity 🤔

Ivan Reese 2020-07-22 21:48:43

@Ray Imber

Adobe Animate CC, the modern Flash ancestor in fact has an export to JS/HTML5 option IIRC... I'm not sure how good it is though.

It's bad, or at least it was when I evaluated it. The output is bloated and doesn't offer much in the way of interoperability — less than even SWF content (which had an API you could tap into, and had good semantics around responsiveness, etc)

Ray Imber 2020-07-22 21:49:05

I had a feeling that was the case

Ivan Reese 2020-07-22 21:50:28

Ryan King Unity doesn't have art tools in it. Hard to blame them, considering how good Maya/Modo/etc are, and how much insanely more complicated it'd be to put that stuff inside Unity itself.

It does have a scene you can assemble your externally-created graphic assets in, which is, I think, the modicum.

Ivan Reese 2020-07-22 21:53:00

@Ray Imber

Gregg Tavares>  in particular made this implication that distribution is intimately tied to the editor. Those are weird things to conflate together imo...

I mean, they're conflated together by history — Flash was both of those things. A modern successor to Flash might also conflate those things. It's not necessary, but it might be beneficial. Look at Unreal — the engine and distribution platform (Epic Games Store) are technically separate, but they're designed to be mutually beneficial.

It's also sort of unavoidable to consider the output format when creating an authoring tool. And if your authoring tool is creating content for the web, you want the output format to be optimized for portability — a single file, or at least something that's easy to link to or easy to embed in a blog post. And something that anyone can view without a plugin. If you aren't thinking about that when designing an authoring tool, you're going to end up in a sad place.

Ryan King 2020-07-22 21:56:44

Ivan Reese Yeah that's reasonable. I think it's more being able to click an object on the screen, and see my code inside that object showing it's behaviour. That fits better with how my brain works than files do.

Ray Imber 2020-07-22 21:56:48

I mean, they're conflated together by history

It's not necessary, but it might be beneficial.I think this is the more important point... Was Flash successful because these things were tied together, or is that just historical accident?

It's hard to compare with the Epic Games Store imo. It's too new.

If you look at Steam as a counter point, it's very successful as a distribution platform, and is very isolated from the content creation itself.

Ryan King 2020-07-22 21:59:54

If you're interested, here's some ThreeJS alternatives I'm keeping an eye on. They're not flash but they're getting easier to code with at least.

https://github.com/oframe/ogl - a striped back webgl library closer to writing webGL but there's something nice and simple about it

https://github.com/protectwise/troika - a framework built on top of ThreeJS, it's declarative and a bit more dom-like. I'd like to see further abstractions like this.

Ivan Reese 2020-07-22 22:05:03

@Ray Imber Yeah, you're right — Unreal/Epic is a bad example. Gregg Tavares isn't talking about distribution in the sense of "a store", he's talking about the file format. Flash had to create its own file format and player because there was no built-in functionality for multimedia on the web. There wasn't even audio — remember RealPlayer? There were other plugins they could have hooked into (Java Applets, say) but those sucked.

What we can have now (though nobody has done a good job of it) is an authoring tool that can spit out self-contained files that work anywhere (on the web), thanks to HTML and the web platform. So as long as your authoring tool produces nicely self-contained single HTML files, you're a lot closer to having that particular question answered, without needing a boil the ocean "our plugin is on 97% of PCs" solution.

So the distribution is "tied" to the editor only insofar as the editor needs to do just that — spit out files that people can actually use.

Ray Imber 2020-07-22 22:12:05

So the distribution is "tied" to the editor only insofar as the editor needs to do just that — spit out files that people can actually useIvan Reese I agree. Exactly. I basically agree with everything you said.

I think my problem with Gregg Tavares's original argument was that he was looking at it backwards from my view point.

The problem has nothing to do with the distribution format as a technology... It's not a technology problem, it's a social / market problem.

It's not that there is no market, it's like you said, there is a market on the consumer side. The problem is that there is no incentive on the business side to build it.

In that way, Flash was a product of it's time. Unfortunately the world is a different place now.

Maybe the modern web will produce a modern successor. All the parts are there... 😄

Ivan Reese 2020-07-22 22:16:12

I hope this community will produce a modern successor. All the parts are here...

Ray Imber 2020-07-22 22:52:02

People have tried to recreate the magic of Flash (and are still trying.) There are a huge amount of JS engines out there both 2D and 3D. Most are engines only, they don't have any art tools (which goes back to my point about not conflating things together, at least being clear about the parts.)

Unity has a "web" option but it's a proprietary plugin. Basically everything bad about Flash, so I'm not going to count that.

Godot has an export to HTML5/JS option. IDK how good it is though (I assume it's probably not much better than Adobe Animate honestly...)

There are a few other less known engines that are trying:

https://gdevelop-app.com/

https://playcanvas.com/

Nothing has really taken off though.

There is some magic combination of features and social effects that made Flash so successful. What is the magic formula? 😛

Gregg Tavares 2020-07-23 02:46:22

I want to say all the parts are not there. You can't currently make a small single file embeddable multi-media experience with a single HTML file. You could encode your video/audio as dataURLs but the file will be HUGE. You could maybe generate some vector graphics animations in a single HTML file but not your average flash game. Further, flash's format was compat, arguably more than you'll get from HTML without some kind of player (so bloating your page). Other functionally you can't get from HTML in a single file is streaming. Flash could have a 2meg file but after download 50k it was running and downloading the rest in the background. Again to that in HTML requires a player and at least 2-3 files. The HTML itself, the player, either embedded or referenced, and then the data and the data has to be separate else you can't stream

Whether a single file format is important or not is debatable but it's certainly helps things go viral if they can easily be put anywhere by anyone? I suppose hosting your multi-file creation somewhere and letting people embed it would work that costs $$$. Maybe something like http://youflashtube.com and have the editor either online or export directly. I can imagine in some alternate reality that might be successful but it wouldn't be remotely the same as flash was if only because a hosted experience will be censored in various ways

As for unity, unity's web player has been long dead. Unity exports to HTML5/WASM for years now but the minimum size for hello world is 4meg which is basically Unity's engine so effectively it's as if every app is downloading the flash player. I know they are working on shrinking that significantly but I don't know how far along they are.

It's also not mobile friendly which which may or may not matter. If you're trying to make a profit by selling an app/game then you're happy with exporting a native app. If you're trying to make some viral experience that people share with just a link like they did with flash then not being mobile browser friendly is a non-starter

As for three.js, once you gzip it it's only 150k at the moment so barely a single image worth of data on most pages. It doesn't "tree shake" at all at the moment because if legacy code design but they are working on it. But three.js is not even a small amount of flash's functionality. It's just a 3d engine not an app/game engine.

Gregg Tavares 2020-07-23 02:51:27

Here is unity's plan for being able to export smaller HTML apps from Unity

https://unity.com/solutions/instant-games

And a live example

https://tiny.vision/demos/TinyRacing/Wasm/TinyRacing.html

It's still 4meg until the page shows anything at the moment.

Jack Rusher 2020-07-23 08:52:38

Somewhat off-topic reply to Ryan King: if you enjoy ClojureScript, the Geom library has a much nicer API than ThreeJS. Here's a small example I build some years ago:

http://proscenium.rusher.com/geometer/

Source code:

https://github.com/jackrusher/geometer

jackrusher/geometer

Ray Imber 2020-07-23 19:03:48

Gregg Tavares

I want to say all the parts are not there.Remember, this is "Future of Code", not "Today of Code".

You are giving more examples of finished products that are not all there.

These are good examples of what is not working right now, but none of these examples show any fundamental missing pieces for why a new flash like platform can't work.

From a distribution perspective, I think all the technological pieces are there. Even before web assembly, I think the parts where there.

The death of flash is one of the big reasons web browsers started to grow the necessary features to replace flash(for better or worse). Web assembly might be the final piece, because it allows a single binary blob to be easily embedded and run. We just need to get better at compression (which is actively being worked on.)

Gregg Tavares My question for you is, if you think all the pieces are not there. What pieces do you think are missing? Not which product is missing, we wouldn't be having this discussion if a finished product already existed, but which technological or social pieces are missing?

Ray Imber 2020-07-23 19:08:49

I was thinking about this, and while it's very different in a lot of ways, I think the https://www.lexaloffle.com/pico-8.php community has succeeded with a similar spirit to the old Flash games communities, even if it is a bit more niche and smaller scale.

Gregg Tavares 2020-07-24 05:08:26

I said above I think being able to distribute in one file might be a reason things haven't happened. So that feature is missing. WASM doesn't work with one file. In fact typically it's min 3 files not including assets. One HTML file, one script with all the JS<->WASM glue. One wasm file.

Pico-8 has definitely has some of the vibe of flash games but it's a way higher barrier to entry than flash ever was. There's no doing anything in Pico-8 without code but there was plenty of flash with no or minimal code.

So I think 4 things are missing

  • being able to distribute as a single file. not entirely sure this is important but feel it's possible it is important
  • being able to stream the assets from that single file vs having to wait for the entire file to download. If 1 is important than so is this.
  • working well on mobile in the browser (this is only semi-possible because Apple has so far refused to implement the needed APIs. In particular the fullscreen API so a webpage can go fullscreen (or close to it ) like a native app can and the orientation API so a webpage can force landscape view. Android Chrome/Firefox has had both of these for 6+ years and it hasn't ruined the browsing experience there.
  • A well designed non-programmer friendly app for making things

I also feel it really is about the app. Unity and Unreal are not doing anything that game engines didn't do in 2003 but the fact that they package it all up so a non-programmer can build a Dear Esther type of game with no programming or even with a little programming is what made current explosion of games.

The same was true for flash IMO. It wasn't just that the tech existed. It's that there was an app that let people easily use tech to make stuff.

It could also be though the flash was just something that happened and it's time has passed. I found this site yesterday

http://poki.com/

It's got a ton of games that seem right out of the flash days except with higher-res art 😛

also https://itch.io is full indie games and many run in the browser, though likely desktop only unfortunately.

nicolas decoster 2020-07-24 08:25:59

Just to add kindly precision (but I am not sure if this is really important for the discussion):

WASM doesn't work with one file. In fact typically it's min 3 files not including assets. One HTML file, one script with all the JS<->WASM glue. One wasm file.Technically, if needed one can bundle all this in one HTML file, with a script tag for the JavaScript / WASM glue, and with the WebAssembly binary content encoded in base64 somewhere in the script or in a custom HTML tag.

Ray Imber 2020-07-24 18:21:31

I forgot about http://itch.io! That is another great example of a modern Flash games like market! http://poke.com looks interesting as well.

but it's a way higher barrier to entry than flash ever was. There's no doing anything in Pico-8 without code but there was plenty of flash with no or minimal code.Good point. I can see that much of your argument is about barrier to entry and ease of use. 👍

Now about your 4 things. I'm going to disagree with you on a few points:

  1. being able to distribute as a single file. not entirely sure this is important but feel it's possible it is importantI would like to point out that Flash was not that different.

In theory you could just "play a swf" file directly, but nobody did that. You still had to host a website with an HTML file (and probably a CSS file), and embed the swf file. And the user had to download or update their flash player on a regular basis.

In fact, nobody did that either! They uploaded their swf to Newgrounds, who did all the hosting work for them. The key here is the marketplace (Newgrounds).

That's not much different than the JS/WASM, HTML, CSS combo we have today. It's not really just "one file"...

An important part of the equation was that Newgrounds did a lot of that hosting work for you as a content creator.

There is no reason the same kind of thing couldn't be done for WASM or modern JS. In fact, that's what http://itch.io and Pico-8 are doing!

I would also like to point out that you can embedd assets in the WASM binary!

Modern assets like 3D models and bitmap textures are also very different from Vector based assets (I will talk more about this below).

The key is that there was a convenient way to get from the content creation tool to the hosting site easily. That's a really good point!

I just want to point out that there is nothing technologically preventing us from building something just as convenient today, it just hasn't been built yet...

being able to stream the assets from that single file vs having to wait for the entire file to download. If 1 is important than so is this.I am actually not sure what you mean by stream assets. It's been a long time since I programmed with flash (I did back in the day, but it was a looong time ago), but I'm pretty sure it didn't "stream" anything, at least not in the modern sense of sending bytes over a network a little bit at a time. Youtube didn't even exist until 2005, and when Youtube started, streaming technology was still pretty bad... If I'm wrong, please give me a source and correct me.

I think what you mean is compression. Flash was good at compression. It also had good "time to first interaction" latency. I totally agree that "time to first interaction" is super important and extremely under appreciated with modern computers. It's a big pet peeve of mine (and anyone who follows Jon Blow, Casey Muratori, and the handmade philosophy).,

I would like to point out the Flash assets were almost entirely vector based. Vectors compress extremely well! They are just control points for a Bezier curve equation.

The internet also had much less bandwidth during the height of Flash, so in general the assets were smaller.

I remember Flash animations that had a lot of bitmap assets instead of vectors. You got loading screens just as bad as today (worse in some cases).

The situation is actually better today for the end user from the tech standpoint. The internet has orders of magnitude more bandwidth, and the browser apis let us do actual proper streaming of data (through js download requests or websockets).

working well on mobile in the browser (this is only semi-possible because Apple has so far refused to implement the needed APIs. In particular the fullscreen API so a webpage can go fullscreen (or close to it ) like a native app can and the orientation API so a webpage can force landscape view. Android Chrome/Firefox has had both of these for 6+ years and it hasn't ruined the browsing experience there.

Yeah. Modern Apple sucks. I agree. lol

A well designed non-programmer friendly app for making things

It wasn't just that the tech existed. It's that there was an app that let people easily use tech to make stuff.I think you make a really good point here. I would add that it's not just about the content creation app, but also the hosting and distribution sites like Newgrounds. Newgrounds was a "proto-app-store" in many ways.

It could also be though the flash was just something that happened and it's time has passed.You might be right here. It seems like the big game engines like Unity, and the proprietary app stores, both on mobile and desktop, have taken over the hole left by Flash.

Ray Imber 2020-07-24 18:40:49

My TLDR; description of the "ideal system" we are describing looks like this:

  • A content creation tool that is polished and intuitive for artists (normies? non-technical people?)
  • with low barrier to entry scripting / programming interface
  • A runtime that allows for a low "time to first use" latency metric and good compression (that might mean vector based, or some other easily compressed asset, or taking better advantage of modern data streaming technology)
  • Is tied to some hosting platform. Some "app-store" or "marketplace" like system that is integrated with the creation tool to provide creators with low friction content distribution and hosting.

The technology to build all of this exists today imo, but:

Is there a place in the modern web (or modern computers in general if we include mobile devices) for such a platform?

Does it make sense to tie it to the web given the rise of mobile computing and politics like Apple's walled garden?

Ryan King 2020-07-24 20:32:29

It's a bit chicken & egg, whilst platforms accelerated the growth of the flash, the content existed first. I imagine modern equivalents might be able to compile and publish to many platforms, eg. apple / google app stores, native desktop, and the web.

Perhaps animation is a nice gateway into programming. Tweening is a nice simple point-click exercise but the more complex behaviour you need, the deeper into programming you go.

Ray Imber 2020-07-24 20:54:09

Perhaps animation is a nice gateway into programming. Tweening is a nice simple point-click exercise but the more complex behaviour you need, the deeper into programming you go.☝ This right here is a key insight I think!

From a "FOC" point of view. Flash served as a "gentle intro to programming" gateway drug for a generation of programmers.

Flash was the 2000's equivalent of Basic for many people.

What made Flash a good intro to programming tool? I think you just answered that question 😄

Ryan King 2020-07-24 21:03:23

@Ray Imber thought it would be interesting to make a thread about this https://futureofcoding.slack.com/archives/C5T9GPWFL/p1595624526464200

[July 24th, 2020 2:02 PM] ryan.king1809: I was thinking in an earlier thread how flash animation might be a good introduction to programming, and a lot of you here are working ways to democratise / make programming easier. So perhaps understanding how people learnt to program could offer insights into how to teach people to program and make programming in general less complex. So I'm curious, how did you learn to program?

Nick Smith 2020-07-23 07:28:21

Has anyone been searching for an "ideal" model for information? By this I mean an abstract model (not a DRAM/disk representation) with a vocabulary that allows a human to read, specify, and understand information with ease. We have existing models like RDF ("Semantic web") and property graphs (e.g. Neo4j), and in programming languages we have object graphs (OO languages), trees (functional languages), and tables (relational DBs). None of these models seem to have arisen as "the one true answer", partially because they are all difficult to reason about when operated on programmatically (or so I claim). I want a model for information that allows us to easily understand both static information structures (snapshots) and programmatically-maintained information structures (an evolving, stateful system).

The ideal model for information might define concepts like "pointing" (edges) or "nesting" (groups), and each concept will have a clear meaning. The ideal model will also have a semantics for mutation, e.g. you will know when you define a relationship like A points to B whether B can be deleted or modified in some way, and how this affects the points to connection. The model will also have a notion of stewardship of information, i.e. it should be easy to observe the source of a piece of information, and to know whether it is mutable or just a snapshot. (Yes, I believe the ideal model for information should have a vocabulary to describe distribution and trust).

Has anyone here thought hard about this? I've been churning on it for a month or two recently, and for many months over the last few years; I can't proceed with my own PL project until I get fundamentals like this right, since the model that I develop will fundamentally determine what a "program" even is. I think a key reason why discovering "the future of programming" is so hard is that we think too much about code and not enough about information. Code exists purely to transform information, and if you don't make strides on models for information then I don't think you can make strides on programming languages.

I have some ideas about a model, but I have no insights from others to validate it against. My conception is a very specific hybrid of mutable graphs and immutable trees nested sets that distinguishes between descriptions and references, and it seems very amenable to compact 2D representations, unlike most graphs. I won't describe it further just yet, since I don't want to skew anyone's responses.

Anyway, I'd love to hear from other people who have been thinking about this kind of stuff.

Nick Smith 2020-07-23 07:29:02

@Jack Rusher From your recent posts, perhaps you have some insight? 🙂

Ian Rumac 2020-07-23 07:56:54

The ideal model is a user defined n-ary tree… or well, a list 🙂

My long-term project is a tree editor that does exactly that - purely transforms the data.

You have a tree T, you write a transform function f(t)->g, you got a projected tree of G now, but inside I keep them connected via references - the model isn’t “G”, the model is “f(t)->G”. This way, you grow your codebase from the model outwards, expanding it into each category you need (sql schema, model, viewmodel) via transformations, or by creating new trees that reference stuff from any of the existing trees. That way, you mutate your original model and all the references get the mutation transformed to their own projection.

I keep it all inside a large model called Lattice, that is a basically a huge graph that connects over multiple dimensions (each transformation adds a new dimension to the graph)

Didn’t yet come to edges as mutation permissions, since I feel that isn’t a part of the pure model, but of a “projection”.

Nick Smith 2020-07-23 08:16:47

Your "transform function" is the same as "derived state", a database "view", and a "projection", right? We have a lot of names for it. That's an example of a programmatically-maintained information structure as I called it earlier. What about static structures? How would you encode a text document, or a (static) spreadsheet, and how do you derive meaning from the encoding? Spreadsheets in particular do not have a clean representation as a list or a tree. You'd have to do some shoehorning.

S.M Mukarram Nainar 2020-07-23 09:33:43

What do you mean by "information"?

In the most general form, this is the core question of ontology, which philosophers have been wrestling with for millenia. Slightly more restricted, you can look at GOFAI approaches to this problem, like cyc, which have largely failed to bear the kind of revolutionary fruit promised.

How general are you trying to be? What are you trying to achieve?

Jack Rusher 2020-07-23 09:34:53

This is a fairly deep topic for which a simple answer is impossible. A few fingers pointing toward the moon:

  • It would be best for such a system to store the data in a structure that "changes" through accretion rather than mutation (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.102.8253&rep=rep1&type=pdf, much emulated since). If every modification point is essentially a snapshot, you get time travel and other useful semantics for free (Datomic is a recent database that uses this approach).
  • Up-front schemas are brittle over time. The less you can get away with saying about structure, the better off you will be. (A special case of the more general advice to "design for change").
  • The approach whereby everything is a logical assertion (i.e. triples, sometimes called "Subject/Predicate/Object", sometimes "Entity/Attribute/Value", depending on the culture of the speaker) is the most flexible I've been able to come up with yet. This underlies RDF (and TripleStores generally), and is currently in vogue among those who have encountered datalog, mostly via Datomic.
  • It's very useful to be able to specify additional automatic behavior over triples via some kind of metadata, in the best case also specified in triples. (RDF via OWL, not Datamic.)

I have many differences of taste with the place where RDF ultimately went, but there's loads of good stuff in there too. You can find out more about the history of the "data as assertions" approach by reading up on https://en.wikipedia.org/wiki/Knowledge_representation_and_reasoning (as distinct from data representation), https://en.wikipedia.org/wiki/Frame_(artificial_intelligence)#Frame_language, and so on. This stuff is one of the threads that leads to object orientation, though much less emphasized in a modern context than the strand motivated by simulation.

The "immutable tree on disk" stuff comes from generalizing database journals, which for me starts in the 80s with https://en.wikipedia.org/wiki/Log-structured_file_system. Today there's loads of work on immutable logs for all sorts of applications, especially with the recent popularity of cryptocurrencies.

Duncan Cragg 2020-07-23 10:09:22

Wow this thread has already brought out so many fellow travellers who I didn't know were exploring the same terrain as I am! The history of my own project over decades is intimately tied to my search for the "perfect" data and data transformation approach, in search of the "purest" model of programming - which is one that is most cognitively aligned. Aligned to the cognition of a .. ahem .. "average human", so probably less to that of the "average programmer"!

So for me it is important to step back and look at common patterns of cognition - how we organise our perception of reality. One approach is to read Roget's Thesaurus! All the important cognitive concepts are there, organised in a specific idiosyncratic way. There are many other "meta-ontology" approaches, as have already been listed here.

Duncan Cragg 2020-07-23 10:12:16

I could start listing out what I believe are essential "reality modelling primitives" as you already have done yourself. For me, where I am right now in my journey, that is basically: identity of things, properties of things, relations between things.

Duncan Cragg 2020-07-23 10:13:43

At a more abstract level, you have symbols of value, order of those symbols and their aggregations, bags/sets of symbols. You have named properties that can have values.

Duncan Cragg 2020-07-23 10:15:46

So, as you can probably deduce, I've settled on something that looks like objects that have unique identity, which are bags of properties in the form "property name: property value". Property values are just symbols (text really) or ordered lists of symbols but can also be links to other objects by identity - relations between objects.

Duncan Cragg 2020-07-23 10:16:57

One issue that really bugs me is that I can't extract a single representation of order! There is order in my properties (I don't need that but I want it). There is order in my lists of property values, and there is order in the direction of the link pointers.

Chris Knott 2020-07-23 10:18:15

If you want to make it attractive to humans it needs to be built out of concepts that humans have "hardware support" for.

Sometimes there's a tendency to seek "elegant" solutions which use the minimum possible number of concepts, whereas I think it's often more natural to expand the number of concepts, even if introduces "redundancy".

For example, you can describe a bijection between XML and JSON, that would involve translating JSON lists into a something you can describe in XML such as ["one", "two", "three"] becomes <list-item index="0">one</list-item><list-item index="1">two</list-item>... or something.

You could say that XML is a more elegant way to represent information, because it is based basically only on the concepts of Containment, Naming and Properties. But because I believe that humans have "hardware support" for many more concepts, such as Sequences, I think that JSON is actually easier and more natural (for humans).

So basically my only input would be to be sceptical of mathematical beauty if the format is intended to store information relating to the human world.

Chris Knott 2020-07-23 10:20:38

There is a list of things that have been observed in every human culture (Donald Brown's Human Universals) and it is surprisingly long. Unfortunately it doesn't have much on the way of numbers (only the numbers 1 and 2) as some cultures are almost completely innumerate. It does have quite a few logical operations like Not, Or etc

Nick Smith 2020-07-23 10:27:08

S.M Mukarram Nainar By "information" I just mean data with associated meaning. I refrained from using the word "data" because it's a machine-oriented word and I don't want people to start talking about conventional data structures and pointers. I want to focus on the human interface, not the machine representation.

I'm not too concerned with standardizing ontologies or AI right now. I'm more concerned with allowing humans to group a bunch of symbols together by hand or programmatically in a way that makes sense for their own understanding. I'm designing a programming language, but unlike almost everyone in the last few decades, I'm not taking "arrays" or "objects" or "algebraic data types" or "databases" or "relations" for granted: I'm trying to figure out, from complete scratch, what information structures are easiest for people to think with when they are integrated into a complex system (e.g. a distributed app). I'm trying to be as general as I can, but my domain is "programming", taken broadly.

I want a model for information that allows users to encode information like "Bob has a car with 4 wheels" in the form that is most useful to their specific application. In a company database the car might be an immutable fact with an associated date and source. You might then tell me that the right model for encoding information about cars is the relational model. However, in a video game the car might be an entity with a position that changes over time, and so we need to be able to talk about the idea of change and the distinction between descriptions (where the description itself doesn't "change" as time passes) and references (where the entities referred to can change).

The question of "how do I model information" may seem trivial (or "solved") at first glance, but the moment I ask that you don't treat conventional data structures as axioms ("we already figured it out, just mix these existing things together and follow best practices"), it becomes incredibly deep.

Nick Smith 2020-07-23 10:43:13

@Jack Rusher I've liked the idea of "accretion, not mutation" in the past. But I'm worried that making it a requirement in a programming system is going to lead to space consumption problems for certain use cases. How do you get around that, if you aren't restricting your application domain and user base?

I agree that it's wise to limit unnecessary structure: scenarios where a relationship is specified with some kind of directionality/asymmetry that isn't inherent. I've been calling this "incidental order", and it's one of my biggest concerns. I've been inspired by Datalog, though I've come to a conclusion that mere relations (including as triples) aren't expressive/intuitive/"easy" enough as the sole information structure for for general-purpose programming*. I think it's part of the answer though. Do you believe otherwise?

  • I probably wasn't explicit that I want a model for information that can be used ubiquitously throughout a computation, not just as a "final output".
Nick Smith 2020-07-23 10:44:20

And thank you for the links! I'm going to chase them up later.

Jack Rusher 2020-07-23 11:08:09

Duncan Cragg Careful! 🙂 The age old practice of modeling human mental processes with first order logics has not gone very well. Even something as seemingly straightforward as object identity is quite fraught in practice: https://en.wikipedia.org/wiki/Ship_of_Theseus

Nick Smith 2020-07-23 11:09:01

Duncan Cragg

where I am right now in my journey, that is basically: identity of things, properties of things, relations between things.How do you distinguish between properties and relations? Is the fact that I'm "holding my tea cup" a property of myself, or am I just in a relationship with my tea cup?

At a more abstract level, you have symbols of value, order of those symbols and their aggregations, bags/sets of symbols.What is a "symbol of value"? I don't quite understand that term. And you seem to recognise both sets and bags? I've always found those to be in contention with one another, and so I've (for the meantime) concluded that if a user is in a scenario where they want a bag (which should be rare), they can simulate it with a set quite easily. The converse is not possible, though.

So, as you can probably deduce, I've settled on something that looks like objects that have unique identity, which are bags of propertiesI've currently settled on two notions that together can act like a conventional object. The first is something I'm tentatively calling a picture, which is a set with an exterior label (I call it the topic) that contains symbols and/or further pictures (these are called subtopics). These can be used to form the "descriptions" I was hinting at earlier; they are immutable value types. If you want a picture to be mutable (and thus behave like an object), you can stick it in a workspace, which is the unit of mutability. Workspaces are identified (and thus referenced, and queried) by the aforementioned symbols. A workspace's state evolves by a rulebook (a set of rules), which updates a workspace's picture in response to events. I plan to base the semantics of rules on logic programming. The end result will be something like "nested Datalog", though there is no literature that matches the model I described above.

Picture topics replace the need to have a special notion of a statically-specified "attribute", because the topic can itself be any value. This should hopefully make meta-programming possible, but at the very least, I hope it leads to a very minimalist (and intuitive) semantics.

All of the above is subject to change, of course! Given my current track record, I wouldn't be surprised if I find some major flaw in this kind of architecture.

Jack Rusher 2020-07-23 11:21:40

@Nick Smith In terms of storage, the natural thing to do in a log-structured environment is to have a "cleaner" that purges no longer referenced old versions subject to some policy. In the paper I linked, we built the system to purge whatever was no longer linked. In another system one might have a policy of "versions older than a year to which no one holds a dangling pointer". In either case, I would strongly encourage you not to consider practical matters of performance or storage efficiency at this stage. Go a bit mad, follow untrodden paths, find weird things!

As for expressivity/ease of triples, one would expect a system that can construct other representations on top of triples for ease of use. What that looks like in your domain is a very open question. 🙂

Nick Smith 2020-07-23 11:25:59

@Jack Rusher I'm definitely good at going mad! It's my perpetual state of being 🙂. Thank you. I'm going to keep pondering on all of this!

Ian Rumac 2020-07-23 11:28:53

@Jack Rusher which paper are you talking about exactly? I was on the verge of implementing a cleaner, “Interdimensional black hole” so to say that would purge empty references in the background, but couldnt decide on when to run it.

Nick Smith 2020-07-23 11:36:07

Duncan Cragg

One issue that really bugs me is that I can't extract a single representation of order!If you make any breakthroughs on this, let me know. I'm still trying to figure out how to represent sequences (lists, priority queues) and trees (e.g. family trees, or any other domain-relevant tree structure) in a non-hierarchical manner, such that users can perform arbitrary traversals (in any direction) and queries. My big constraint here is that I want to ensure traversals will always terminate, so I need there to be some measure of progress associated with the traversal rules. Another challenge is multi-dimensional ordered structures, for example, a spreadsheet! How can one describe a traversal across a spreadsheet? Every cell in a spreadsheet is ordered in two dimensions! My current line of investigation is to determine whether all kinds of ordering can be exposed as numberings, and sequence manipulation is manipulation of those numberings, i.e. a list might look like {(c,1), (a,2), (t,3)} and a priority queue might look like {(c, -12), (a, 7), (t, 34)}. I'm thinking of going deep and figuring out if lists and trees can be treated as spatial data sets and manipulated geometrically.

Duncan Cragg 2020-07-23 11:43:42

How do you distinguish between properties and relations? Is the fact that I'm "holding my tea cup" a property of myself, or am I just in a relationship with my tea cup?it's a property of you, the link to the cup, and a property of the cup, back-linking to you, since both of you care about the holding! Other links may be one-way: the puddle has a link to the sun that's warming it and evaporating it, but the sun couldn't care less about the puddle

Nick Smith 2020-07-23 11:45:58

That seems like a bit of an arbitrary distinction though, right? How do you formalize who "cares" about a relationship? How does it affect how a user models their application?

Duncan Cragg 2020-07-23 11:46:04

What is a "symbol of value"? I don't quite understand that term. And you seem to recognise both > sets>  and > bags> ? I've always found those to be in contention with one another, and so I've (for the meantime) concluded that if a user is in a scenario where they want a bag (which should be rare), they can simulate it with a set quite easily. The converse is not possible, though."3.2" "up" "red".

set/bag: just recognition that ordered lists sometimes don't need order, but have to be laid out somehow in space, which means the order is incidental. I don't think this is a problem though.

Duncan Cragg 2020-07-23 11:46:51

"who cares": it's up to you as the modeller

Duncan Cragg 2020-07-23 11:48:45

This thread is piling up and I need lunch.. 😄

Duncan Cragg 2020-07-23 11:49:36

What are your measures of success? To be programmable by techies or normals?

Duncan Cragg 2020-07-23 11:51:13

@Jack Rusher I take the approach of aggressively GCing old states/versions: if you want to model history, you do that explicitly yourself

Duncan Cragg 2020-07-23 11:52:34

On order (e.g. spreadsheets): that's a whole thread in itself

Duncan Cragg 2020-07-23 11:52:40

I'm getting overloaded. Time for lunch

Jack Rusher 2020-07-23 12:18:17

@Ian Rumac This http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.102.8253&rep=rep1&type=pdf describes one such implementation. We used multiple threads of execution. One of the benefits of the overall architecture is that multiple readers can continue running without any locking while writes are streaming in.

Duncan Cragg 2020-07-23 12:34:35

So ... fuelled up now.. 😄

Spreadsheets: well, tables, well... again it depends on the semantics of the table: for example, a list of objects can form a table with the common property labels as either row or col headers, and all the property values in the grid. If you have a genuine case of 2D tabular data - e.g., an f(x,y), then the order you select (x then y or y then x) only matters for optimisation

Duncan Cragg 2020-07-23 12:36:19

funny, can't think of an example of f(x,y) as a table, where col headers and row headers are either both symbolic or both ordinal .. can you?

Duncan Cragg 2020-07-23 12:39:01

(a 2D lookup table where row and col symbols are values not "property names")

Duncan Cragg 2020-07-23 12:43:20

If you make any breakthroughs on this, let me know. I'm still trying to figure out how to represent sequences (lists, priority queues) and trees (e.g. family trees, or any other > domain-relevant>  tree structure) in a > non-hierarchical > manner, such that users can perform arbitrary traversals (in any direction) and queries. My big constraint here is that > I want to ensure traversals will always terminate> , so I need there to be some measure of progress associated with the traversal rules.why non-hierarchical? how does that help with traversal termination?

Duncan Cragg 2020-07-23 12:45:19

I've currently settled on two notions that together can act like a conventional object. The first is something I'm tentatively calling a > picture> , which is a > set>  with an exterior label (I call it the > topic> ) that contains > symbols>  and/or further pictures (these are called > subtopics> ). These can be used to form the "descriptions" I was hinting at earlier; they are immutable value types. If you want a picture to be mutable (and thus behave like an object), you can stick it in a > workspace> , which is the unit of mutability. Workspaces are identified (and thus referenced, and queried) by the aforementioned symbols. A workspace's state evolves by a > rulebook>  (a set of > rules> ), which updates a workspace's picture in response to > events> . I plan to base the semantics of rules on logic programming. The end result will be something like "nested Datalog", though there is no literature that matches the model I described above.

Picture topics replace the need to have a special notion of a statically-specified "attribute", because the topic can itself be any value. This should hopefully make meta-programming possible, but at the very least, I hope it leads to a very minimalist (and intuitive) semantics.

This is what prompted my question above: who are your target audience? Is this going to be intuitive to everyone, if it's non-techies you're after?

Duncan Cragg 2020-07-23 12:46:09

(iow maybe you could draw a diagram with examples! 😄 )

William Taysom 2020-07-23 13:05:02

@Nick Smith "Has anyone..." asked in the place where a good fraction of us have. 😉 After playing in this space for twenty years, I'm not a believer in an ideal model. What is ideal will depend on the task at hand. What is better is having systems that you can readily shift between.

William Taysom 2020-07-23 13:08:17

You know you're in bad programming place when a conceptually straightforward shift proves difficult. On realizing that instead of having one of these things, you want to be able to shift between three different kinds. which will now require six months of developement work.

William Taysom 2020-07-23 13:09:46

Also today via Hacker News, I was pointed to Terry Tao talking about mathematical notation, which is of course a model for the underlying notions. https://mathoverflow.net/questions/366070/what-are-the-benefits-of-writing-vector-inner-products-as-langle-u-v-rangle/366118#366118

Nick Smith 2020-07-23 13:12:08

What are your measures of success? To be programmable by techies or normals?Definitely "normal people". Unusual folks like us can focus on developing the infrastructure that implements humane programming systems. Of course there's still going to be concepts that need to be learned and practiced for a person to develop competence.

Is this going to be intuitive to everyone, if it's non-techies you're after?Once learned from effective teaching materials, and with the aid of effective visualisations, yes, I hope it will be intuitive. I actually think I can map it to everyday representations like nested dot points and tables. But first I have to figure out the semantics I want.

Nick Smith 2020-07-23 13:17:02

Duncan Cragg

funny, can't think of an example of f(x,y) as a tableThe data that people store in a spreadsheet is usually tabular, but the spreadsheet itself, as a graphical artifact, is most certainly a function f(x,y) from row/column number to datum. Navigating a spreadsheet using a keyboard requires locating successor/predecessor cells within each axis. So a spreadsheet is perhaps better termed a grid, which one could argue is the generalization of a sequence to 2D.

Nick Smith 2020-07-23 13:20:15

why non-hierarchical? how does that help with traversal termination?Those are orthogonal, but the reason for eschewing hierarchy is to avoid a situation where a user specifies a data structure, and later realises that they can't express the query they want because the data is "ordered" in the wrong way. Then they change the structure or add a new one. Hierarchical data structuring always leads to this pain.

Orion Reed 2020-07-23 13:39:29

Been thinking about this problem for the last year or so, and I’ve ended up somewhere I didn’t intend so this may not be an answer you’ll like.

I don’t think there is any single representation that has all the desirable properties you’re looking for, but not only do I think that’s okay, I think we can do even better by moving up a level and instead look for a representation that can itself represent the more desirable representations. If we take a hypergraph or metagraph, we can use it to represent sets, lists, trees and acyclic graphs, etc, etc. And thus can embed structures with desirable properties if we accept a base representation that has few if any of the properties we would like.

Duncan Cragg 2020-07-23 13:50:11

We're gonna need some examples to chew on. 😄

Orion Reed 2020-07-23 14:10:03

I’ll pull out some references from my research library when I’m home, but in the meantime I’ll put a couple things forward.

There is a partial order to the generalisation of structures such that hypergraphs [1] are at the top, a subset of hypergraphs form a directed graph, a subset of directed graphs form an undirected graph, and this pattern follows down to trees, sets, lists, and so on.

There are many possible semantics for these structures and I’ve yet to see much work here as most of it is towards proving certain properties of these structures. Category theory provides useful properties but certainly doesn’t translate directly to nice semantics for an actual end-user system.

  1. This is not quite true, as metagraphs are more general though not yet well understood or defined. And also typed https://rcor.me/papers/typed-graph-theory.pdf. (Sorry for all the Greek!)
Orion Reed 2020-07-23 14:14:34

I’d add that I’m not proposing that this is the best way to interact with a system, and there are places where natural representations do not always fit in a machine-oriented way, such as functions, n-dimensional arrays, etc. But in these places there are natural representations that can be used in part to interact with them. I.e. representations of grammars for strings (not the data type, just ordered sets of symbols) along with logics, type systems, etc given an appropriate semantics and grammar.

Nick Smith 2020-07-23 15:52:40

@Orion Reed Idk, I'm not really being sold on the hypergraph thing yet. I've never seen an information model based on manipulating graphs that feels "good" and "intuitive" for general-purpose applications, and if that's not your point, then I'm not sure what value you're proposing they have. Mathematical formalization takes a backseat to user experience in my world.

Also, I can actually model hypergraphs quite easily in the information model I briefly described above (labelled nested sets). I'm not sure why I'd want to, though.

Chris Granger 2020-07-23 16:24:23

@Nick Smith he's saying that if you use hypergraphs as your canonical representation, all other structures are reduced to views and mutation rules over that hypergraph. This gets you the property that @William Taysom was talking about that it is trivial to go from one representation to another. It also gives you the flexibility to create "good" and "intuitive" interfaces on top without changing the underlying model.

Orion Reed 2020-07-23 16:26:07

@Nick Smith I agree, mathematical formalisations should take a backseat to user experience a lot of the time, and also agree manipulating graphs doesn’t feel good for general purpose applications, at least not yet. My point (which by all means you can ignore!) is that it may be useful to build the information model at a slightly higher level than your planned use-case, which may help de-emphasise finding a perfect representation which you may wish to tweak later.

I think there’s lots of merit in sticking to your intuition and discovering the emergent properties of your system [1]

I bring up these points mostly as exploratory, and to help support the idea of separating the model from the internal workings of computers or current computer systems.

  1. many great ideas happened this way, Unison for example discovered many great consequences only after deciding their basic principles of content-addressed immutable code.
Orion Reed 2020-07-23 16:29:09

Chris Granger yes that’s exactly it, well put

Chris Granger 2020-07-23 16:45:37

if your goal is to go after end users and also be truly general purpose, I think you'll likely end up on a hypergraph. People do not naturally think in strict structures, they think in very loose, just in time structure. As several people have said in here, that means you need to flow seamlessly between representations and allow for partial/incomplete ones to still be useful and to link to completely different views that color things in a bit more.

Andrew F 2020-07-23 16:46:56

This is what I've been thinking about for the last several years, and haven't gotten all that far. One of my goals is to provide an intermediate format for converting/proxying between systems speaking different languages (immediately commercially useful and helps overcome network effects). I think my most interesting idea at the moment is that data is a program (under a suitably restricted interpreter), that outputs itself, or parts of itself identified by an argument (e.g. treating a hash map as a function from keys to values). This also helps with one of my long-standing goals to ease mixing of manually and procedurally generated data.

Andrew F 2020-07-23 16:51:23

I thought about hypergraphs for a while, albeit when I was a lot younger and stupider, and my conclusion was that I'd rather go with a fundamental structure that makes it easy to implement hypergraphs. To me that looks more like a logic database or triple (tuple?) store.

Orion Reed 2020-07-23 16:53:08

@Andrew F that first goal of yours is one I’ve been pursuing for a while for the exact same reasons! Have you made progress you’d be willing to share?

Andrew F 2020-07-23 17:10:34

@Orion Reed haha, not really. I've spent the last several years building up ideas and tearing them down when I realize they're not general enough. I am confident at this point that the data store needs to be an active participant to support things like API translation proxies, and that solving the problem of Naming Things is important (tracking identities referenced in different ways in different representations). Ask me again in a year. :D

Have you already read the Functorial Data Migration peoole's work?

Orion Reed 2020-07-23 18:39:05

@Andrew F I hadn’t but will check it out, it looks compelling. I’m assuming https://arxiv.org/abs/1009.1166 is the work you’re referring to?

Andrew F 2020-07-23 18:52:10

@Orion Reed yep. I think they've built a company on their ideas, too. IIRC they still had to do some weird hacks that made me think it needed more work to be nice to work with in the real world, but definitely interesting. I need to read them more closely at some point.

Ian Rumac 2020-07-23 19:25:17

Oh, thanks to you guys I now know that what I was doing is a hypegraph 😄 IIRC my hypergraphy was basically a store of mostly maps of <ID, Value> and <Type/Dimension/GraphID, <ID, NodeData>> . Guess I was calling it wrong the whole time 🤔

Duncan Cragg 2020-07-23 19:35:11

I had to look up hypergraph, but I'm still confused about why it's not just the same modelling approach as .. JSON?

Duncan Cragg 2020-07-23 19:35:33

Or really just relations.

Orion Reed 2020-07-23 19:56:02

Duncan Cragg Relational models impose some more strict structure over your data in the form of tables. In graphs and hypergraphs the vertices/nodes and edges/lines are first class citizens.

Chris Granger 2020-07-23 19:58:37

relations in 6th normal form are a good practical representation for hypergraphs

Shalabh Chaturvedi 2020-07-24 00:38:08

Amazing thread. Been slow churning on this for years with nothing to show for it. Anyway, recently found this paper which may be of interest - tries to define a 'conceptual graph' that represents info of how the user sees it, without the storage representation details: https://pdfs.semanticscholar.org/2ae6/ac8fc13710d9c086c0e5cb952eef52c9b3cd.pdf

Pezo - Zoltan Peto 2020-07-24 00:58:15

@Nick Smith I’ve been thinking about similar things for a while.

What I see now is (obviously?) graphs are the only, truly extendable & fractal like structures.

Fractal like: which also means the minimum we can do with the “Graph Information” on a the “simplest level” is also the maximum we can do with it on “higher levels”. With that in mind I feel like the direction to is to build “Views” on the top of the “Graph Information” - which Views themselves are going to be Graph based entities. Also, we can say these Views would act like filters to reduce the noise of “all information” and deliver the proper context.

So after that, my answer is: just simple, pure Graphs, but a new question arises: how to build Views on them - even on multiple levels…

I just don’t see ANY other idea which can’t be translated to that approach. It seems to me it’s the alpha and omega.

It’s not accidental RDF node-edge-node triplets and stuff like that emerged and ontology is full of that.

Garth Goldwater 2020-07-24 00:58:48

this thread is amazing. i’ve been working on this since i started hoarding popular science magazines in middle school and wanted a way to organize them lmao. lately i’ve become convinced that whatever structure you settle on is going to have to be expected to be in an “incomplete” state, and that there’s some kind of dual relationship between data and computation that needs to be leveraged (thinking about issues like caches and garbage collection as a UX feature rather than an infrastructure bug). i’m working on a really stupid version of this stuff in json and will be posting in #feedback and #two-minute-week, and i would be delighted if any of the people in this thread ruthlessly criticize where i end up!

William Taysom 2020-07-24 01:29:34

When Chris Granger says "6th normal form," it more or less means "all hash tables" with array keys as needed and does a great job of capturing the dependencies of the form for every and , you can have a ___. Correct me if I'm way off base.

Chris Granger 2020-07-24 01:42:55

Yep! You can also think of it as triples where the entity can be a composite key. This gets you to true atomic units of data, reducing any further would cause information to be lost. The important thing that this captures is properties on hyperedges - e.g. something like marriage where the key would be two people and maybe the value would be the date or number of people in attendance.

Nick Smith 2020-07-24 01:48:53

I think my "nested labelled sets" conception is just a particular manifestation of a 6NF DB, with the only difference being it has a notion of scope and modularity that allows you to easily shuffle chunks of data around. Chris Granger this is like your scope-limiting bag "database" notion in Eve (I re-checked the name), except you can nest them inside each other.

Chris Granger 2020-07-24 01:52:47

yeah, we ended up calling them databases. We regretted adding them and removed them right after 0.2. The problem was that it became very confusing to figure out where things were and should be. Namespaced tags/attributes ended up working much better for us.

Nick Smith 2020-07-24 01:54:52

You have to have a boundary at some point though right? If your PL supports distributed apps you don't want to accidentally query some fact from a server in some Japanese village somewhere. At what point do you hit a "bucket" of data?

Chris Granger 2020-07-24 01:56:56

you would bring those in as namespaced tags, so #foo vs #japanese-village/foo

Nick Smith 2020-07-24 01:57:31

And every query must draw facts from a specific namespace?

Chris Granger 2020-07-24 01:58:19

you can arbitrarily union them together within a query, you can also bind them to some common tag and just query that tag

Nick Smith 2020-07-24 02:00:15

Isn't that the same as an Eve 0.2 "database" if you add the ability to make the database a variable? That would emulate the latter capability you mentioned anyway.

Nick Smith 2020-07-24 02:06:48

I guess I'm trying to understand this problem you mentioned:

it became very confusing to figure out where things were and should beI don't quite understand how this could be a serious problem. I'm no fan of hierarchical organisation in file systems, but a little bit of hierarchy is good for modularity, which you really need in any distributed system.

Chris Granger 2020-07-24 02:06:58

We should probably split this off so as to not derail the conversation further. The difference is largely in how people approach the two mechanisms. One is just a more specific name, the other is an actual place. We, ourselves, pretty consistently made mistakes about which place to query and write into, but we didn't experience the same problems with more specific names. Part of the difference is also how you selected a database in Eve (declaring it at the search/bind level) which made unions pretty awkward. That one's not at all fundamental and you could've chosen something else, but I suspect it would look a lot like namespaced tags if you did.

Chris Granger 2020-07-24 02:08:22

It's easy to forget the database name, or forget to change it when you copy a block over, for example. And the bugs that result from that are pretty hard to understand without some nicer tooling.

Nick Smith 2020-07-24 02:46:04

I think "namespaced tags" and buckets/databases only diverge in meaning in the presence of mutation (changing values). I'll discuss that in this thread (once I think it over further): https://futureofcoding.slack.com/archives/C5T9GPWFL/p1595571049299600

[July 23rd, 2020 7:12 PM] nmsmith65: Question: Can modularity (separation of concerns) be achieved without hierarchy? Can tags serve the same role as data buckets? Discuss. :slightly_smiling_face:

Duncan Cragg 2020-07-24 11:10:39

Yes, @Nick Smith, that's a good point: you can't edit db views. You can't edit the value in a formula cell. So a bucket that can evolve may look the same as a query result, but the latter only evolves because one of the former does. Same with tagged data: the "bucket" of items with that tag depends on items being tagged, and can't be edited or evolve independent of that. Whereas a directory of items, a bucket, can.

Duncan Cragg 2020-07-24 11:16:26

From an end user perspective, the question is whether the item or a collection of items is the primary focus. In some modelling tasks, it's important to model a first class bucket of items, e.g. the actual people standing in an actual room, rather than having a big swimming pool of people and picking out those who are in the room to be tagged accordingly.

Pezo - Zoltan Peto 2020-07-24 11:46:18

@Nick Smith Also don’t forget you can replace data on edges easily by introducing a new, intermediate node. (N1)--[E]--(N2) might become (N1)--(E)--(N2) , then you have a bipartite graph to work with.

Nick Smith 2020-07-24 12:10:26

@Pezo - Zoltan Peto Tbh I'm not really keen on thinking about graphs as a foundational concept. Graphs are a solution looking for a problem. You can use a graph to model a set of relationships, but a graph is not itself a set of relationships. I think we should talk about "entities" and "pointers" between them as a potential use case for graphs rather than talking about graphs first and figuring out their applicability thereafter. Otherwise our thought patterns will never escape from our preconceptions of what a graph is and can be.

Orion Reed 2020-07-24 12:51:54

@Nick Smith I agree for most of us we should not go from graphs -> use-cases and want to add: “Not every problem is a graph problem” which is evidently true. There’s also the useful truth that almost any imaginable problem can be translated into some sort of graph. (Space efficiency, practical implementation aside)

Orion Reed 2020-07-24 12:59:26

I often think in sets, partial orders, trees connected to lists inside of graphs next to some other structure, etcetera. It’s certainly a messy business and we’d miss a lot of perfectly sensible thinking if we forced people to first translate their thoughts into graphs. But I guess that’s what the computer is there for 😉

Garth Goldwater 2020-07-24 15:13:41

Chris Granger @William Taysom does that mean that clojure’s EDN is a natural fit for 6NF or am i missing something?

William Taysom 2020-07-25 07:30:19

I cannot read your mind Garth Goldwater. Are you talking about https://github.com/edn-format/edn? What kind of connection are you imagining?

edn-format/edn

Garth Goldwater 2020-07-26 00:37:42

yeah, that’s the one—i just mean that it has support for array keys, for example. is having sets point to other sets the minimum requirement for eg serializing a hypergraph or are there other capabilities a data format would need for comparably powerful semantics

Tyler Adams 2020-07-23 18:21:41

This week on code faster, 2 good and one weird. Good #1 pullrequest, a company I occasionally review code for on a part time basis synidcated one of my posts! Good #2, Gradient Ventures (Google's VC arm) retweeted their syndication! Weird: I tried writing a more captivating title, "jq features considered harmful", but it didn't feel right after launch. I tried a few more and eventually felt happy with "Avoid these 6 jq features". Still looking for good resources on how to write a good title if anybody has suggestions

Ivan Reese 2020-07-23 18:41:42

You should add a link to your post!

tj 2020-07-23 22:02:31

@Tyler Adams title 1 sounds like a title from pre 2018, and title 2 sounds like a title from post 2018 (for better or worse) 😛 it's interesting that kind of phrasing totally developed out of clickbait marketing but seeing it in increasingly reputable news services now too...

Tyler Adams 2020-07-24 06:52:59

Of course, https://codefaster.substack.com/p/jq-features-considered-harmful . Yeah, a good title seems to matter almost more than a good article these days...

Steve Dekorte 🕰️ 2020-06-01 19:59:49

If you feel (as I’m guessing most of us here do) that software development hasn’t progressed very much in the last several decades, can you share any thoughts/theories you might have on why that has happened?

Pezo - Zoltan Peto 2020-07-24 00:00:03

People don’t get Rx / eventStreams 😜 & FRP

Christopher Galtenberg 2020-07-24 00:05:12

that's so 2018, devs can only collectively swoon over one thing at a time, now it's CRDTs

Ivan Reese 2020-07-24 00:26:15

It was CRDTs in 2010, too ;)

Or maybe, like the hipster who burnt their mouth on the pizza, I was into CRDTs before they were cool.

Christopher Galtenberg 2020-07-24 00:49:50

You probably were all about FRP in 2009 - so tell us about 2028 Ivan

Pezo - Zoltan Peto 2020-07-24 01:11:42

Still, I think this is a real issue preventing progress. Sorry. :< 😄

Kartik Agaram 🕰️ 2020-07-02 20:33:22

I just came up with a list of things all programmers can agree are important, that non-programmers or newbie programmers tend not to focus on:

  • catching problems early

  • controlling evolution over time ("what did I change recently?", "need to move slow now")

  • controlling the space of inputs ("does the program still work in this situation?", "this feature adds too much complexity")

  • controlling dependencies

I'm curious to see other people's lists, and whether anyone disagrees with one of my bullets.

(Inspired by one part of https://www.capitalone.com/tech/software-engineering/go-is-boring)

Pezo - Zoltan Peto 2020-07-24 00:24:44

Kartik Agaram Hah, you are reading my mind! These are my top priorities as well!

I’d add that, which is remained unsolved to me in the past years, and maybe this is the main driver behind all of my research:

Be ready to change/delete any part of the code any time!

Mixing it with your 2nd (controlling evo) and 4th (controlling deps) point:

avoid broken abstractions

  • AKA -

don’t write (or evolve to!) code which forces you to delete more (prod+test) code than neccesary (in case of new requirements)

  • AKA -

eliminate God Objects (don’t even let them birth!)

-AKA -

Minimal surface: don’t make available any data in any given scope you don’t use => if you do, you are creating a God object and you have to REIMPLEMENT the stuff after deleting the nighmare and all of its connections.

Sure it is an obvious idea to do that, but hard/impossible(!!!) to do without the correct level of abstractions (I think anything “below eventStreams”).

To me it seems like we might need some level of redundancy to get there, but I’d pay that price if I can make sure the freaking God object and spaghetti bs goes away…

This is just a deep intuition at this time, but I’ll update on that later.

Nick Smith 2020-07-24 02:12:24

Question: Can modularity (drawing sensible "boundaries" between units of code and/or data) be achieved without hierarchy? Discuss. 🙂

Dan Cook 2020-07-24 02:34:05

Modularity (separating things into separate "wholes") is not necessarily related to there being any hierarchy. I think a lot of hierarchy comes into trying to shove like things into a "common base" and then subclass. But on that matter I'll just say: composition over inheritance, interfaces over subclasses, labels over a tree. "A city is not a tree". Some things fit multiple categories, or can play multiple roles, and that does not slice cleanly into exclusive buckets

Nick Smith 2020-07-24 02:38:31

Traditional approaches to modularity certainly induce hierarchy. In a typical program you have "modules" containing "functions" containing nested functions, loops, or other kinds of scopes. And that has nothing to do with OOP!

Nick Smith 2020-07-24 02:40:19

I'm discovering how complicated a question this is. I'm not even ready to provide a response myself yet! I'll respond a bit later 🙂

Dan Cook 2020-07-24 02:43:18

Anyway, breaking things into parts does NOT mean you have modularity -- less likely if there's a hierarchy involved.

Modularity is about how "whole" those pieces are: Do they make sense in isolation, or are they highly dependent / interconnected with each other?

I'll add more in a bit, I have to step away

Dan Cook 2020-07-24 02:55:16

Each module should be it's own world -- not a fragment of a larger picture. However, it may be an inhabitant of a larger world, or may have inhabitants of its own. But it should have no knowledge of the outside world, or of the inside world of its inhabitants. It may know if the interface-boundary of its inhabitants, but without their knowledge.

Dan Cook 2020-07-24 03:04:18

So for example, a Car may have an engine and doors and wheels, and might have behaviors (methods) like drive forward, turn left, etc. But "pick up the kids at noon" is NOT part of a Car, but part of a bigger scenario that may contain a car. That scenario would know that the car can drive and turn, etc., but it's naive to how the car actually does it.

Sometimes there's the illusion of modularity in software, where a larger behavior is handed off from one thing to the next; but that's not modularity, because you pull one thing out of the pipeline, and you've broken that overall behavior. Generally speaking, you want "vertical" slicing, not horizontal. So instead of A hands off to B hands off to C (which slices what should be one while picture into fragments), you instead have the whole flow exist as one whole thing, and it may call down into A, B, and C. But for example, the code that updates your database should not "know" that it's supposed to do that after the user clicks a button.

Dan Cook 2020-07-24 03:09:17

One clear indicator of broken modularity is when something tries to "happen at the right time" (rather than just letting the outer environment call into it as needed). This can look like event listeners, AOP, pipelines, or components communicating indirectly with each other through some "mediator" or "command" pattern. Those things can have their place, but if it's to split apart a larger whole, rather than to incorporate multiple unrelated whole things that don't need to work together, than that's not modularity: you're going to have to reverse engineer everything and trace the cause and effect all over the place, to really understand what's happening in that code, and you're opening the door for race conditions and unexpected breakages when things change. The whole point of modularity is to make it easy to understand and change things.

Dan Cook 2020-07-24 03:12:39

... I've thought a lot about this before :)

Kartik Agaram 2020-07-24 03:28:01

You can see a program as a hierarchy of modules and scopes, or you can see it as a network of scopes calling other scopes. Which is more important? The hierarchy doesn't feel like the important piece here.

On a different note, there's a common idiom of decomposing programs into layers (MVC, app/lib/kernel, etc.) That's arguably a hierarchical organization even though there's no containment. The network is a DAG, and it has a definite 'grain' to it. This feels like an important lens. Arguably here we already have tags, in the form of providers and so on.

Nick Smith 2020-07-24 05:33:43

Some things fit multiple categories, or can play multiple roles, and that does not slice cleanly into exclusive buckets@Dan Cook Yes, I agree. There's a need to be able to categorise something without allocating it to an exclusive location (a bucket).

Each module [...] may be an inhabitant of a larger world, or may have inhabitants of its own. But it should have no knowledge of the outside world, or of the inside world of its inhabitants.How do you identity whether a module has inappropriate "knowledge" of something external? You must be talking about Objects specifically, right? Classic information hiding concerns etc. Your answers all seem to be in the context of OOP and method calls.

Generally speaking, you want "vertical" slicing, not horizontalI'm not really clear what distinction you're trying to make there. Are you arguing for call stacks (RPC) over message-passing and/or events? Call stacks are definitely banned from my own design. They're irredeemable in a distributed system.

you're going to have to reverse engineer everything and trace the cause and effect all over the place, to really understand what's happening in that code, and you're opening the door for race conditions and unexpected breakages when things changeThese are problems induced by poor language and tool designs; they're not really an immediate consequence of having an event system. I agree that if you have some kind of event system, then it has to be designed to play a carefully thought-out role in a larger architecture and in a way that can't be abused or "used wrong".

Nick Smith 2020-07-24 05:41:35

I feel like your overall point is a condemnation of existing software architectures and design patterns, rather than a denouncement (or advocation) of any particular abstract programming primitives. I don't know what else to say to that. I'm certainly not about to defend the status quo of software engineering!

Nick Smith 2020-07-24 05:46:50

Kartik Agaram You're talking about code, but what about information? Are you saying that a piece of information (e.g. an employee record, or the state of a video game) should be represented as a network of scopes? How do I address that as a self-contained unit?

Nick Smith 2020-07-24 05:47:12

Data needs to be modularised too. Not just code!

Chris Knott 2020-07-24 07:49:48

This reminds me of A City Is Not A Tree, where he says a city should be modelled as a semilattice. In particular it has some discussion similar to above about when things are truly "separate" or not

Stefan Lesser 2020-07-24 10:01:37

The classic paper https://www.cc.gatech.edu/classes/AY2013/cs7601_spring/papers/Simon-Complexity.pdf has a lot to say about hierarchy, and where it comes from. It's hard to not see hierarchies everywhere, although it isn’t really clear if that's because they are everywhere, or if it's because we just like to see them everywhere. (Hint: it's us. Our brains love containment as a foundational structure for sense-making.)

Wouter van Oortmerssen 2020-07-24 18:27:47

In the abstract, if making a "module" is taking together N nodes in a graph such that internal connections are isolated from ones that go thru the module boundary, then not allowing hierarchy at all will limit the "arity reduction", since either there will be a ton of modules, or modules will contain a ton of nodes. Hierarchy will help with the cognitive complexity of the graph, IF the average amount of edges is low or very clustered. The problem with hierarchy is what happens when a new edge gets introduced, and the system doesn't allow re-running the modularization heuristics from zero 🙂

Dan Cook 2020-07-24 20:27:23

One thing I'll say it's that it often makes sense to have hierarchy of the data model, and you'll almost always have a hierarchal execution model (e.g. data composition and function composition). But it's a mistake to shoe-horn one into the other. That's the mistake I see most often in OO programs: This part of the use case touches this data (class), so that class owns that slice of the behavior, e.g. Car.DriveToTheStore() (or maybe maybe MapNavigator.DriveToTheStorePart1() calls Car.DriveToThrStorePart2(), etc.)

Ope 2020-07-24 21:40:00

@Dan Cook to illustrate with another example, paper.cut() this for me is a wrong way to model stuff. Somethings are just data and can’t do anything. They should be acted upon instead. It should be cut(paper).

Kartik Agaram 2020-07-24 21:42:21

Multimethods are useful here.

Dan Cook 2020-07-25 01:16:40

Ope - Exactly. I'd say that any proper module are just x, and only contain functionality (if any) for acting on that x. That x can be simple data, or a whole system -- so long as it's a whole system (which can contain other entities that are also whole in the same way). A module does not act on its neighbor or outside world, only on its contents aka "itself".

@Nick Smith - That's what I mean by "vertical" slices (e.g. "down" = my constituents) versus "horizontal" (e.g. I'm the middle part, and my neighbors are the left and right parts, of some bigger whole, and none of us can be understood in isolation).

Dan Cook 2020-07-25 01:52:35

I saw an ad once, of a boy walking through his house commanding IOT objects to do random things: "Fridge, turn on the kitchen lights. Toaster, read my email. TV, set an alarm on my phone". Or something like that.

Nick Smith 2020-07-24 06:10:49

I think the above question is better split into two, so here's a separate prompt:

What is the difference between an exclusive data bucket and a tag? Is one inferior to the other? How do you tell them apart, behaviourally?

(My definition of "bucket" here means simply an exclusive location that a datum is considered to "live" within, whereas a "tag" is not a residence. Example of buckets: the "folders" of a hierarchical file system. Example of tags: the labels placed upon Github issues or the #hashtags of social media posts.)

Chris Knott 2020-07-24 08:43:21

I am 100% sure these map to different processors in your brain. The exclusivity of a bucket allows you to leverage your Location powers. As things like the Mind Palace technique, and the trick of returning to the place you lost your train of thought, show, leveraging our sense of physical location is very powerful.

Tags are also brilliant, but they leverage a different thing, which is our natural ability to categorise and stereotype. This is mainly useful for describing queries and commands.

I remember having an argument about 15 years ago with somebody who was saying that filesystems should be rewritten to be based only on tags, as it's more general. They made the (good) point that it's absurd to distinguish between /usr/photos/wedding/ and /usr/wedding/photos/. I still struggle to explain why I hate the idea so gutturally, but I do. I can't relax until I can say "that's there's, that's here" etc.

Basically the ideal system for me is built on a bedrock of buckets, but with the ability to arbitrary query it based on properties, including arbitrary user defined tags. Something's location, i.e. it's filepath can be considered an implicit tag but it should be recognised as fundamentally different.

I am actually making a system like this; basically a Lucene+Tika powered add-on for a filesystem. Impossible to know how universal my preferences are 🤷

Jack Rusher 2020-07-24 08:52:06

There was a good bit written about this distinction in the early 00s, trying to tease out the differences using the terms taxonomy and folksonomy. Some of that work might be of interest to your concerns.

Chris Knott Do kangaroos go in /animals/australian or /animals/marsupial? Is a hot dog a sandwich?

Chris Knott 2020-07-24 08:56:40

I think the point is, it doesn't matter, there's value in it going Somewhere if that allows you to make use of a sense of location.

Where does a spork go in a kitchen? I bet it varies by person, but I bet all of those people would remember where they put it, in their own kitchen. In someone else's kitchen they would have to start querying and searching, for sure.

Chris Knott 2020-07-24 08:58:05

I recently sorted out my Lego so been thinking about this a lot 😅

Nick Smith 2020-07-24 09:07:48

Chris Knott So in the "models for information" thread, Chris Granger was talking about how he prefers the idea of "namespaced tags", which look a lot like file paths, so you can write something like /usr/photo/wedding/. The distinction from exclusive buckets though, is that you can reference a single datum under multiple different paths! How does that idea feel to you?

Nick Smith 2020-07-24 09:12:08

@Jack Rusher Those terms are leading me to some interesting resources. Thank you!

Stefan Lesser 2020-07-24 11:05:43

@Nick Smith You mention a lot of different things as part of the “bucket” category, so it’s a little difficult to come up with a single, universal answer to what the differences are.

Mathematically, a set and a tag can both be just a binary relation without any explicit properties assumed. Then they could be the same, behaviorally.

A list implies some sort of order on multiple relations of that kind, which a tag doesn’t (although you’d always have to order elements tagged with the same tag in some way to display them).

Tables and databases add more assumptions on the relations they model. Are they reflexive? Transitive (which you need to model hierarchy)? Etc.

Tags probably feel more flexible because they don’t assume anything about the relation they model other than that there exists one (perhaps if it’s one- or two-way?), while “buckets”, especially when seen as containers, do assume that these relations have additional properties which makes them less “flexible”.

At the end of the day though, the “purity” of tags is diluted by practical concerns, e.g. how to display all elements tagged with the same tag, and then you’re forced to ensure the relations have certain properties, and suddenly you’re back in container-land, just that the same elements can now also be in several containers at once. And then you run into questions of identity: if I change that element in one category, does it change everywhere, or does it just change in the current context (was it just a copy)?

Also, not hard-coding any properties of these relations basically just shifts the burden on the user; they still need to remember what a tag means to them and keeping different kinds of meaning apart. That’s when they suddenly re-introduce containment with hacks like namespaces or paths.

Technically, modeling fewer assumptions on relations gives you more flexibility in exchange for performance, as the system can’t make certain assumptions (e.g. order) which could be used for optimizations (e.g. indices).

Thankfully, the way the system seems to work from a user’s perspective doesn’t necessarily have to be the way it’s implemented. That probably is what good abstractions are about — they’re not just hiding something, they’re hiding a dramatically different structure that you wouldn’t expect from how the system behaves — and hopefully the way it behaves is easier to understand than how it actually works.

Nick Smith 2020-07-24 11:59:23

Stefan Lesser I think we're going off into the weeds a bit here. I'm (personally) not interested in talking about specific data structures or data models in this thread. That kind of discussion is best reserved for the thread I initiated yesterday. I listed a couple of examples only to hint at how the abstract notion of a "bucket" can manifest.

“buckets”, especially when seen as containers, do assume that these relations have additional properties which makes them less “flexible”.I think the actual interface that users are presented with is going to be the main driver of assumptions about what a bucket means. My definition of "bucket" here means simply an exclusive location that a datum is considered to "live" within. That's extremely broad, and my hope for this thread is that we can work out the relevance and utility of buckets in comparison to tags.

And then you run into questions of identity: if I change that element in one category, does it change everywhere, or does it just change in the current context (was it just a copy)?I actually believe this to be the only difference between buckets and tags. In the presence of mutation, the two concepts may behave differently, and without mutation, they are equivalent. I've not yet had time to develop detailed reasoning as to why this might be the case. I'll hopefully post something here in the next 24h.

Pezo - Zoltan Peto 2020-07-24 12:10:23

Set ~= Tag isn’t it?

As for List / Table: they have an extra layer of connection via integers (list 1D, table 2D), but you could replace this “mesh” with adding proper next/prev information (tags) everywhere. Integers themselves can be modeled! You should check out Idris!

list of [1,2,3] VS

set of numbers(1,3,2) + nexts( (1,2) (2,3) ) + prevs( (2,1), (3,2) ) + the automation which adds these pieces of information always on change.

To me, naturally, if we would like to be really really precise we would only use Sets + adding out extra layers of information to the models by ourselves, but Integers are so useful and make us so capable to hack around with a degree of certaincy without fluff. However, using integers exposes logic you can use to reason about your code.

On the other hand, building on Integers means you are exposed to “vulnerability”, because you don’t use the “real interfaces” Integers themselves really do have behind. (eg. successor aka “next”/ successor^-1 aka “prev”)

Nick Smith 2020-07-24 12:14:51

We're off-topic again! I'm going to delete the mentions of those concrete data structures from the question. They are not really what I was trying to talk about at all here.

Pezo - Zoltan Peto 2020-07-24 12:16:01

Ah. Ok. Then my answer is: nothing. 😄 But maybe I don’t get the idea.

Nick Smith 2020-07-24 12:18:08

I added an extra note to the question clarifying the conceptual difference.

Chris Knott 2020-07-24 13:14:17

I think the key distinguisher is the exclusivity. This is what maps to our natural understanding of location and identity. An object can only be in one place. If otherwise identical objects are in different locations we perceive them as copies. I think this persists even if mutations on one affect the other. We perceive the "other object" as being magically affected "at a distance", we can't perceive it as one object with two locations. The notion than an object can only be in one location at a time, overpowers the related notion that objects can easily change their location and persist their identity.

This is not quite the same as containment. The features of physical containment are transitivity and anti-reflectivity. If A contains B, then B cannot contain A. If A contains B, and B contains C, then C is also inside A (indirectly).

A filesystem obeys these physical properties, but something like Python's list does not obey either. This is why users get confused by lists that contain each other, and objects being changed when they are in two lists. It is also why symlinks can be so confusing. (You thought you were deleting a copy? Too bad sucker!)

Stefan Lesser 2020-07-24 13:31:29

Let’s go off-topic to the other side then… :-)

When you say “interface” I hear “how users understand it”. Then we can talk about my favorite topic: image schemas. These are cognitive patterns that we all use to structure our understanding.

A “bucket” is an instance of the container schema. Things are either in it or not, and it has a boundary (which we might or might not be able to describe precisely). That means that the container is of a different quality than the elements it contains.

A “tag” is an instance of the link schema. It just means there is something that connects the things at the two ends like a rope (imagine the force you feel when two items are tied together with a rope; and it is such physicality that gives meaning to the abstract concept). The two items connected to each other don’t automatically have different “status” like in the container version, although they could have through other schemas in effect simultaneously.

We can cope with the same things being in different containers at once, usually through frames, which are larger contexts of experience. E.g. when you say “cut the flesh” and you are in a restaurant, you evoke completely different images than when you’re a surgeon in a hospital. And it even works out ok on the surgeon’s night out to the steak house. ;-)

Now if you use a tag to signify membership to a group, e.g. all blog articles tagged with “technology”, then it’s used much more like a container and likely understood based on the container schema.

There are also more complex image schemas that could be relevant, for instance whole-part, which is a little like a container, but where the elements don’t just have to be present, but also need to be arranged in a certain configuration for the whole to emerge. E.g. if you disassemble your car and still have all the parts, it’s not really a car anymore. (That’s also behind the layers example Kartik made in the other thread.)

Or take the center-periphery schema. This is how we understand gradual or fuzzy relations. Some things are “core” or central, and if you change them the thing is no longer the same thing, e,g. a tree where you cut the trunk is still a tree, but it’s not the same tree anymore. Other things are peripheral and can change, but if they do the thing still stays the same. E.g. if the tree loses all leads in winter it’s still the same tree. Oh, did you have a haircut recently? No problem, still you.

The difference between “bucket” and “tag” can be as simple as container vs. link, depending on how you use it.

If the identity of an object changes when it’s modified in different places, does it mean it wasn’t supposed to be the same thing in the first place? This is at the core(!) of programming issues around value vs. reference types and affects your system design. What parts of the elements tagged or put into buckets can change without making them a different thing?

Chris Knott 2020-07-24 13:57:28

I think I disagree that tagging is the same as linking. Tagging to me is a kind of a categorizing/grouping. It's a type of non-exclusive container. Then I would put "bucket" as a separate image schema of exclusive container, which to me feels like a v important distinction. Mistaking a non-exclusive container for an exclusive container is surely to root of those spooky action at a distance gotchas.

Garth Goldwater 2020-07-24 14:27:00

deep in the weeds here, but i think that the core of the ambiguity here is about identity vs value. in my head a value is something you can “get to” by eg a query or a computation (paths, links), whereas an identity refers to more of a physical object you might find in a place (something you can mutate). if you change a path or a computation, you get a different value. if you change “a thing”, the values update (properties of that thing update? language is hard). that kind of implies that a paths and computations are “things” that “give you” values, which strikes me as both exciting and scary (too meta?)

Garth Goldwater 2020-07-24 14:30:44

if that’s the case, buckets are things that contain things whereas tags are things that return or evaluate to values (lists of things). i think?

i think the system needs to address both copy & paste and linking but it needs to do so in a closed way (algebraically)

Stefan Lesser 2020-07-24 08:16:16

I think some of you here will enjoy this podcast by Ryan Singer of Basecamp, author of Shape Up:

https://synthetic.transistor.fm/

Brian Zindler 2020-07-24 20:40:23

I’ve been really enjoying this podcast. I don’t always understand what Ryan is saying but it is interesting and relaxing 😌

Joe Nash 2020-07-24 12:10:12

I just put out the latest Enso devblog:

https://medium.com/@enso_org/enso-dev-blog-friday-17th-july-702456f6f94

This one’s got some neat stuff in it, including first look at the standard library (in textual Enso, not yet in visual), and the colour-by-type for ports and edges that may be familiar to users of Luna 1.x.

🐦 Enso (formerly Luna): 🚨 New dev blog 🚨 This week: - Types represented in the colour of ports and edges - Context-sensitive code suggestions database - CLI for the Enso launcher - First look at the standard library, with State, List, and testing https://medium.com/@enso_org/enso-dev-blog-19th-june-2020-335e528d50b

Joe Nash 2020-07-24 12:10:32

Ivan Reese I think the layered state stuff speaks to some of your questions about variables

Joe Nash 2020-07-24 12:57:43

(just updated because I managed to post the old link)

Ope 2020-07-24 12:39:07

What are the axes on which different programming languages differ?

So far, I have

evaluation - eager or lazy

abstraction mechanisms - classes, modules etc

types - static, dynamic, strongly, weakly (I know first 2 and last 2 are different categories🙂)

syntax

primitives

What else?

Orion Reed 2020-07-24 12:44:58

Perhaps paradigm, exceptions, or expressive power? (As measured by some formal heuristic, such as statement ratio or line ratio, often compared to C)

Orion Reed 2020-07-24 12:46:43

I don’t really like my contributions above so perhaps I can ask a useful question. Could you further define axes, in this context. Should they be formal properties? Should the options be mutually exclusive?

Joe Nash 2020-07-24 12:48:19

Size? There’s a lot of languages, i.e. Lua, where a major feature they espouse is being small in size and embeddable, for example

Ope 2020-07-24 12:52:48

I mean something concrete that’s a property of the language not just what it affords. Like you can do functional programming in the broad sense in python for example but Haskell affords it better so I want to keep paradigms out since the programmer can decide to use different paradigms. I remember something Phillip Wadler said(I think he is the one who said it) that Haskell is the best imperative language.

like a friend pointed out Memory management - Garbage collection. Though I wonder if garbage collection is going a bit into the implementation vs. what the language actually is.

Ope 2020-07-24 12:59:08

Pointers or no pointers. Mutable variables

Garth Goldwater 2020-07-24 14:34:08

scope and name resolution!

Ivan Reese 2020-07-24 15:14:19

(There needs to be a :sigh: reaction)

Ivan Reese 2020-07-24 15:19:30

Considering generics, one of the axes could be: how dynamic is polymorphism, and where is it handled? (Is it just based on data types, or are there protocols, or templates, or generics, etc)

Also... how large is the type-level part of the language? Is it just primitive hints like Int / String, can you define new types, or is it basically a whole other execution context (a la Idris)?

Ivan Reese 2020-07-24 15:27:59

Another axis (or, rather, a space): what details of the underlying stack do they reveal, redefine, or obscure?

Ivan Reese 2020-07-24 15:32:27

How are they meant to be evaluated? Effectful statements in order? Some sort of tree with branches in parallel? Some sort of search through a possibility space? No notion of evaluation at all? (Not all programming languages are meant to "run" on a "computer")

Ivan Reese 2020-07-24 15:34:30

(Many of these points won't lie on a line unless you sort of... rank them from "totally chill and normal and boring" to "very eccentric, don't invite to the office", which I think is a wonderful way to rank ideas in computer science)

Doug Moen 2020-07-24 17:37:56

Instead of "mutable variables", I prefer 'pure functions and referentially transparent expressions' vs 'shared mutable state'. Curv is in the former category, but it supports mutable local variables and a while loop. Curv wants to be a better imperative language than Haskell.

Will Crichton 2020-07-24 22:06:47

In my experience:

  • automatically garbage collected vs. not
  • statically vs. dynamically typed
  • inheritance-oriented vs. composition-orientedThe three most useful high-level axes for comparing languages.
Will Crichton 2020-07-24 22:11:17

📷 image.png

Doug Moen 2020-07-24 23:32:52

The method by which garbage on the heap is collected affects what language primitives are available, what is efficient, and how you write code. There are multiple choices: tracing gc (most languages but originally Lisp), C, Rust, Swift, etc.

Daniel Garcia 2020-07-24 19:24:08

I think that many companies are standardizing a workflow, that before writing any code you need to write a design document with the options on how to solve a problem and the chosen solution. A lot of times this document has the code changes required by any of the solution options.

To me the options that we didn't end up following seem as valuable as the chosen option, and those options should also be captured in code. A really easy way could be in separate branches, but then we loose visibility of them.

Is anybody familiar with source control software or with patterns to work with source control that also keeps tracks of options considered but not followed at the end?

Martin Sosic 2020-07-24 19:33:28

I can confirm regarding design documents (we called them Tech Design Docs - TDD - not the best name since it is confused with test driven development).

Regarding documenting different options, usually we would consult the TDD or ask somebody, which is certainly not very approachable.

And if there was a clearly better alternative to implement something, usually we would describe it in TODO comment next to the implementation.

However, I wonder how often somebody really asks (why wasn't this done in this way), from my experience, I haven't seen that happening very often, at least not at the degree where reviewing all the previously considered options would be useful. But it does happen sometimes, and then TDDs usually worked out (but with lot of digging, figuring out the latest one and so on).

Just thinking out loud, I might on the other hand find it useful if they were more available, but it is hard to imagine right now.

Kartik Agaram 2020-07-24 20:02:48

Yeah, I'm not aware of existing solutions, but this is a problem I've often felt and tried to hack my way towards.

On my projects I use a system of layers so that I can keep track of past versions with fewer features. And continue to keep them working in CI: http://akkartik.name/post/wart-layers. Layers form a linear sequence, and I've often considered introducing branches. But I've never found a strong concrete use case and clean way to do this.

One easy approach may be branches as you mentioned coupled with links to those branches (on GitHub or wherever) sprinkled in a few key places that the branch modifies. I like links 🙂 (https://futureofcoding.slack.com/archives/C5T9GPWFL/p1592285060323600?thread_ts=1592252831.319600&cid=C5T9GPWFL)

Kartik Agaram 2020-07-24 20:04:19

Here's another attempt in an old project of mine, creating a subdirectory called 'alternatives' with clones of the top-level at specific points: https://github.com/akkartik/wart/tree/master/alternatives/lite. And each of them has a subdirectory called 'orig' with the baseline to compare against. Like I said, totally hacky.

Daniel Garcia 2020-07-25 18:01:25

I've been thinking more recently of a code project as a set of knowledge in a domain or to solve a problem. I wish this knowledge could not only be on the final decisions but also on wrong decisions and the paths not chosen

Andrew F 2020-07-26 18:24:39

It sounds like you want to distribute branches (makes me think of multiplicative distributivity, anyway) down to the source file or function level, or something like that? That seems like an interesting idea. The fundamental obstacle in my view is that a lot of those roads not followed will, by nature, affect the design of large swathes of the project, like whether certain files exist at all. It might be that the best thing is to add annotations, uh, somewhere, about where those branches' existence should be surfaced in the VCS or code browsing UI. E.g., somehow when you're looking at the router for your REST API, there's a button that shows the branch where you tried gRPC.

Kartik Agaram 2020-07-26 18:36:15

You're right that many alternatives may require pulling in more changes. But not all. There's lots of value in simpler scenarios.

For example, here's a self-contained alternative in a code comment that I've found useful for 10+ years.

https://github.com/arclanguage/anarki/blob/0913288ec1477f2598e8095a2b5e9b14eb97dc4e/arc.arc#L662

Andrew F 2020-07-26 18:52:00

Good point (and nice example). It might be easy to just branch on the size and scope of the diff when deciding whether to show it inline. Less than 20 lines and all in one file? Just show it, otherwise put it behind a button.

Ryan King 2020-07-24 21:02:06

I was thinking in an earlier thread how flash animation might be a good introduction to programming, and a lot of you here are working ways to democratise / make programming easier. So perhaps understanding how people learnt to program could offer insights into how to teach people to program and make programming in general less complex. So I'm curious, how did you learn to program?

Ryan King 2020-07-24 21:02:21

I learnt the basics via https://store.steampowered.com/app/383730/RPG_Maker_2000/. You can use it to make little gameboy-like RPG games with point n' click coding (I wanted to make my own Pokemon obviously).

At first if I wanted something different to happen I just duplicated the map, so if you entered the forest, and went back to town you'd end up in an entirely new but identical map with characters saying new things. I had 100s of identical maps but the great thing about the RPG Maker is you could download and see inside other people games.

So I downloaded someone else's game and they only had one copy of each map and instead they used these things called switches (boolean values) to make different things happen after particular events. Soon my games had 1000s of switches. Eventually, I downloaded another game and it had barely any switches instead it had a single storyline variable that would increment by one every time something significant happened.

From there I learnt to use variables in more complex ways, and whilst I only pursued programming as a career fairly recently, I've used a basic level of programming with almost everything I do, and that's stuck with me as a foundation ever since.

Ray Imber 2020-07-24 21:15:56

When I was a kid, we would get the "Things You Never Knew Existed" catalog in the mail. For those not familiar, it was full of mostly useless "as seen on TV" type products. I loved looking at all the weird stuff in that magazine...

I somehow convinced my parents to order two things from that magazine. First was a deck of Pokemon cards. Second was "Interplay's learn to program BASIC on CD-ROM"

I am a product of late 90's edu-tainment 🤣

I found a youtube video of "learn to program BASIC" for your horror and entertainment:

https://www.youtube.com/watch?v=uBYz9syhNAA

Ryan King 2020-07-24 21:21:30

@Ray Imber this aesthetic is clearly what FoC projects are missing

Ope 2020-07-24 21:31:34

So technically I was taught QBasic in secondary school but I don’t remember any of it.

Then first year in uni picked up Java but never got to the point where I felt competent so I dropped it.

Then I found Python In year 3 I think and I loved it! Compared to C, which was another language I dabbled in because I wanted to write embedded systems; It had/has better UX. With C, I guess I was way too sloppy and would get frustrated by the segmentation faults + it was really low level while python had this robust standard library.

To get proficient, my gateway drug was competitive programming - Hackerrank in particular. It was/is fun coming up with solution and it appealed to my math/competitive side a lot. Was a side thing and planned to write embedded systems but here I am 🙂

Mariano Guerra 2020-07-24 21:53:32

html, then copypasting javascript without knowing what I was doing (20 years ago), then c

Garth Goldwater 2020-07-24 22:27:25

cheating at warcraft 1 bychanging the .ini files to finish the campaign because i was too young to understand how to be even marginally good at it lol

Zach Potter 2020-07-24 23:53:35

Ryan King that's exactly how I started coding 😛 I got my hands on a burned copy of Macromedia Flash 5 and started with bouncing ball animations. I remember using a lot of free tutorials. At some point I learned to trigger frame changes with buttons, and that's all I needed to start making cursor mazes where you need to avoid the walls and moving obstacles. All of the obstacles were just animated buttons that you weren't allowed to hover over.

Zach Potter 2020-07-24 23:54:56

That's all possible without having to write any ActionScript, which I did eventually learn, but I think it was a steep learning curve from there on.

Zach Potter 2020-07-24 23:59:51

I wish I could remember exactly what features of the editor/model made things accessible for me at 13. But I'd guess it had to do with having a traditional graphics editor with the capability of attaching code/behavior to objects on the canvas.

Paul Butler 2020-07-25 00:02:58

It was QBasic for me. At some point I discovered that Microsoft Office came with VBA which was fun because I could make buttons and stuff.

Ryan King 2020-07-25 00:28:52

Ope maybe we should be teaching programming in a way that fits into Bartle's taxonomy of player types ( although I'm a bit iffy on psychological taxonomies )

@Zach Potter I'm no scientist but that's theory validated for me! 🎉

Brian Zindler 2020-07-25 01:07:55

As a kid I was briefly exposed to programming through gamemaker and a community college java class. But it never really stuck.

As a college freshman I took intro to programming (also in java 😭) but at the time I didnt really have a reason to want to learn to program so it never really stuck.

I started programming seriously my senior year. I became motivated to actually learn to program after I learned about people I felt were doing interesting things with computers (Bret Victor, Paul Graham, _why, David Nolen, Rich Hickey). I also felt motivated to learn because I was graduating from an unknown liberal arts school with a low gpa 😅.

I suspect for most people they need to first understand how they can use programming to do things that are meaningful to them (make games, music, money, “I want to be like x person”, learn things, etc.) in order to have the discipline to learn. I think starting with a domain specific tool for doing meaningful things like a game maker and allowing users to “open the hood” with programming is a good way to scaffold learning.

Ryan King 2020-07-25 01:38:26

100% - if they taught me how to play the Mighty Morphin' Power Ranges theme instead of hot cross buns on the recorder in kindergarden, I imagine I'd at least have some musical talent right now.

Kartik Agaram 2020-07-25 01:52:38

I saw a computer for the first time in my life at age 18, in my sophomore year of undergrad. However, my dad was always sure that it was the field for me (even though he had no computer knowledge either). So he bought me a computer book when I was in IX or X grade -- on dBASE III Plus. And I read it a few times over the next few years. In my freshman year I was declared CS but had no CS courses, and we weren't permitted yet into that holy of holies, the computer lab. But I could access computer books in the library. I read the K&R C book and various others that year (including one that had an Alice in Wonderland theme throughout; I no longer remember the title, but I really enjoyed that one). But still without access to a computer.

I was pretty good at Math and Physics in high school, but it was pretty clear by the end of my sophomore year that computers were the thing for me: I never fell asleep in front of a computer the way I fell asleep over my textbooks for other subjects. And the feeling of flow was intensely pleasurable. In my junior year there was a contest to build an AI for a boardgame, and I won it by implementing A* search. So it seems clear that I must have had a few hundred hours of practice in that first year.

nicolas decoster 2020-07-25 06:19:46

If I recall well, I first program in Basic with a Comodore 64 in a school small workshop when I was a kid (maybe 12). Then also at school and with some friend's computer I continue Basic on computers like Sinclair ZX81, MO5 and TO7. I don't recall well all what I have created that time, just one thing: some program related to the 1986 FIFA World Cup (at that time I loved soccer) to show teams and results or something like that with some graphic part. I recall using some grid paper to figure out the pixels for the logo as I had to encode it pixel by pixel, there was no drawing tool at that time.

Later I owned my first computer an Atari 520 STF, in fact co-own because it was the family computer. I was amazed by the possibilities of the computer and in particular there was MIDI input/output which allows to use the computer for music and also to play network games (by connecting two Atari with MIDI). I uses mostly for games of course. But I also continued programming with Basic for some little programs every now and then.

During all that period it was in fact a bit frustrating, because several time I wanted to develop games, but it was very complicated at that time, and I have started some but never really finished one. But, in fact programming was my thing, so I was happy to create things whatever it was.

Ope 2020-07-25 09:21:25

Ryan King first time I am hearing of that taxonomy. (love how I get exposed to random stuff like this here) 🙂

Jack Rusher 2020-07-25 11:23:09

Kartik Agaram This reminds me a little bit of my friend Karsten Schmidt's initial experience. He did see a computer, but there was only one for all the kids at his school in what was then East Germany, so he did all of his programming using paper and a (IIRC handwritten) copy of the manual. 🙂 He went on to do all sorts of good work: http://postspectacular.com

Maikel van de Lisdonk 2020-07-25 14:09:36

I started with basic on the commodore 64 quickly followed by assembly language on both c64 (1985/86) and later amiga. Then pascal, c, delphi, c#, javascript, actionscript3, objective-c, php and knowadays mainly c# and typescript. And I've just started with Rust. Mostly I've learned all of it by myself by reading books/internet, trying things out/building applications and I had formal education here in the Netherlands as well ("Hogere Informatica" in Eindhoven in the beginning of the 90's).

Ray Imber 2020-07-25 23:08:50

Kartik Agaram's story makes me appreciate that I was extremely privileged to have access to a computer at a young age. It's easy to forget that it is a privilege (even as computer access is becoming more ubiquitous with younger generations).

Anecdotally, in my experience, programmers tend to be slightly more auto-didactic than the general population. This thread seems to confirm that. It's an interesting correlation. I'm curious about the connections there. 🤔

Gregg Tavares 2020-07-26 13:19:27

I started with basic on 8bit computers like Atari 800, TRS-80, Commodore 64, Apple II etc.... I learned by experimenting and typing in programs from various magazines and having to debug the typos out. I can't really imagine that would be a good way to learn in 2020 tho.

To the original question though about Flash. My gut tells me it's easier and more interesting to take more complete systems and modify. I'm thinking VBA meets Unity (I'm sure this exists, maybe Roblox?). The point is if I have a simple game and I just double click an object in that game and add 1-3 lines of code to change something, I feel like that would be a more approachable way to start than the start from nothing way.

There was a failed kickstarter trying to teach coding in a game (not the same thing as above but similar)

https://www.google.com/search?q=code+hero+kickstarter

The distinction I'm trying to make from Unity itself (and maybe this not an important distinction, not sure) is that it seems more intuitive to just double click the object you want to edit and get presented with a function to fill out the same way VBA did for forms. That is not how it works in Unity. In Unity you add script components which give you a blank script and I think requires a lot more knowledge what to put in that script where was if it was designed for learning maybe there would be more direction or more or simpler and easily discoverable places to add small snippets of code to change things.

Chris Knott 2020-07-26 13:30:54

I'm another one that came in through gaming, wanting to make games. My first actual programming was something called DarkBASIC. A sort of BASIC with DirectX bolted on. I don't think it was popular outside of the UK, but it used to come on the cover disc of PC Gamer. Probably picked that up around 13yo-14yo. Basically self-taught by editing example source code and seeing what it did. I remember when I first installed DarkBASIC and ran it, I thought it hadn't booted properly. I was like "It's just a blank screen? It's a text editor...? How do I make games". I literally closed it and opened it again several times 😀.

Before that (~11yo) I used to make games in MS Publisher that involved moving images around with the mouse (drag-dropping). Would have worked much better with physical paper, but I wanted it to be a "computer game". Before that (~8yo) I used to make mazes on paper which had sort of RPG-like elements e.g. a corridor with spikes along the side ("You have to go fast along this bit!!"). So I definitely think the motivation was to tied to kind of world-building creativity.

I separately loved puzzles and later, maths, and only a long time after learning to program did I realise there was a thing "computer science" that involved maths-like puzzles and thinking.

Chris Knott 2020-07-26 13:32:06

Dunno if this is a weird thing so say or not but if there's any women out there lurking I'd be really interested in hearing how you got into coding

Scott Anderson 🕰️ 2020-07-18 16:44:05

🐦 Sharif Shameem: I built a todo list app simply by describing it to GPT-3.

It generated the React code for a fully functioning app within seconds.

I'm becoming more impressed and aware of its capabilities every single day.

Tom Lieber 2020-07-25 06:26:46

Scott Anderson I'm still waiting too. 🙂

Orion Reed 2020-07-25 14:08:04

I’d like to talk a little about capitalism (I know I know please don’t leave!). Not politics, not an “Uh it sucks!” conversation, but a serious discussion that’s highly relevant to the future of coding. This is a hard topic to discuss with the same rigour as computer science or PL design but I think it is one of the most important topics for this community to tackle.

To help bring some rigour to this conversation I’d like to bring up some incredibly important academic work which you can check out should you want to. https://en.wikipedia.org/wiki/Surveillance_capitalism and https://en.wikipedia.org/wiki/Platform_capitalism (these models aren’t in competition) are two of the best and most current models of economics, and could not exist without computing. They are both worthy of your time and have lots of explanatory and predictive power. They also point to a very important point for us: The technical challenge alone will not fix computing, nor will design. It’s not as simple as changing the incentives for companies or decentralising software, and not as straightforward as improving coding by a few orders of magnitude.

So, if we as a community want to change coding forever and for good, we must also understand the societal, political and economic context we exist in. I’d love to hear thoughts and discuss this but want to guide this conversation away from some pitfalls and towards productive conversation.

Things we don’t need to discuss:

  • Personal opinions on wether capitalism sucks or not
  • Opinions on social media or corporate giants and their many problems or evils
  • The kind of discussions and critiques we have again and again all over social media around capitalism, Web 2.0, platforms, giant tech companies, etcetera.

Some things this community could benefit from discussing:

  • Concrete research and resources to learn more, inform ourselves and each other.
  • Ways in which we can facilitate true systemic change through our work here.
  • Questions that we think are worth exploring
  • Ways for this community to keep growing its understanding of economic context, the complex structures behind them, and improve our collective reasoning and decision making.
Tim Lipp 2020-07-25 16:19:24

My background started in sociolinguistics, financial auditing and economics. I came to Future of Coding after founding a tech company on a mission to reduce emissions by 50% for average Canadians, by leveraging gaps in the real-estate tech market and careful UX design. So this conversation is interesting to me.

It's important to remember how much the phenomena of surveillance capitalism and platform capitalism are not new, just the terms are.

One could argue that culture always has been the emergent "data essence" of a society, which different players (eg. Religion or the army) have used for their own ends. Viewing data and culture as a similar thing is helpful, because it allows us to apply known methods from culture conflicts to the world of surveillance. For example, parallels between decentralized cultures and decentralized data.

With Platform capitalism, how different is it really from what a market has always been? Every farmers market that is owned by a third party is effectively a two-sided marketplace that the landlord owns. 1,000 years ago the landlord had to guess if the merchant was making more money, and then could be gauged a bit more, now it's just digital and simple.

Digitization hasn't actually created the emergence of a new phenomenon, it's moreso increased the scale at which old phenomenon can operate. The world has become more flat. Everyone can be in every market simultaneously, even before we start employing barter bots. Even tinder allows me to be swept upon by matches 500k away after Covid-19....

Up to here there are 3 basic points I have:

  1. Data and culture are the same thing

  2. Platforms are just digital markets with increased information access by the platform owner

  3. The number of players in all games we play in the digital world, has grown exponentially

So how do we enact systemic change for the good?

Firstly, I think it's inevitable. That's a whole other discussion, but it is not hard to see the cosmic arc of history's bent towards justice, or the innate human goodness that happens https://www.theguardian.com/books/2020/may/09/the-real-lord-of-the-flies-what-happened-when-six-boys-were-shipwrecked-for-15-months.

Inevitability aside, I then ask, "is it getting better for me." And that's the selfish side. So the way I make it better for me is by playing the game to accelerate the inevitable process. The diamonds are in the delta.

The three basic points guide the methodology within our organization to do that.

  • Avoid building a global brand, build decentralized data aligned to cultural boundaries
  • Reduce the market's existence, eg. optimize for buying eggs at my neighbours backyard coop
  • Align all our metrics and system optimization on the one constraint a flat world hasn't made disappear: neighbourhoods. We all live somewhere. Design success in one neighbourhood, and scale it to neighbourhoods. Ignore other metrics.

Along the way, I'm sure we'll get to test drive some pretty nifty tech solutions. 😜

Orion Reed 2020-07-25 16:47:24

@Tim Lipp great points, I would point out there’s a healthy debate about just how new platform capitalism is, there doesn’t seem to be a useful consensus yet. A good friend of mine is currently writing a paper on that exact question.

One of the best https://thebaffler.com/latest/capitalisms-new-clothes-morozov of the https://en.wikipedia.org/wiki/The_Age_of_Surveillance_Capitalism conception of surveillance capitalism by Evgeny Morozov addresses some of your points, though they do also recognise the model as important but incomplete.

To me, your second point seems incredibly important and easy to understate

  1. Platforms are just digital markets with increased information access by the platform ownerI think there is danger in taking this to be something that’s been around forever, the increase in information available to the platform owners can be a monopolising force that we may not ever be able to escape incrementally. I’d argue we need more than just better company leaders if we want to change this, replacing Tim Cook with a generous anti-monopoly utopian thinker will only go so far.
Orion Reed 2020-07-25 16:51:53

Another concept defined within surveillance capitalism and its follow-up refinements is that of digital others i.e. your facebook profile + the many bits of associated metadata.

It’s been argued quite effectively that highly monopolistic power has been formed by tying producers and consumers together into one entity. This is evident on social media platforms such as Facebook, where your very consumption and interaction with the platform as a consumer is, to Facebook, a valuable production of resources in the form of data.

Tim Lipp 2020-07-25 19:29:36

Hmm, I'm not sure I understand the danger in drawing comparisons to historical analogs, but your point about digital others brings up another interesting thread about the implications of when bots pass the Turing test.

Why is it dangerous to view platform markets as just markets with more information? A small example happened 500 years ago with the invention of the receipt, it gave increased certainty for a transaction, but also added risk that information could be used against the parties involved.

Different cultures have different marriage norms. Some are polyamorous, some are monogomous, some even practice polyandry. If we were to equate Tim Cook to the perfect man, and profitable transactions to sex, are there healthy upper limits to profits as there are healthy upper limits to sex? Even if I have 20 lives, they can only make me so happy.

Perhaps the dilemma with profits is that the upper limits follow a much bigger power law than with other "wins" such as sex, and we haven't yet evolved an understanding of what the counterforce is. At the very least one exists in the reality that Tim Cook will probably get bored one day. Perhaps we could speed up the process by creating an even more interesting game to play.

Andreas S. 2020-07-26 07:26:50

Thank you @Orion Reed for trying to create such an interesting discussion. Currently I’m on vacation for the next two weeks and I only have my phone with me but your inquiry really resonates with me. So I’m now challenged to condense the experience and knowledge of my last 20 years into some meaningful and tangible for you and all others interested. I will try my best ...

Andreas S. 2020-07-26 07:38:57

For quite a long time I was very much focused on (computer) technology but in the last two years that has changed. At first - like many in this community , I think? - I thought that we “just need better tools” to approach the problems we have capitalism being one manifestation of them. So functional programming and other technical design techniques attracted me. Eventually leading me to Ethereum - RChain and the Web3 movement in general. But soon these projects revealed even more clear the problems we have when interacting with technology.

Andreas S. 2020-07-26 07:40:44

The book from Yuval Noah harari reveal 3 Fundamental orders related to the unification of mankind: 1. Empire 2. Religion 3. Money

Andreas S. 2020-07-26 07:44:06

The idea of money being a tangible even moldable cultural/technical artefact , is a huge step forward. The blockchain space and the web3 movement as a technical implementation of this idea is a important step forward.

Andreas S. 2020-07-26 07:47:58

If this particular step could teach us something then it is: culture is a huge thing and because it is so huge and powerful it is also only slow to change. Nonetheless trying to engage or to create a more conscious way of culture shaping , creating a new meta perspective to reflect about society institutions and other cultural artefacts is a worthy goal in my opinion.

Andreas S. 2020-07-26 07:50:19

Ok so much for meta perspectives and their value. Now what could coding still contribute? I think we live in auch complex and contradicting times that sense making is paramount. In pursing auch thing I really like the concept of a Zettelkasten and I could see how quite small and cheap efforts from this community could help improve these ideas.

Andreas S. 2020-07-26 07:51:18

I always found it so interesting that nobody (as far as I noticed) noticed the giant gaps or paradox effects of capitalism stated like this:

Andreas S. 2020-07-26 07:52:33

Funding! (Again rifing on the money order but the other 2 are also very interesting)

Andreas S. 2020-07-26 07:53:10

So many people here show their projects but how are they evaluated?

Andreas S. 2020-07-26 07:54:53

If really useful tool could be created or Incubates here then why wasn’t there any effort to connect to existing web3 efforts or to local communities, like people who actually could need computing services ?

Andreas S. 2020-07-26 08:00:06

I mean this moves at least into two directions: one - there are people starving to use tools in a sovereign way but they can’t because most todays tools do not allow for sovereign use . Two - In some regards many people here have already tapped into the cognitive science potential but it’s still unstructured and undirected - no new habits or actual cultural practices besides : text chat, twitter (social media) , YouTube ...have been created.

Andreas S. 2020-07-26 08:01:44

But change as you @Orion Reed are asking for it , change always needs persisting habits. It needs to include the whole society not just programmers (inclusion discussion starting also but IMO still to few)

Andreas S. 2020-07-26 08:02:40

That’s all still quite vague but I expand and give examples from Zettelkasten and other experience gladly if you can find spots that resonate with you

Andreas S. 2020-07-26 08:05:20

Just a very quick note here: I tried a couple of times to introduce the web3 (just as a first step) as in interesting community to connect and extend to but this Medium this slack channel didn’t allow me to clear the problems or getting people interested in it in a meaningful way.

Andreas S. 2020-07-26 08:30:07

Just another note: meaningful thinking about how meaning mould are the systems we use and build, in the general channel here are over 1200 people and two (including me) replied - views could be also interesting. Twitter and other social media too, people with 700 followers get 1 RT or 1 reply when posting something. How meaning is that ? Should it be? Could it be?

Konrad Hinsen 2020-07-26 09:29:19

Book recommendation for those interested in the evolution of society: Hanzi Freinacht’s « The Listening Society » and « Nordic Ideology ». On capitalism, he thinks (and I agree) that it will stay around but fade from center stage as a principle for the organization of society as material goods become less of a focus.

Andreas S. 2020-07-26 17:09:46

👍 his meta-modernism gives nice perspectives

Christopher Galtenberg 2020-07-25 14:25:45

🐦 Lee Edwards 🏳️‍🌈: * Low code is infinitely more interesting than no code. The most popular programming language in the world is Excel. We are massively underestimating the number of people who can low-code in their area of expertise. The barriers to entry for coding are lowering every day.

Christopher Galtenberg 2020-07-25 14:27:56

Also agree with this in that thread https://twitter.com/terronk/status/1286774558314250240

🐦 Lee Edwards 🏳️‍🌈: * You can’t “just” build a dev platform on top of your successful SaaS business’s. It’s a different customer and more importantly a different user.

Ryan King 2020-07-25 15:17:26

I agree with this but as a very visual thinker I'm always a little conflicted. A small formula field can take an aeroplane cockpit worth of graphic interface and compress it down to a tiny box. But try to do too much with the formula field and it can easily get too complicated in its own right.

Steve Dekorte 2020-07-26 17:48:07

I recently got a look at a how a team at a Fortune 500 company was using Excel. They’re using it as at full custom complex app + database that any user can modify. What seemed remarkable to me is how poorly spreadsheets are currently designed for this use while also being better designed for this use than perhaps any other option. I used to be surprised when I heard about companies running major internal app off spreadsheets. Now I’m surprised everything doesn’t already run off something very much like them.

nicolas decoster 2020-07-26 21:44:59

All the Twitter thread is very interesting. Thanks for sharing!

Duncan Cragg 2020-07-25 16:20:55

Interesting chat over on #meta, everyone who wants to pitch in on the channel organisation!

https://futureofcoding.slack.com/archives/CEXED56UR/p1595638307202200?thread_ts=1595571837.137000&cid=CEXED56UR

[July 24th, 2020 5:51 PM] ivanreese: Thanks for the thoughts everyone. Here's what I'm thinking we could do, as a 5-part plan:

1. Rename <#C5T9GPWFL|general> to #questions-and-ideas

This is the channel for thinking out loud, asking questions, sharing ideas, brainstorming. Not for links, but otherwise identical to how we've been using <#C5T9GPWFL|general>.

2. Rename <#C5U3SEW6A|random> to #off-topic

This is the channel for things that aren't immediately related to the future of coding, but that would still be interesting to our community.

3. Rename <#CCL5VVBAN|feedback> to #your-work

<#CCL5VVBAN|feedback> is great to have, but I feel like it is ever so slightly too narrow in focus, and the renaming would make it broader. This channel would be the place to share whatever you're working on. Ask for specific types of feedback if you want it, or just share your latest blog post, newsletter, appearance on an (inferior, competing) podcast, etc. to reach our community as an audience and harvest fresh high-fives.

4. Create a new #stimulating-links channel

This is the other half of how we've been using <#C5T9GPWFL|general>. We'd use this channel to post FoC-relevant links to articles, videos, tweets, books, etc. made by other people outside our community.

5. Update the set of default channels

The default channels for new members will be:

• <#CC2JRGVLK|introductions> • <#CEXED56UR|meta> • #questions-and-ideas • #off-topic • #stimulating-links • <#C0120A3L30R|two-minute-week> • #your-work There are a bunch of other channels not included in the default set, to keep new members from being overwhelmed. Ignoring the location-based/meetup channels, the remaining non-defaults are:

• <#CFQUMT7M3|1-on-1s> • <#CLYCGTCPL|end-user-programming> • <#C0133ED5811|functional-programming> • <#CE1R695T7|graphics> • <#CGMJ7323Z|jobs> • <#CEZ6QTHL1|music> Note that every channel, default and non-default, now starts with a unique letter of the alphabet. This should hopefully cut down on folks posting to <#CE1R695T7|graphics> instead of <#C5T9GPWFL|general> (which totally happens).

Let me know what you think of this plan.

S.M Mukarram Nainar 2020-07-26 14:22:25

http://breandan.net/2020/06/30/graph-computation/

Has this been discussed here yet?

Garth Goldwater 2020-07-26 20:55:11

it hasn’t to my knowledge. a connection between trees and matrices is (as i understand it) critical to the efficient parallel compilation of the co-dfns subset of APL: https://youtu.be/lc4IjR1iJTg

Scott Anderson 2020-07-26 16:42:38
Scott Anderson 2020-07-26 16:43:09

The Brainfuck inspired minimal VM is more interesting than the language

Chris Maughan 2020-07-26 17:15:09

Agreed, I like the minimal VM too; not sure about the portability claims, since it requires rust. I made a similarly minimalist VM for some early music language experiments I did; but really just because I was trying to do the easiest thing possible; not striving for a minimal VM per-se.