2020-06-07 02:57:16 Unknown User:

MSG NOT FOUND

2020-06-07 22:01:51 Kartik Agaram:

I dislike that term 'users'. Many people seem to have stopped using it, in the 30 years since that quote.

Your caution about not just building for people like ourselves is very well taken.

2020-06-08 00:17:45 Edward de Jong:

Shriya Nevatia The observation that you don't find the programming community welcoming has nothing to do with race, religion, etc., but has more to do with the fact that nerds are like cacti, a fussy, prickly bunch. The amount of patience and attention to detail it requires to be a programmer means that as an industry we scour the world looking for talent that is so specialized. Most people who try programming quit rather quickly, because it is intolerable to be so fussy. This may change with better languages and tooling, but at the present the field is wide open to anyone who can actually do the work. As my friend Paul mentions, we are too busy digging with dessert spoons to notice the bulldozer demonstration. No other profession i can think of has so few advantages granted for nepotism. For example if your relatives are in a field like politics or entertainment, being the child of a famous person gives you a huge head start.

In my firm only 10 out of 50 employees survived 6 months, because they couldn't do the job. How someone looked, or where they were from was not a factor. All this talk about people of color is maddening to me. This is a brain-based highly creative business. As far as FoC group is concerned, this group is from all over the planet, of people engaged in the struggle to improve how we program computers. All are welcome to the same cactus garden of nitpicking fussy minds.

2020-06-08 00:31:41 Shriya Nevatia:

Edward, I think it may be valuable to listen when people around you who don’t share your experiences are saying they have felt unwelcome because of their identity rather than their creations & knowledge. It’s illogical to assume you understand the experiences of everyone, including those unlike you.

2020-06-08 01:01:15 tj:

(I realise I'm new in this community, have not met any of you, and have yet to contribute substantially, but edward I feel your comment is due a fairly substantial response... so first off- Hi!)

"The observation that you don't find the programming community welcoming has nothing to do with race, religion, etc.," - Edward this is a grossly presumptuous and factually baseless statement. You categorically cannot claim to speak for everyone everywhere in every situation in order to discount "race, religion, etc" as factors of experience, and your very attempt to do so somewhat concerning...! I also encourage you to consider the very important distinctions between 'observation' and (lived) experience...

"...but has more to do with the fact that nerds are like cacti, a fussy, prickly bunch." - Edward this is an incredibly reductive and cliché characterisation and again, if you have managed to surround yourself solely with other 'nerds' who are 'like cacti', then that's quite an achievement on your part, however I think it is far more likely you are in fact sadly stereotyping even your own friends and acquaintances purely to try and forge your point. As a 'nerd', and one who knows a whole lot of other 'nerds', I utterly reject your idea of me/us, and even if/when we have prickly moments (which surely I do, too), that is not a get-out-of-jail free card for how I (mis)treat others, and how I (mis)understand the situations around me...

"No other profession i can think of has so few advantages granted for nepotism." Edward, nepotism is not the issue being discussed here, unless we expand an idea of 'family' to include class/culture/race/gender/etc in which case yes, tech industry is just as susceptible to 'nepotism' as anywhere else. As a white-european-man I have become increasingly conscious of the situations in which those markers have been what helped get me 'hired' (above a baseline of 'competence' for the required task), as i have 'fit-in', as 'one of the family'....!

"In my firm only 10 out of 50 employees survived 6 months, because they couldn't do the job." That is an incredible statistic Edward which should have you asking serious questions about the workspace in which you operate, and the 'culture' you have generated. I would sorely love to chat with the 40 folks who left and see how they felt in that space...

"How someone looked, or where they were from was not a factor." Unfortunately, you simply cannot make this claim outright because the effects of discrimination run so insidiously and in so many micro-veins, confounded further by unconscious bias etc... even the most self-aware/pro-active workplaces cannot (but would not try) make that claim. The best anyone/organisation can do is listen, listen, listen, try, try, try, and ensure that their awareness, sensitivity, and response is a little bit better than it was yesterday...

I encourage you to step aside from your evident existing position, and also step aside from 'online chat'/forums/twitter/etc which I'm sure has been part of what's fueled your 'maddening' feeling, and instead take time to deeply consider other perspectives, both observation and experience based, via more considered medium such as the books posted above. Also, please feel free to DM me if you'd like to continue this discussion less publicly.

2020-06-08 01:03:18 tj:

Kartik Agaram yes I wholeheartedly agree... as much as possible I try to know the actual people, who are influenced by our activities (e.g. 'use' our 'products'), and refer to them as such (if not by their actual names) 🙂

2020-06-08 05:18:42 William Taysom:

One thing to add: it's not the people you know who will have been excluded. It's the ones you never hear from.

2020-06-08 11:42:22 Ivan Reese:

Everyone, Edward's comments here are offensive in multiple ways. I've written him privately about this. I just want to publicly state that I don't stand for this. If you'd like me to explain why or what I mean, please message me privately.

I will not delete the comments because the replies are thoughtful, well-informed, and worth reflecting on. Thank you Shriya, Kartik, tj, and William.

Will started this thread off with a great prompt: > now is a good time to reflect on what role people of color can and should play in the future of coding Let's continue the thread by exploring that.

2020-06-08 12:03:16 Ivan Reese:

What would it look like infuse our programming tools with a specific set of politics, or to encode the social values (eg: anti-racism) that we want to champion?

Based on the fact that we see racist values reflected in technology, it stands to reason that it should be possible to make technology that explicitly reflects anti-racist values. We already have technology that explicitly reflects other anti-X values, like FOSS reflecting anti-capitalist values, so this feels quite possible.

(NB. with respect to "design inspired by the present moment", it's worth being mindful of the lesson here: https://medium.com/design-toast/black-lives-matter-is-not-a-design-challenge-f6e452ff7821 — there may be Black members of our community who would value weighing-in on this thread, but who are unable to do so.)

2020-06-08 13:32:20 Ope:

I think it’s also important it is said (what Edward said) so it can be called out. Yes, tech can be more “egalitarian”(it’s possible not necessarily a fact because it has a lower barrier to entry, you can learn on the internet for cheap etc) compared to other fields but that does not mean these issues aren’t present. And it’s not even necessarily because of malicious intent. That’s why it’s useful to think of ways to it more welcoming for other people. There is work to be done not just be like it’s all fine and there is nothing we should do.

2020-06-08 17:55:48 Zubair Quraishi:

As a person Of Color myself i see there is definitely a lack of diversity here in Europe. We need more women and white people in tech. I say this because it seems that most hard core tech people here are immigrants from Asia and increasingly Africa , often second generation immigrants born here though, and not indigenous Europeans, if there is even such a thing

2020-06-08 18:34:09 Zubair Quraishi:

I guess we need a definition to f what people of color is. Having been someone myself who has experienced severe police brutality myself, I think I choose not to focus on issues of race and gender and let people bring themselves up and do what interests them, without trying to force certain stereotypes into such as cruel domain as programming. We may see programming as the future, but in 1000 years they may look back at us all and look at it as modern slave labor , especially when you see the harm that sitting at computers does to our bodies

2020-06-08 20:57:07 Edward de Jong:

Half of my close friends in the computer business are multi-millionaires. They did it all without family money, fraternity connections, a parent in the business, all the usual advantages that are so common in other fields like politics and entertainment. Compare that to the WalMart fortune which wiped out most little hardware stores in America.

The software successes were accomplished by working faster, harder, and building products and services that were of use to the world around them. None of them had to lie, cheat or steal, or destroy some other firm. It was all additive. They gave people a reasonable product at an attractive price, and the world is better for all their products, just like a book author doesn't crush book authors, it adds to the general wealth of society. This the great opportunity in the software field, to make products out of pure ideas converted into computer code, and the demand for software is almost insatiable, and so opportunities continue to open up, just waiting for someone to solve a longstanding problem, or streamline a tedious paper process.

If i wanted to make a better mousetrap, i might be confronted by the need to raise significant capital, and have barriers to entry. Software is one of the very few fields that allows someone to compete without a lot of capital and/or connections. Yes there are barriers emerging caused by incumbents, but compared to any other field, we are a marvel of open opportunities for those who can do the work.

Software is intellectual property creation at a very high level, and places like the Apple App Store, make it possible for hundreds of thousands of developers to make a living by adding joy and convenience to people's lives. This is a very welcoming space, and a level playing field. Isn't that what most other spheres don't offer?

2020-06-09 04:01:36 Zubair Quraishi:

Oh wow, this threads seems to have got out of hand. I guess there is a reason people say not to talk about politics and religion. So much true I see in both Edward de Jong and tj personal experiences and opinions that it isn’t even funny. Anyway I think it is really good that we can discuss all this stuff openly without have to become disrespectful, otherwise we become another totalitarian regime ourselves.

2020-06-09 04:11:39 Zubair Quraishi:

Regarding Edwards comments here I do actually see that because of his writing style and trying to be blunt is actually the problem, maybe writing things in a more delicate way would help, and I think that has always been an issue as I have spoken to Edward before and he has always been very respectful. Ivan, maybe we just need a ‘tone it down’ comment once in a while from you, otherwise if we lose all diverse voices we become like Denmark where I live, where everyone thinks the same

2020-06-09 04:13:25 Zubair Quraishi:

And maybe if people bring up topics which we feel could be controversial we should have a separate channel, called “controversial” where anything goes

2020-06-09 05:06:51 Ivan Reese:

The idea of a channel for controversial subjects was discussed a bit here, if you're curious. I've done "tone it down" comments (in the form of "this is drifting off-topic; let me repeat the initial discussion prompt") here-and-there in other threads. It tends not to work. This thread is a bit different, though, as it's not just off topic. In this case, we have one person saying I don't see any racism, surrounded by people saying I do. In the current cultural moment, it is entirely not the time to push the I don't see it, so it doesn't exist argument. If you don't know about the pay gaps, the glass ceilings, the double standards, the algorithmic bias… please go elsewhere to learn about those things. This thread was meant to be a place for people who are already past the 7 stages of white grief (to speak very crassly about something serious — sorry) and are ready to engage on the level of here are papers about critical race theory and start working on how do we fix this here in our own practice?

Will came in at a very advanced level, and we haven't managed to meet him at that level. Can we do that? I tried, and I'd love to see some others try too.

(And re: representation in countries outside the USA — that's a very interesting consideration, it it does serve as an interesting counterpoint [in the musical sense] to what's happening in the USA right now. But please be aware that some folks might see it as a counterargument, and that might be hurtful or a distraction. The problem in the USA, the problem of interest right now due to the cultural moment, isn't just about, say, the relative percentage of various races employed in tech. It's a far broader and deeper issue. I hope that enough of us are aware of the scope of that issue and are able to think about how to address it. That's the conversation Will set up, and that's the conversation we should be having in this thread. If you'd like to discuss other facets of the intersection of race and tech, I'll meet you in a new thread.)

2020-06-09 14:10:24 Robert Butler:

I would like to be respectful of any decisions of this community on where and how we discuss this, but I feel strongly that I can't comfortably be quiet as a person of privilege when other people of privilege argue that the privilege doesn't exist or has minimal impact. It's not quite clear to me where this left off. Is there going to be a controversial topics channel? I realize that it is an uncomfortable topic to which I don't have anything close to the full perspective on, but I believe silence is not what is being asked of me right now.

2020-06-09 14:52:46 Chris Knott:

To attempt to steel man Edwards comments, we can ask why, given that a keyboard doesn't know who is typing on it, is that minorities are so marginalised in Tech.

I think it's probably a symptom of that very fact. It's too easy to dismiss human concerns because "all that matters" is what happens in the computer.

"The computer doesn't know about variable names, what does it matter we call it Master/Slave", "We just need a bitmap to test this algorithm, what does it matter it's from Playboy", etc etc.

Then if somebody raises concerns with these, they are immediately seen as causing a needless nuisance, and also have a kind of stain on their tech credentials because they appear to be caring about something that doesn't effect the compiled binary.

2020-06-09 14:55:43 Chris Knott:

It's probably not massively constructive to focus entirely on tech specific reasons, though. Everything is connected and there is huge bleed over from all other areas of life. Minority representative in media, university admissions, community perceptions, all of that, as well as the same issues that affect all industries; people socialising in certain ways, sharing certain preferences in film/music, all things that usually have racial biases while not being "racist" in any easily explicible way

2020-06-09 14:59:39 Ivan Reese:

(Robert Butler and Zubair Quraishi — please see this new thread in meta, and post further thoughts about a hypothetical controversial channel there)

2020-06-09 15:03:32 Ivan Reese:

If anyone doesn't know about Chris's bitmap from Playboy reference, see this article.

2020-06-09 15:21:52 Chris Knott:

Another thing that makes me laughsigh is when people advocate for tech's alleged meritocracy by citing companies like Apple and Google that were "started in a garage". It's probably a bit different in the USA but in the UK, especially in a city, having a garage is a massive class signifier.

2020-06-09 15:40:13 William Taysom:

Garages are different in the US. Still with Google we're talking a pair of PhD students. And with Apple, well, that's a Silicon Valley before my time.

2020-06-09 16:36:19 Robert Butler:

I would be careful saying garages are different in the US. Garage implies single family dwelling with a driveway that can be used as a startup space. There are a lot of pretty significant signifiers in garage alone, even in the US.

2020-06-09 16:42:43 Zubair Quraishi:

Reading through all the comments here I really appreciate all the well considered comments from Ivan and others. I guess all I can say is Edward and all of us (I say offensive stuff too without realizing sometimes and I am sure we all do) should maybe think of this as an opportunity to improve our communication by putting ourselves in other people’s shoes and double and triple checking text before we send it in the mistaken belief that everything we have in our heads is so important and correct that the whole world needs to know

2020-06-09 16:43:08 Zubair Quraishi:

I also appreciate that there is a controversial channel discussion, made me LOL for sure

2020-06-09 16:45:57 Zubair Quraishi:

Also I learnt that that living in Europe is definitely very different from USA so while I didn’t find Edwards comments offensive it was probably true that his comments disregarded other people’s feelings and that is important too, to not dismiss how other people feel. As a friend once told me before he slapped me in the face, “Never tell me how I should feel!”.

2020-06-09 16:47:41 Zubair Quraishi:

Anyway as a person of color I truly hope that Edward continues to be part of this community as I enjoy most of his comments and rants, and have learnt a lot from them over the years (i first saw his rants on the Eve group years ago)

2020-06-09 16:48:11 Zubair Quraishi:

Please, let us all live in peace and be respectful to each other :)

2020-06-11 20:40:52 Jared Windover:

Will Crichton I finally finished the Morgan Ames paper you posted. Really fascinating. I have had a tangential awareness of Logo as this very evidence-based and well-tested pedagogical tool, and having that examined and criticized was very eye-opening. I’ll definitely be seeking out more of ~his~ her research. It’s really got me thinking about how much I have internalized the MIT ethos (had no idea it developed there), and view certain ways of using a computer as legitimate. Thanks for posting it 🙏

2020-06-04 23:26:14 Unknown User:

MSG NOT FOUND

2020-06-08 04:32:13 Ivan Reese:

One case where I find my memory really taxed is, broadly, "picking up where I left off". If I have a half-implemented feature from a past work session, especially if that feature is a replacement for an existing feature, I often don't quite remember which places I've updated to support the new feature and which ones I haven't. So I need to try to recall what things have been updated, while scouring the codebase for places that still need to be updated. I think that falls under "adaptive code changes", but I might be misunderstanding.

2020-06-07 11:36:18 Unknown User:

MSG NOT FOUND

2020-06-08 05:13:32 William Taysom:

"Siiiiiick." — Indeed.

2020-06-08 08:39:36 Mariano Guerra:

Hi, a reminder about the existence of the FoC Newsletter: https://tinyletter.com/marianoguerra/letters/future-of-coding-weekly-2020-06-week-2

But mainly to give good news: 1) Message attachments are listed as links in the history Example here they are not embedded because slack doesn't allow me 2) Solve the mysterious case of users not getting their username, it was because the API returns at max 1000 users and we went over it a couple weeks ago

2020-06-09 22:54:09 Ivan Reese:

Are you open to collaborating on this? I'd be happy to give it some more CSS treatment.

2020-06-10 08:00:53 Mariano Guerra:

sure! the code is on the repo, the only thing is that it has to be as self contained as possible to make it easy to export the same style. history/index.html and history/app.js on the gh-pages branch (you have to start a web server at the root of the repo, python3 -m http.server will do)

2020-05-28 03:52:59 Unknown User:

MSG NOT FOUND

2020-06-08 09:04:18 Shubhadeep Roychowdhury:

Well, out of luck. Alex Bzz It breaks at installation. I guess the versions of libraries that it depends upon is not available anymore or something like that. Do you know if a Docker image with everything preinstalled is available somewhere or not?

2020-06-08 09:26:21 Shubhadeep Roychowdhury:

Never mind, I am using a pre-built binary and trying to generate the data. Thanks for the pointers

2020-06-08 13:41:06 Doug Moen:

What are best practices for writing a projectional code editor? What data structures do I use?

Source code isn't text, it is a tree. Probably the tree is annotated with semantic information: What binding is this identifier bound to (if known)? What is the type of this subexpression (if known)? How do you keep the annotations up to date while the code is being edited?

Commentary is obviously treated differently. In old school text based languages, a comment is /.../ or //...\n, is treated as white space by the lexical analyzer and discarded early: they don't appear in the AST. In a tree language, comments must work differently. They aren't a kind of white space that appears between tokens, they are either tree nodes or attributes attached to tree nodes. Examples of how this works? What is the syntax of a comment, and are there different kinds, depending on the part of a code tree they are annotating? For example, within a module (a list of definitions), a "section header" comment that introduces a block of definitions might be treated differently from a comment that describes a single definition.

2020-06-08 14:58:25 Aleks Litynski:

I'm brand new here, but I've been spending the past few weeks cobbling together something similar to what you're talking about.

I took inspiration from something Joe Armstrong said in this article regarding comments [1].

Namely, that comments don't really come before or after a block of text. They're an annotation on that block of text. In most programming languages, that means putting the comment directly above or below a block.

With a projectional editor, you have the luxury of attaching a comment directly to a node in your language tree.

In the tool I'm hacking on, I represent code on disk as json, and every object in the json file can have a "comment" property.

[1] https://joearms.github.io/published/2013-05-31-a-week-with-elixir.html

2020-06-08 15:07:33 Aleks Litynski:

I guess that doesn't actually answer your question. I don't have any formal justification for what I'm doing. Having different types of comments reminds me of the docstrings some languages use to auto-generate documentation.

2020-06-08 17:58:17 Zubair Quraishi:

How do you define a projectional editor? If you define it as a non text editor projecting code into text then yazz pilot works in exactly that way having a text editor projection, a vb drag and drop editor projection, a database schema projection, and smaller projections for individual components too. Also considering building a VR projection

2020-06-08 19:22:02 Doug Moen:

I want to build a projectional editor for a general purpose programming language. Right now, I have an interpreter and compiler for a text based language. • The parser converts text to a parse tree; • the semantic analyser converts the parse tree to an intermediate representation (IR) that can be either directly interpreted, or • The code generator converts IR to code. To make a projectional editor for this language, I need different internal data structures. Rather than grope in the dark, I was hoping to learn lessons from an existing successful design.

2020-06-08 23:47:54 Sol Bekic:

Doug Moen Disclaimer: this is not informed by any other projects or literature, but just what I came up with. Regarding comments, in alv I do also need to keep comments in the parsed tree rather than just ignore them during parsing (I need that for the editor prototype, although that is a minor interest, but mainly to be able to turn the parsed tree back into the exact string it was parsed from. You'll need that for a projectional editor too I guess). To do that, I firstly consider comments as whitespace. In my syntax grammar, all bottom-level constructs (literals) contain no whitespace, but there is a piece of "required whitespace" between arguments in an S-expression and a piece of "optional whitespace" after the opening and before the closing parenthesis. So an S-Expression contains N child-expressions and N+1 (potentially empty) whitespace segments. I do not parse the comments especially or associate them to other elements, but your whitespace could also be a structure that explicitly stores comments as separate entities.

EDIT: in case it's not clear, the structure I use is an AST.

2020-06-09 02:03:34 Matt Hart:

are you familiar with zipper datastructures? A zipper is a good starting point for the datastructure representing your editor state

2020-06-09 03:37:15 Dan Cook:

Aleks Litynski - I think you did answer the question, because the goal is not to have a perfect representation of textual code, but to capture the information that the textual source code is otherwise attempting to represent.

For example, you don't so much need to represent a comment before, after, or inline with a line of code. Instead, such comments are the only means for providing metadata (annotations) to parts of a program. So do that, and then if you need to generate source code from it, then you could inject comments as the only way to capture that metadata in the output. Not the other way around.

2020-06-09 16:06:39 Garth Goldwater:

slightly tangential, but HTML natively includes comments in the source tree: https://developer.mozilla.org/en-US/docs/Web/API/Comment

2020-06-09 16:06:56 Garth Goldwater:

not recommending you take the same approach, just think it’s interesting

2020-06-13 04:39:34 Tom Lieber:

FWIW, when I wrote a browser-based projectional editor for a blocks language, I found it easiest to write it just like I would any other form on the web.

I had one UI component per type of AST node. The components rendered text fields and drop targets and other standard web UI affordances to support editability.

Variable bindings, types, etc, are derivative information that I could cache when necessary, or just recompute from the AST as-needed. I mostly did the latter.

Because I designed the AST for projectional editing, there were comment slots on any node that would benefit from special rendering of comments, and I had a comment block node that you could wrap any other block of code in to describe what that block did. If you’re using someone else’s AST, you may not have that luxury, but you may be able to write your own AST for editing and a translation layer between yours and the executable AST. I have parsed JavaScript ASTs to guess which comments document which other nodes and with some heuristics you can guess pretty well.

Hope this helps!

2020-06-02 18:21:01 Unknown User:

MSG NOT FOUND

2020-06-08 15:20:27 Benoît Fleury:

I think it depends on the meaning you attach to the word "programming". If programming is about building software tools for other to use then I agree that it will follow the arc you describe. If you see programming as a way to solve problems and understand the world in a dynamic medium then it will evolve more like writing. Those are not mutually exclusive because when we design software we fundamentally do two things: (1) we define the behavior of the software to solve a problem and (2) we produce an acceptable implementation. I think (2) will follow the arc you describe and will even go beyond because it can be much more automated than the design of physical artifacts. But we will hopefully democratize (1).

2020-06-09 17:02:53 Robert Butler:

One of the things that I've learned is "code is not for itself" (phrase not mine). That is, the tools, languages, libraries and everything else are ultimately in service of a problem. If you can solve that problem by not writing code, then you have actually done your job as a programmer. One of the things I have learned about being productive as a programmer is that the code you don't write is often vastly more important than the code you do write. Sometimes ecosystems of tools and blocks that you can take apart are actually just code being for itself. Maybe we don't need to solve the "standard ways for software-pieces to talk to each other". Maybe we can define or architect that problem away altogether.

2020-06-06 17:16:29 Unknown User:

MSG NOT FOUND

2020-06-08 20:06:27 Jonathan Edwards:

We can’t ignore the history of widespread stagnation of science and technology in the last few decades. There’s a whole movement on “progress studies”. https://patrickcollison.com/progress

2020-06-08 22:20:02 Jamie Brandon:

Jonathan Edwards Was that intended for this thread?

2020-06-08 23:38:43 Duncan Cragg:

Jonathan Edwards Trouble is we don't have the time or energy within this community to fix that. So we have to work with what we've got. Which is evenings and weekends for most of us! 😄

It does come down to "marketing" even without a commercial product, and I for one am rubbish at that.

2020-06-08 23:47:22 Jonathan Edwards:

Jamie Brandon yes. We will all starve individually. We need to band together to build an institution that can attract funding outside of Big Science and SV. The time is ripe

2020-06-09 08:53:29 Duncan Cragg:

"We will all starve.." "We need to band together", "The time is ripe" .. Stirring language .. but I suspect this forum isn't receptive to that

2020-06-09 09:30:04 Stefan Lesser:

It’s interesting (and tragic) that we overall seem to mostly agree on many parts of a vision for a better future (of coding), and yet we all work on our own versions towards it. Yes, we share our findings and experiences, but it’s mostly random and at best enables some serendipity.

If just a small group of us here would coordinate their efforts for some time, which doesn’t even mean to work on the same thing, just agreeing on a specific problem to solve and splitting work to explore a certain part of the solution space in a concerted effort, we could probably make significant progress.

It looks like we have the corner stones for a great team right here: alignment on a vision + complementary skill sets. Even funding seems solvable, if we can demonstrate commitment of a dedicated team working towards a common goal.

2020-06-09 10:01:55 Duncan Cragg:

Well, there's the rub: people come here for different reasons.

There is a core few of us who have a novel approach and are unlikely to get much out of collaborating with others with significantly different approaches.

Then there are the folk from commercial enterprises and those who want incremental improvements to IDEs and other tooling. I don't see them or their work as the subject of this thread, but I'm happy to be told otherwise.

Anyway, there's only 5 of us on this thread, so maybe we should start by re-pinning to #general ..?

2020-06-09 12:32:44 William Taysom:

More than five. 😉

2020-06-09 14:35:38 Jonathan Edwards:

All we need is to agree on a few challenge examples. Like https://github.com/gothinkster/realworld Then we run a workshop on solutions using our alternative programming technologies. Cross between a writers workshop and a bakeoff. Maybe award joke prizes (Least Likely to be Funded). This might be my next happening. DM me if you’re interested

2020-06-09 20:44:16 nicolas decoster:

I agree it would be nice to have a significant collaborative effort emerging from this community. But I also agree it will be complicated! Maybe the first step is to find some common ground? What in our visions for Future of ~Coding~ Programming is common? I guess it is not that easy to answer either.

2020-06-09 20:49:14 Duncan Cragg:

Future of ~Coding~ Programming

😅 Exactly!

2020-06-09 20:58:46 nicolas decoster:

And as for the question of the funding for developing new language/tools, until now I was on the spare time like model, which is really frustrating. So, first based on savings, I will try some time in full commitment (starting this summer!) to explore some ideas and hopefully produce something usable. In parallel there will be the tricky question of funding. If it is not solved, maybe I will go in a cycle à la Duncan Cragg: some paid periods that fund the unpaid projects.

2020-06-10 06:52:34 Konrad Hinsen:

Some comments on moving towards getting things done (which I strongly support as a goal): 1. Remember McLuhan: the medium is the message. This community is organized around three stream-type media (see this essay for stream vs. garden): a podcast, a Slack, and a newsletter. These are media for exchanging information, not for collaborating. Garden-type media that support collaboration are, unfortunately, much less numerous. Basically we have Wikis and Git repositories. Someone needs to set up a garden and oversee its evolution. That's work, and unfortunately not highly valued nowadays. Ask Open Source maintainer for testimonials. I suspect this is the main obstacle to be solved. 2. What we all have in common is dissatisfaction with the present state of the tech world. That doesn't mean we have the same goals, nor the same ideas about reaching our goals. I doubt we could all productively collaborate. So we need to aim for "getting things done" communities (plural) that overlap with this one but which are not identical.

2020-06-10 14:37:35 Jonathan Edwards:

Konrad Hinsen Working in isolation is a recipe for depression and failure. I've been trying to bring the "alternative programming" community together for years with various workshops. It is like herding cats. My latest idea is that if we could agree on a set of challenge problems, we could at least establish some basis for communication, comparison, and feedback.

2020-06-11 08:30:54 Konrad Hinsen:

Jonathan Edwards I agree with all that. Challenge problems are one way to formulate common goals. My point is that discussing challenge problems here on Slack will just lead to another interesting discussion that will die out after a few days. Slack is even worse than other stream media in being optimized for short attention spans.

2020-06-09 02:46:57 Prathyush:

I put together a list of formal systems being used in biology: https://github.com/prathyvsh/formal-systems-in-biology

The list is largely incomplete, but it was great to find that graphical notation by von Neuman used to explain automata, in the search. Also, look at the stuff by Vandrella. He’s doing some lit modelling stuff in his website.

2020-06-09 09:23:32 Konrad Hinsen:

Nice compilation, thanks! I wonder if you consider "pragmatic" stuff like SBML (http://sbml.org/Main_Page) or Kappa (https://kappalanguage.org/, which grew out of Fontana's work you list) worth including.

2020-06-09 09:43:58 Prathyush:

Oh yeah, definitely could include these. Thanks!

2020-06-09 10:43:35 Michael Dubakov:

HN https://news.ycombinator.com/item?id=23464471

2020-06-09 09:23:52 Andreas S.:

Hi this time I have a question for the channel... some tome ago I saw a Video of the Xerox Alto in the original research context. The Video Showed usage of the original GUI and possible applications of it. Could you please share some links that would be greatly appreciated!

2020-06-10 01:16:19 yoshiki:

By original context do you mean that the video was shot at PARC while they were actively researching?

2020-06-09 22:24:16 Rui Min Sim:

Hi, not sure if this is a good place to bring awareness to this: https://www.shutdownstem.com/who. I think in light of what is happening around us, it will be quite tone deaf of people who considers the future of coding not to consider the people making it happen. My DMs are open to people who want to share/discuss antiracism even within code. just today, I worked with a coworker to make sure we stop using black/white list and use block/allow list instead. seems rather trivial and we know the intentions wasn’t a racist one, but this is a purposeful change in our codebase to remove subtle/nonsubtle racism.

2020-06-09 22:44:08 Ivan Reese:

That's a helpful link, thank you.

If anyone here is planning to participate in this, and feels comfortable sharing that fact, I think an indication of solidarity would be a positive gesture. Feel free to post a comment here, or throw a ✒ on the parent post. (I hope that's appropriate.)

If anyone would like to see changes to this community so that we can do a better job amplifying the influence of the underrepresented (which is one of the community's core principles), I invite you to start a #meta thread or DM me to tell me what I can do to help.

Finally, if anyone has favourite Black people or people of color that they'd like to hear me interview on the podcast, I'm always looking. (My potential-guest list is already about 50 people long — I cannot get to everyone, but the more options I have, the better job I can do covering all bases in a cohesive way where each episode builds on the ones before.)

2020-06-09 23:07:17 Duncan Cragg:

other examples: • "master/slave" • training sets for ML or facial rec that have bias to white/western • assumption of L-R text • I8N as an afterthought • maps with a projection that shrinks the African continent • whitehat/blackhat • assumption of family name/personal name order just off the top of my head

2020-06-09 23:30:31 Ivan Reese:

The wikipedia article on Algorithmic Bias is really, really good.

2020-06-10 04:57:08 Robert Butler:

I pulled up an organization wide GitHub search. We have a few references to some of these phrases that we need to update. I'm sure there are other technical docs we need to update as well. I'm going to spend some time on the 10th thinking through what actions I can take to promote anti-racism in spaces that I contribute to. Thanks for the suggestion and link!

2020-06-10 18:41:07 Tim Babb:

Along the lines of Duncan Cragg’s mention of names, there is the famous https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/, and many more categories of commonly-assumed falsehoods which were spawned from it (though not all cultural): https://github.com/kdeldycke/awesome-falsehood

2020-06-11 06:31:26 Scott Anderson:

I'd like to see Maeliza on the podcast

2020-06-11 06:32:19 Scott Anderson:

Dwayne Reeves at Facebook has done a lot of programming language work but I don't think it falls in FOC

2020-06-11 06:33:37 Scott Anderson:

I've tried not to volunteer myself during all of this, but in this case I'd definitely be a guest and talk about game engines, visual programming in VR and graphics/GPU programming

2020-05-29 00:38:03 Unknown User:

MSG NOT FOUND

2020-06-10 19:43:08 David Piepgrass:

I like sweet expressions - they are similar in spirit to my own Loyc Expression Syntax (loyc.net/les), and I see they've been enhanced since I last saw them (it was a very simple proposal originally). Are any major tutorials teaching a Lisp variant based on them?

2020-06-11 08:27:06 Konrad Hinsen:

David Piepgrass Nothing I know of, though a tutorial for Lisp newbies would probably be the best way to gain an audience. Selling any alternative to s-expressions to people who are perfectly happy with s-expressions is a pretty dumb marketing strategy.

2020-05-14 15:26:45 Unknown User:

MSG NOT FOUND

2020-06-10 19:58:49 David Piepgrass:

z and t 'scrollbars' are often implemented by extra arrow buttons pointing left and right, or with a slider control.

2020-06-10 21:07:20 Christopher Galtenberg:

Yeah, there are lots of z/t implementation - just seems like it would have been fun to make explicit / all 4-dimensions visible - at least during the visible scrollbar era

2020-05-29 17:55:56 Unknown User:

MSG NOT FOUND

2020-06-10 20:19:37 David Piepgrass:

This issue was the driving force behind my earlier question about reactive calculations. I think most of the woes of state management and UI programming are for want of a good algorithm... (but also, most devs don't have a drive to build good foundations that make it easier to write the higher-level program.) https://futureofcoding.slack.com/archives/C5T9GPWFL/p1588994003263900

2020-05-23 08:25:46 Unknown User:

MSG NOT FOUND

2020-06-10 20:23:33 David Piepgrass:

I don't know how you can talk about the turing tar-pit without mentioning C++ template metaprogramming 😛... actually that's the whole problem with the article, a lack of examples to focus the discussion.

2020-06-01 02:09:08 Unknown User:

MSG NOT FOUND

2020-06-10 20:46:01 David Piepgrass:

Think about how it's implemented. 64-bit integer/pointer unions, right? If it's small, it's an integer, if it's big it's a pointer. Well, first off, .NET can't support that, but maybe you don't mind. Anyway, the very fact that integers have variable size forces every "add" operation to become two checks for "is this first operand a big int, or is this other operand a big int" alongside each 64-bit add operation. It also precludes standard vectorization. Equality tests are trickier... if two 64-bit values are unequal, you have to then check whether they are pointers and if so, call an equality-testing function. Perhaps worst of all, every time an integer goes out of scope you have to check if integer memory has to be freed. This could be mitigated with alloca, but only for integers that are local to the function. What if a bigint is located inside a struct on the stack? It can't use the optimization unless it "knows" it is on the stack.

Don't get me wrong, BigInt support is great, but in my career I've mostly written performance-critical code which I would usually design to avoid overflow reliably, rather than suffer the performance penalty of a BigInt.

2020-06-11 01:40:32 Nick Smith:

None of what you said is really relevant to me. I'm designing a language, not using BigInts as a library feature. Accordingly, situations where you can "avoid overflow reliably" are amenable to static analysis. It seems like it should be easy to identify sequences of operations where integer size won't change substantially, and you can perform a single size check before entering such a block of code, then branch to either a 64-bit version or a BigInt version as necessary. And memory management is also a language/runtime implementation issue which is going to have to be dealt with for general data structures either way.

2020-06-11 17:03:12 Robert Butler:

Let's say you have the following code: ```def do_it(x, y) if x > y x = x + y else x = x - y end end

number_x = read_from_stdin number_y = read_from_stdin do_it(number_x, number_y)``` This is completely arbitrary, of course, but at which location can you reliably know you can avoid overflow? Any code that takes input could be handed values which cause an overflow at some point right? If you are duplicating logic (i.e. you have a 32-bit version, 64-bit version and perhaps more) how do you know which one to use? The only way you can know if it will overflow is essentially by doing the mathematical operation, so checking which path to take is at least as complicated as just doing it, which means you just need to do it and check for overflows and extend/retry with the next size. I'm having a hard time seeing how static analysis helps here except in arbitrarily small cases where you can compute the entire possible result space and prove it and all intermediate values are less than x-bits. I'm not sure if static analysis of this kind can really be reduced below the complexity of the halting problem, which is an NP-hard problem.

2020-06-12 04:05:49 Nick Smith:

Reading from stdin is a "gotcha" that isn't going to occur too often in the middle of a large program (e.g. a large GUI app, not a small command line utility). Often the numbers you'll be working with will be pieces of program state, or derivatives thereof. Either way, imagine number_x and number_y are used in a lot of different expressions (they're some key value like the position of a particle). Then we might be able to deduce the following: if number_x and number_y are <= 32 bits, then the calculations they are used within will not overflow a 64-bit register (in the above example they simply need to be <= 63 bits). That's the static analysis. What can we do then? Create a fast code path (no size checks, no BigInts, no DRAM access) for the small number case, and a slow code path for the big number case. Branch into the correct path based on an initial test of number_x and number_y.

2020-06-12 04:07:10 Nick Smith:

I'm not saying this static analysis is going to be super effective, but I can't see any major problems with the idea yet. I'll figure it out when I try to implement it! That will be the distant future, because I'm far more focused on UX in the coming year. A good ALU abstraction is key to a good UX.

2020-06-12 05:44:42 Edward de Jong:

The minute you throw a few IF statements into the mix, static analysis becomes impossible. I don't believe that static analysis could ever work. If you have a mysterious function for which you don't know the result range, then mystery(3) * 2 becomes unknowable in terms of required bit size. For a vast number of applications, double precision floating point has proven adequate, which is why it is the main numeric type used in JS and AS3. A long time ago FLOAT64 was so slow (100x slower than integer) one would go to great lengths to avoid it, but IBM and Intel cracked the code on fast floating point, and now you don't even think about it. I think Motorola's inability to build a fast floating point unit may have been a factor in Apple ditching Motorola for PowerPC.

2020-06-12 05:48:09 Nick Smith:

I'm only envisioning the analysis working locally. The goal is to avoid checks on every single arithmetic operation. What is this "mystery" function you're thinking of? It's going to consist of primitive operations like add and multiply.

2020-06-12 05:54:21 Edward de Jong:

Even local branches will create a combinatorial nightmare for your analysis. And if it is inside a while() loop, how do you know how many times it will execute? Every one who has ever done this has done runtime checks.

2020-06-12 05:57:09 Nick Smith:

Well, it won't be inside a while-loop because my language doesn't have those! Nor does it have general recursion. I'm introducing repetition capabilities VERY carefully. My theoretical foundation is Datalog, which is far more amenable to static analysis.

2020-06-12 05:58:27 Nick Smith:

I'll probably be including escape hatches where "anything goes", but I'm yet to see how prevalent those will need to be. I think they'll be limited to low-level libraries.

2020-06-12 05:59:41 Nick Smith:

And coincidentally, Datalog is itself a good language for implementing a static analyzer, so I'll probably have high-quality static analysis at my fingertips.

2020-06-12 16:47:01 David Piepgrass:

Well, there is no doubt a body of comp-sci research on this sort of thing that would be worth looking at. "value range analysis" is a term I've heard...

2020-06-01 20:07:18 Unknown User:

MSG NOT FOUND

2020-06-10 20:59:39 David Piepgrass:

There's been a ton of progress in the last 20 years... compare C# to C# 8 (LINQ, tuples, decent functional programming features, null-pointer avoidance), or C++03 to C++20 (it still sucks, but an expert can pour the molasses much faster). And how about Go and Rust? Okay, Go still doesn't have generics, and I hear the Rust compiler is slow, but give it a few years... metaprogramming in D is much better than C++ ... the design could have been better, but, well, how about Nim?

Bottom line, I'm not actually happy with the current state of affairs, but it has improved a lot. Oh and I love both Visual Studio IDEs.

2020-06-11 09:54:38 Nick Smith:

Has anyone ever seen an implementation of arbitrary-precision floats (N.B: not rationals) where you don't actually have to set the precision BEFORE you perform an operation? I want to do a sequence of operations and then round the final result, not round constantly and incessantly. It seems like no human on earth has ever implemented this before, which baffles me. (Edit: division is allowed to be rounded)

2020-06-11 10:02:38 William Taysom:

If you don't mean rationals, what do you mean?

2020-06-11 10:03:43 Nick Smith:

Just floats! But where the mantissa and exponent are BigInts, not fixed-size bit fields. I want to be able to add or multiply two floats and get an exact result, unless I explicitly ask for rounding.

2020-06-11 10:09:02 Marcel Goethals:

Probably not what you’re looking for but: https://en.wikipedia.org/wiki/Unum_(number_format)

2020-06-11 10:09:56 Nick Smith:

Unums don't provide exact results, despite the marketing type. Interval arithmetic (which floats or unums can be used for) provides a guarantee that the true result lies within an interval, but I'm not really interested in interval arithmetic.

2020-06-11 10:12:56 Mariano Guerra:

probably you know about this and I'm not sure it solves your problem, but just in case: https://gmplib.org/

2020-06-11 10:16:00 Nick Smith:

Unfortunately, you have to specify the precision of GMP floats before each operation.

2020-06-11 10:16:38 Nick Smith:

I could "hack" these existing libraries by setting the target precision insanely high (kilobytes), but it's a dodgy solution.

2020-06-11 11:53:48 William Taysom:

The kind of hack I've done is to have arithmetic operations build an expression tree, which you then reduce in some special way later.

2020-06-11 13:01:46 Garth Goldwater:

^^that’s what i would do

2020-06-11 14:28:39 Nick Smith:

How does that give me an associative SUM()?

2020-06-11 15:07:37 Ivan Reese:

This is a rabbit hole I went exploring about a year ago. Some of the libraries had a maximum precision threshold you could set, which sounds like the thing you want to avoid. Other libraries dodged that by doing all calculations in a symbolic way (see also). There were a bunch of libraries I came across, but I didn't end up saving links to them because I never found one that fit my performance needs (ie: perfect precision with relatively constant execution time that handles the accumulation of millions of operations).

2020-06-11 16:02:30 Konrad Hinsen:

Nick Smith If I understand correctly what you are looking for, it's impossible. The very principle of floating-point arithmetic is to make the precision part of the storage format for each number, in order to ensure a constant storage size, no matter which operations you do. If you are OK with indefinite storage size, as for big integers, then go for rational numbers.

Something that many people don't realize is that floats a subset of rationals with fixed storage size. Perhaps it's because so many languages call them "reals" that so many people think floats are a superset of rationals, whereas reality is the exact opposite.

If what you want is a superset of rationals, go for computable numbers (the subject of Alan Turing's famous paper that introduced the Turing machines). A number is then represented by a procedure that you call with the requested precision. But this is rarely what you really want, once you understand all the consequences, for example the impossibility to test for equality.

2020-06-11 16:12:57 Chris Knott:

I wonder if there's some solution that carries several representations, and is aware of their accuracy, so it can fall back to an expensive symbolic calculation if it knows the test is outside float accuracy.

2020-06-11 16:32:23 Robert Butler:

Nick Smith the reason it doesn't exist is that not all numbers are representable in base 2 float, even with infinite precision. For example: 0.1 is 0.00011001100110011...2 (with the 0011 part repeating forever). So, you literally can't represent all numbers of even a finite base 10 decimal space without infinite precision. See this for a more detailed

2020-06-11 16:32:44 Robert Butler:

Forgot the link: https://softwareengineering.stackexchange.com/questions/237014/are-there-numbers-that-are-not-representable-in-base-10-but-can-be-represented-i

2020-06-11 18:21:11 Andy F:

there’s systems like Common Lisp that support arbitrary-sized rational numbers, any rational can be stored as a fraction of (bigint) / (bigint)

2020-06-11 20:02:40 Edward de Jong:

there is an excellent youtube video and code sample by Crockford on the DEC64 floating point representation, which is far superior to stupid IEEE double precision format. It was a tragedy that the committee sought to save a few transistors and used binary exponents. Countless programs wrestle with this, and i believe it is one of the reasons COBOL still runs in many industries because COBOL for all its verbosity and ugliness contains BCD arithmetic in its syntax and computation model.

2020-06-11 20:04:33 Edward de Jong:

And let's not forget mathematica, which as a symbolic language, will deliver whatever precision you wish to ask for. It is one of its "superpowers".

2020-06-11 20:47:56 Ivan Reese:

Yeah, DEC64 is nice. Wish we had that in JS.

2020-06-11 22:49:04 Doug Moen:

Konrad is right that this is generally impossible. As soon as you compute 1/3, it's impossible to represent that exactly in either binary or decimal floating point. However, if you use decimal notation for your floating point inputs, use decimal floating point representation, and restrict your operations to add, subtract and multiply (no division, no exponentials or trigonometry), then I think it could be done. If you extend this system of exact arithmetic to support division, then you need to store a denominator, which means you are using rationals.

2020-06-12 02:17:51 Nick Smith:

Just to address everyone at once: I'm sure that I do NOT want a rational number type. I don't really care about exact division, I just want exact addition and multiplication. For those talking about 0.1 (1/10) and 1/3, those are both division operations, and I do not want them to be exact. I probably wasn't clear enough about my stance on division.

2020-06-12 02:18:58 Nick Smith:

And a decimal number type doesn't help me out at all, because all it gives you is exact division by 10.

2020-06-12 02:23:46 Nick Smith:

Konrad Hinsen I'm not sure what the agreement is on the definition of "floating-point", but constant storage size isn't one of my constraints. You can define a broader subset of rationals than IEEE floats: any integer multiplied by any power of two, they're called the dyadic rationals and I guess that's what I'm talking about. I want to see a library for dyadic rational arithmetic.

2020-06-12 02:42:32 Nick Smith:

The reason I don't care about exact division is that division is relatively uncommon compared to addition and multiplication, and if you start trying to address the uncommon cases you end up going down a rabbit hole where you want exact roots, exponentials, logarithms, and trigonometry. In other words, you want Mathematica. I'm not going that far. I'm happy for division and transcendental functions to be rounded. The key thing I want is associativity of addition and multiplication, because my programming language avoids inessential ordering of values (it has no "default ordering"). Division isn't associative, so it's fine for it to be inexact.

2020-06-12 05:54:15 Dan Cook:

The topic of symbolic computation makes me miss my TI-89

2020-06-12 06:00:20 Edward de Jong:

Mathematica lets you request a desired precision for the results. Also, the Intel 8087 subunit which is inside every Intel compatible chip for over 20 years has operations that do everything in 80 bits precision, and is then downconverting to 64 bits after you run a long sequence of operations and store the result into a double precision result. In this way they avoid rounding errors from creeping in. It is extremely clever and although not amenable to parallel operation, is still the preferred way to do floating point in the intel world because it doesn't accumulate error like everyone else's 64 bit arithmetic operations, which accumulate error rather quickly. 80 bits is 10 bytes, and there are even BCD instructions in the 8087 unit which i have occasionally used. They are nearly forgotten nowadays as no higher level language i know of lets you access them, you have to write in Assembler. A tiny bit of assembler can ofttimes do some very clever things.

2020-06-12 06:02:08 Nick Smith:

But that still doesn't enable associative addition and multiplication 😕 I'm looking for conceptual simplicity. Users of my programming environment should have addition and multiplication that "just work", no strings attached, no land mines, no cognitive overhead.

2020-06-12 08:01:05 Konrad Hinsen:

Nick Smith It seems that what you want is scaled integers, right? Maybe this proposal would work for you. There even seems to be an implementation (in C++).

2020-06-12 08:04:20 Konrad Hinsen:

Edward de Jong DEC64 follows different priorities than IEEE 754. If your needs are closer to DEC64, that’s fine, but not a reason to call IEEE754 stupid.

2020-06-12 09:12:57 Nick Smith:

Konrad Hinsen I want fractional numbers like 1.5, and dynamic range (compact representations of 2^100 and 2^-100) and I don’t think that proposal addresses that.

2020-06-12 09:13:32 Nick Smith:

(Though I appreciate the suggestions)

2020-06-12 12:41:11 Doug Moen:

I want to see a library for dyadic rational arithmetic. I googled that, and got: • https://github.com/SRI-CSL/libpoly/tree/master/src/number The code for exact dyadic rational addition and multiplication is actually quite simple.

2020-06-12 13:34:22 William Taysom:

Nick Smith please remind us what operations you want to do. You've mentioned addition and multiplication, sometimes division. What else? Roots? Trig? What?

2020-06-12 16:24:40 Konrad Hinsen:

Nick Smith Oops, right, I have filed that library under the wrong heading in my notes. Which leaves... no library I know about for scaled integers. Which have nevertheless been widely used, as they are very simple to implement in many situations. Addition, subtraction, and multiplications are nearly trivial.

2020-06-12 23:37:45 Nick Smith:

Doug Moen Ah, I couldn't find anything like this when I looked, thank you! Yes, it does seem that an implementation won't be too challenging, so I'm probably going to write my own from scratch. Truncated division (to custom precision) might be tricky. I guess I'll find out!

2020-06-12 23:42:58 Nick Smith:

Konrad Hinsen "Scaled integers" is a legacy term, right? Most of the sources seem to be referring to older systems and hardware design (or conflate them with fixed-point numbers). I can't seem to find anything interesting.

2020-06-12 23:46:03 Nick Smith:

William Taysom Basically all the operations you can do on floats today, except those that consume/produce non-arithmetic values like -0, NaN, and infinities. So yeah, I'd want rounded roots and transcendental functions. But I will probably have to implement those myself, which is acceptable, because I don't need them in my initial prototyping.

2020-06-13 11:22:35 Konrad Hinsen:

Nick Smith Well possible that it’s an old-fashioned term. I learned about this 25 years ago.

2020-06-11 15:35:49 Spencer Baugh:

I haven't been looking at FOC stuff for a while, so asking this if anyone can give some advice: What are the best implementations of interactive UI usage of OOP interfaces? for example I'd envision seeing an object as a box containing a list of methods (and other objects it contains, also as boxes), and being able to click on a method, and having it expand to give me places to drag and drop other objects in, and then turning into another box representing the object it returns. (Specifically I'm interested in making such an interactive UI for an advanced low-level OS interface I've created, mostly as a way to teach the interface)

2020-06-11 20:45:29 Ivan Reese:

Pharo and Glamorous Toolkit are pretty good. I'm also fond of the approach you see in game engines like Unity.

2020-06-12 06:05:50 Dan Cook:

That's also an accurate description of my project:

https://github.com/d-cook/Interact

I also intend for this system to expose its own code through its own UI (including the code for the UI, etc.). This way the whole thing is 100% moldable at any level.

The description is out of date (but not far off). I've also used the "Issues" as a dump of all the different approaches I might take with it. I've not had time to work on it in ages, but still plan on finishing it someday.

2020-06-12 18:26:47 Spencer Baugh:

Dan Cook that's an interesting project, have you thought of the analogy to application macros, e.g. in vim or emacs? interestingly, in Emacs, you can record a macro by performing actions, and then store it as Elisp code which calls the functions those actions invoked

2020-06-13 12:55:24 Garth Goldwater:

https://youtu.be/Ox5P7QyL774 i will never get tired of posting the self language video in this slack. no one can stop me

2020-06-11 18:46:18 Andrew Reece:

I'll be streaming some WhiteBox (live code previsualizer/debugger) dev in a few mins, which you're very welcome to join. I'll be doing some bug fixes and working on some UI for status feedback. https://www.twitch.tv/azmreece Feel free to join the streamed voice chat: https://discord.gg/xHgepxM

2020-06-05 13:01:08 Unknown User:

MSG NOT FOUND

2020-06-11 22:08:35 noahtren:

Cole Lawrence this blows my mind, basically exactly what I'm hoping my NN system can do, but applied to code

2020-06-11 22:09:59 noahtren:

awesome to see this because I didn't really have a mental model of what it would look like

2020-06-11 22:19:25 noahtren:

I also like that some symbols are somewhat logographic. a NN definitely wouldn't learn this unless I started with a huge model pretrained on language and images... haha 😅

2020-06-12 09:56:59 Tyler Adams:

Weekly update from CodeFaster. This week's topic is how to write a printf debug statement. It's a simple but important suggestion that's often overlooked. The post does the main job of making it clear how to use it from the examples. Some of the subtlties of the advantages were obscured in the writing. So I'll lean more on code examples and less on english prose

https://codefaster.substack.com/p/printf-debugging

2020-06-12 09:57:43 Tyler Adams:

Im posting this here as was suggested in #two-minute-week if I wanted a public forum for a weekly update.

2020-06-12 15:21:17 Stefan Lesser:

As we have several fans of Christopher Alexander here, I don‘t want you to miss out on this gem of a talk I just came across: https://twitter.com/stefanlesser/status/1271442252078989315?s=21

2020-06-12 19:59:37 Ivan Reese:

I too can vouch for this being good talk.

Here's a higher quality version: https://vimeo.com/10875362

2020-06-13 00:12:42 Edward de Jong:

Kudos to Jonathan Edwards for bringing this to my attention via tweet, here is a blistering article from the British Journal for the Philosophy of Science article https://doi.org/10.1093/bjps/axz029 entitled "Is peer review a good idea?". As an outsider to computer science academia, I found that the small group of gatekeepers was an incestuous bunch which only publishes each other, and represents a small clique who thrives on exclusivity, and blocked me the one time I tried to publish about Beads for vague reasons. A working product is better proof than a paper without proof, so it wasn't going to stop me, but it would have been nicer had i been able to publish the major features in an article so that I could get credit for the novel things. It is one of the forms of alternative payment currencies, to get credit for an invention or improvement. It is one of the reasons people publish, in addition to the communist ideal of increasing the public wealth.

2020-05-26 19:41:42 Unknown User:

MSG NOT FOUND

2020-06-13 04:01:21 Tom Lieber:

Have you used Visual Basic? I used to drag and drop components into windows for fun, just to see what they did. Click around the property windows, type stuff, check boxes. Sometimes I’d have installed software that automatically added bits of their functionality to the list of controls I could drop in.

These days it’s like, “I hope someone’s wrapped this feature in a React component and put it on NPM with an example of how to initialize it.”

2020-06-01 15:02:50 Unknown User:

MSG NOT FOUND

2020-06-13 04:18:27 Tom Lieber:

Thanks for making it available!

It looks like it’s a pure language/BERT model… Is there a clear path toward integrating with external sources of information like the Python runtime? I’m noticing in your example that some likelihood is assigned to sequences that refer to variables that don’t appear to be in scope.

Is there a natural language model embedded inside it? Like, if I feed it “# <mask>” how likely am I to get a comment that documents the next line of code?

2020-06-13 12:42:47 Shubhadeep Roychowdhury:

Hello Tom Lieber Thanks for the comments. At the moment this model is a pure Masked Language Model (a version of RoBERTa) which has 10 layers, and 12 attention head per layer.(With a max position embedding of 1024) And it was trained on about 6M lines of code. So this is just a start. Context Awareness in code means something slightly different than what it means for Natural Language. We have big plans for future. We plan to try out mix modal models (one where we mix graph based and text based information together) to bring more code centric awareness in it. Also, we plan to run some kind of Rule Engine on top of the prediction to cut some noise (Here we can hook into the actual Python runtime/interpreter to gain more insights). Also we are planning to train longformer or refomrer type model to calculate local attention based on a large body of code.

At the moment the <mask> token is only for a single token. However, we have plans to fine-tune this model for many downstream tasks.

We started a series of notebooks showing different applications of this model and will release more powerful and hybird models in future. You can checkout our first notebook (Colab) here - https://colab.research.google.com/drive/17QNGQOsQOUBPlblqc7maiOKPbT4hDZfv?usp=sharing

2020-06-13 04:51:54 Tom Lieber:

Does anyone here have experience embedding WebAssembly VMs? I’d like to talk about where there’s any firm ground from which to start on a FoC idea. I can only find half-finished projects and systems that used to work.

2020-06-13 09:47:07 Mariano Guerra:

this is quite new: https://github.com/timberio/vector/pull/2341

2020-06-13 09:47:48 Mariano Guerra:

https://github.com/Hoverbear/vector/blob/41d90b7df1995429d179c89a4f1c176d72a263f1/rfcs/2020-04-15-wasm-plugins.md

2020-06-13 09:47:59 Mariano Guerra:

have you seen wasmer? https://wasmer.io/

2020-06-13 12:37:08 Doug Moen:

I want to create a web assembly compiler and runtime for my language (so I can embed an entire IDE in a web page). Last time I looked, it seemed that WASM was a half-completed work in progress, and the tooling wasn't complete. So the longer you wait, the easier it will be. I figured the sweet spot will be 2021 for my purposes, otherwise I'd be working around limitations and constantly running to catch up. WASM seems to be progressing quickly, so for projects with fewer requirements than mine, it may be ready right now. Issues I noticed, last time I checked, included lack of support for C++ exceptions, threads, vectorized instructions, GPU access, and difficulty of using the C++ build tools. Rust appeared to have the best tooling.

2020-06-13 21:40:15 Tom Lieber:

It looks like the Vector’s WASM support is still only a proposal(?), and they don’t intend to support my primary OS :-/

2020-06-13 21:41:11 Tom Lieber:

Wasmer looks very promising! Thank you!

2020-06-13 21:45:56 Tom Lieber:

Doug Moen If you’re targeting browsers, Rust and Go have decent preliminary support. I’m doing the opposite, wanting to run WebAssembly outside the browser. It looks like Wasmer does that. I’ll dig deeper when I’m at my laptop.

2020-06-13 22:28:43 Doug Moen:

Tom Lieber Yeah, I know about Rust. But I'm using C++, and I have large C++ library dependencies. I would only expect Rust to be better if I am compiling pure Rust code. Which isn't an option: those C++ libraries are written by specialists, and some have no Rust equivalents. Compiling a mix of C++ and Rust to WASM is not going to be easier than compiling pure C++ to WASM, I'm pretty sure. It would be an easier choice if the Rust library ecosystem were more mature.

2020-06-14 00:22:00 Stephen Paul Weber:

Tom Lieber if you want to embed and are interested in the security properties of WASM especially, I highly recommend Lucet

2020-06-14 00:22:59 Stephen Paul Weber:

Doug Moen If you have all the source code and it's all in C++ (no inline assembly, etc) then emscripten should be able to handle compiling to WASM+JS shim for web or nodejs or deno

2020-06-14 00:28:28 Tom Lieber:

I wish I could, but that’s what Vector uses and that RFC says it’s Linux-only. I honestly don’t care if it’s built out of Fisher Price blocks if it works, I’m just prototyping. 😆 Have you used Lucet?

2020-06-14 00:30:50 Stephen Paul Weber:

Yes. Lucet is great. It runs on MacOS also, though their MacOS support is beta/best effort so not for production use

2020-06-14 00:32:24 Tom Lieber:

Interesting! Worth a look for me, then, thanks!

2020-06-14 00:32:38 Stephen Paul Weber:

I was on the team building a Lucet-based WASM serverless system at $DAYJOB

2020-06-14 00:32:54 Stephen Paul Weber:

it's not live yet, but very promising generally, especially if security features interest you

2020-06-14 00:43:40 Tom Lieber:

They do long term, if I get there. :)

2020-06-14 04:20:57 Edward de Jong:

web assembly is intentionally brain damaged. At present, it is limited to running in a separate thread, and cannot access the DOM directly. All of us JS-haters were hoping for a clean virtual machine with direct API access to the BIOS which would be the DOM. If they had done that it would have created a virtual OS that would have permitted all the languages to easily move to that new universal OS. Instead, JS still rules, and WebAsm is for async heavy computation. Sure you can implement some complex back-and-forth system, but that defeats the whole purpose of getting closer to the metal. If Google & co. let other languages in, it could well lessen their control of the ecosystem. At present the V8 engine reigns supreme; it is an exceptional performing piece of code, but also super complex.

2020-06-14 04:24:52 Tom Lieber:

I write Go that accesses the DOM all the time and haven’t noticed any indirection. What do you mean?

2020-06-14 18:18:41 Edward de Jong:

My understanding is that all WASM modules are running in a separate thread and are not able to directly call the "operating system" which includes the event and screen model. And you have to used shared memory blocks to communicate between these two processes. That is not what i call a full opening to other languages in the browser universe. On a mac or pc, or mobile device you can write in any language, and as long as you package it as an executable for the OS, the OS doesn't care a bit which source languages you used.

2020-06-14 19:00:32 Tom Lieber:

It depends on what’s in the shim. In one sense, you’re right that Go can’t directly call the OS because it only has access to thunks and data that the VM owner puts in its environment, but on the other hand, the OS is accessed in JavaScript entirely through the global object so the “opening” doesn’t need to be very wide at all for access to the OS to be about even in JS and wasm in practice.

There must be synchronization overhead if the wasm executes in another thread (I didn’t know it did, that’s good to know!), but I haven’t noticed it. Wasm must be implemented in a more efficient way than Web Workers, because worker isolation is so strict that you can’t call one synchronously from, say, an event handler that needs to finish in one JS event loop tick, but you can call wasm in an event handler.

The people working on WASI are trying to create a shim that encompasses every functionality that you’d typically get from an OS, so that every compiler can just target that one shim instead of inventing a new one for their language. That’ll provide some of the language-independence you’re talking about, especially since if it becomes standard, browsers can implement DOM access directly instead of relying on memory sharing with JS.

If you’re curious, the Go shim is here, just a few hundred lines: https://github.com/golang/go/blob/master/misc/wasm/wasm_exec.js The system calls it exports to wasm binaries are in importObject (syscall/js.valueGet, syscall/js.valueSet, etc).

2020-06-14 20:31:24 Felix Kohlgrüber:

Tom Lieber I'm currently prototyping a desktop program written in Rust in which I'm using wasm-compiled Rust code as sandboxed plugins. My impression is that wasm is still under heavy development and important proposals like wasm interface types aren't there yet. For my pretty simple use case, I was able to use wasmtime [1]. Due to the lack of interface types, the interaction between VM and wasm code is painfully low-level, but it can be done. What's your use case and which PL would you like to embed the Wasm VM into? [1] https://github.com/bytecodealliance/wasmtime

2020-05-29 21:26:55 Unknown User:

MSG NOT FOUND

2020-06-13 08:14:09 Zubair Quraishi:

Interesting. Do you regard Deno as a FoC type project? I seem to but wonder if I am missing why we don’t cover it more here

2020-06-13 12:33:47 Shubhadeep Roychowdhury:

Hey FoC community, here we are back with the first notebook in a series which shows how to use our codeBERT model for Python.

https://colab.research.google.com/drive/17QNGQOsQOUBPlblqc7maiOKPbT4hDZfv?usp=sharing

Comments and suggestions welcome 🙂

2020-06-01 19:59:49 Unknown User:

MSG NOT FOUND

2020-06-14 16:15:55 nicolas decoster:

I come a bit late (!) too this conversation, but I agree with Ivan Reese when he says: > This is why I see potential for visual programming — it's not just a way to make the programming experience more live, it's actually a way to make the programming experience embedded within and subservient to the arts. Like Flash, but more so. And Scratch offer something like that: you program the sprites and even the scene. You have a simple sound editor and a drawing tool built in, and I see lots of children spending more time drawing than programming, some doesn't even feel like to program at all. In the end you might feel that programming is only one mean among others in your creation process.

2020-06-14 16:22:55 nicolas decoster:

I also like the local maxima point from Tim Babb. I feel the same that it is difficult to make an incremental move from one maximum (now/text programming only for experts) to an other (future/programming that end user can do). > There's not a lot of need or market in that valley between the peaks. The mountain has to be climbed from the bottom, and it's counterintuitive to make a "programming language" that "isn't for programmers" (at first). That is why I guess that a good approach can be to make something that is targeted at end-user programmers. Maybe with a secondary focus to make some expert programmers happy, but not try to convince or make them move all at once.

2020-06-02 00:38:58 Unknown User:

MSG NOT FOUND

2020-06-14 17:00:31 nicolas decoster:

Very interesting discussion! Especially the Pixar anecdote (thanks Tim Babb for sharing it 🙂 ). I guess that any "advanced" are the tools, you will always be able to use it in a messing way. And there will be always cases where it is reasonable to program messy things (as for the Pixar example). For me this is inherent to the act of programming: you are always making compromise between "perfect" (at least perceived perfection, but that is another subject) and "useful/actually used". And I guess it is important to have this central aspect of programming in mind when creating programming tool.

2020-06-14 19:23:44 Steve Dekorte:

A paper on the history of Objective-C and (relevant to this group) it’s motivation of enabling a “software IC” marketplace. https://dl.acm.org/doi/pdf/10.1145/3386332

2020-06-14 19:58:08 Jean-Louis Villecroze:

I know it's not exactly the most popular language, but it's my favorite

2020-06-14 21:22:08 Ivan Reese:

🖌 Episode 48 • Jennifer Jacobs • Para & Dynamic Brushes 🎨

There’s a small handful of people that I’ve been requested again and again to interview on the Future of Coding podcast. Jennifer Jacobs is one of those people. Her work on Dynamic Brushes in particular, and parametric drawing in general, occupies a major intersection between disciplines and provides insights that we can all apply to our own work. This interview touches on childhood education, programming tools for both non-programmers and expert programmers, tangible interfaces, wearable and embodied computation, aesthetics, the relationship between academia and industry, means of evaluating the efficacy of projects, geometric encodings of first-order logic, symbolic representations, whether Scratch could exist outside MIT, and more. Jennifer does a wonderful job articulating the nature her own work, but also the works of her collaborators, peers, and influences, so that we come away with a great understanding for the broader spaces in which her research fits. Jennifer is already am important figure in our Future of Coding field, and I am very excited to follow her career and see all the places the impacts of her work will be felt.

You’ll notice right away that Steve Krouse is sitting in the interviewer chair this time. This is the first of a handful of episodes that Steve recorded in 2019 but didn’t release. I’m planning to edit and release them throughout 2020, so you’ll hear a bit more of Steve yet.

https://futureofcoding.org/episodes/048