Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: Thi.ng – open-source building blocks for computational design
107 points by toxmeister on Nov 30, 2020 | hide | past | favorite | 41 comments
The first stage of the new http://thi.ng website is live, an up-to-date & hopefully more useful springboard to the 250+ projects and overview of my opensource activity since 2006...

Work is ongoing, collecting & re-organizing projects, assets, documentation and extracting interrelationships (incl. older work & music projects (e.g. http://thi.ng/synstack related), clients/people...). Aim is a proper archive of the past 20+ years of outputs & encounters.

This is the first website update since 2015. As the timeline visualizations show, building(http://thi.ng) > marketing(http://thi.ng) - maybe unusual these days, but hey... :)

The entire site is generated w/ tools from the http://thi.ng/umbrella collection, e.g. http://thi.ng/egf (graph file format), http://thi.ng/csv (semantic CSV parsing), http://thi.ng/transducers (functional data transformations), http://thi.ng/defmulti (multiple dispatch for template engine), http://thi.ng/hiccup (HTML/SVG generation), http://thi.ng/viz (timeline visualizations), http://thi.ng/color (heatmap gradients)

There's also a massive spreadsheet (148k cells adjacency matrix) to centrally define & manage the 570+ tags used to categorize the 257 projects/repositories and to batch update their package files (edits ongoing, much fun!). The tag/project relationships are compiled into an HTML list with project IDs stored as base90-encoded data attributes for each tag in the tag cloud (http://thi.ng/#tags)

The timeline visualizations are generated directly from local Git repos, package files and associated metadata stored in a number of linked http://thi.ng/egf graphs. The site toolchain will be released in due course...

Last but not least, any constructive feedback (good or bad) is very welcome! The next phase will include more individual project details, images, making-of docs, videos, xrefs etc. Currently, just a step in the right direction...




Aah, thi.ng! The creative coding framework I've been meaning to check out for years but never have! But the things (hah) made in it have always amazed me!

So one bit of feedback on the site: it's fantastic as a portfolio site. However, while it's great for getting an impression for everything made with this framework and how large the framework is, what is missing is a big "START HERE" button.

I get why that might feel like something you don't need: th.ing is set up differently than Processing, p5.js, OpenFrameworks or any game-loop based creative coding framework. So there is no real centralized starting point. Which is fine, but then that has to be clearly communicated too, and it isn't. It's mentioned in very thin fine print under the How? section, which is hidden under a "read more" link when viewing the website on mobile (also, I do get that thi.ng/umbrella is kind of emphasized as an implicit suggested starting point, but it's still a bit confusing).

So basically, the discoverability for how people should get into the framework could use a lot of improvement. It could use a bit more awareness of expectations of your visitors and how you either meet or break those.


Maybe it's just me, but that seems like part of a common problem on websites submitted to HN - you go to gooblorgs.io, because now apparently it is compatible with snootlr and that somehow got it to the top of the page, only to discover that the entire website doesn't contain a single line that explains what a gooblorg actually does, or would even point you in the general area of the industry this is related to.


If you read the comments in this thread it's clear that there are readers who haven't understood from the submission title or from the landing page what thi.ng is. When I read the word 'computational design' I don't immediately think of 'parametric design', 'algorithmic design', 'generative design'. Instead, I have to use google and read around. The landing page itself describes thi.ng as 'a truly manifold long-term project devoted to Computational Design'; again I'm a bit stumped, what does the author mean by manifold in this context? Go to the github page and the title reads 'Polyglot computational design tools', are we calling ourselves Polyglots now? Seriously?

That's usually about as far as I get before I conclude that I don't care enough. To my mind those are all flags which indicate that it's probably not something I want to engage with.


That one is interesting indeed. I'm a bit curious about you taking issues with "manifold" and "polyglot" here:

- manifold - something taking many forms - polyglot - https://en.wikipedia.org/wiki/Polyglot_(computing)

I'm pretty sensitive to marketing BS/buzzwords myself, but unlike the usual "blazing fast" and similar hypephrases, the above two words actually are 100% correct use of the terms (IMHO)

See my other reply above re:scope and projects written in: TypeScript, Clojure/script, C, OpenCL, GLSL, VEX, Java, Forth - if this is not polyglot, then what is?


To be frank, I take issue with manifold and polyglot because both come across as unnecessarily pretentious use of english. The secondary problem is that I looked in two places to find 'what' the project is. Instead of finding information I found adjectives which can convey an intention to impress, this can easily give a negative first impression.

With no context the sentence 'truly manifold long-term project devoted to ...' is meaningless to me, because I don't know if we share common definitions of four highly subjective terms: 'truly', 'manifold', 'long-term' and 'project'. On first impression this does not come across as a singular 'project' in the way I would define one. Consequently, as a first time reader a get confused.

In contrast to the site, your description in this thread 'thi.ng is definitely not a framework - it is a collection of ...' makes immediate sense. Here you expressed the essential information in a 20 word sentence. On the site the same thing is expressed in a meandering 40 word sentence.


Correct doesn't mean it's obvious to the average person, especially with uncommon words. I for one don't ever use manifold as an adjective. In fact, I only use it as part of technobabble nonsense to cheekily remind my mathematician friend that he's free to think that the topics he works on are trivial, but that the rest of the world won't agree with him.

[0] https://en.wikipedia.org/wiki/Manifold


Happy to entertain equally succinct counter proposals :)


Exactly, it seems like the intended audience is "people who are already familiar with it", but then it's unclear what use it is to them.


Thanks for the feedback - very much confirms some of my own issues, but it's also clear that I still have to find a better solution to emphasize some key points of differentiation:

1. thi.ng is definitely not a framework - it is a collection of 260 largely independent libraries & projects built around them 2. Because of #1, there cannot be a single "start here". I was hoping that the interactive tag cloud would make this obvious and also fulfil that "start here" role: Users choose a tag/topic of interest and get a list of relevant projects, each with a readme (and often a list of examples)

To give an example of the problem: Say you're interested in building UIs. There're currently ~20 different projects related to that (of which only a few are related to each other, the rest independent), some are DOM based, some use canvas, others are for OpenGL, Java, Clojure, even others are for baremetal ARM devices. Where's the "start here"? An even larger number of packages are dealing with/providing data structures? What funnel should/could these have?

140 of the ~260 projects are part of the thi.ng/umbrella monorepo and written in TypeScript. These are somewhat more cohesive (in terms of style, approach & infrastructure), but still definitely not a framework. Then, there's also the issue that "monorepo" has multiple interpretations too by now:

1. a large (more or less) single-purpose project consisting of multiple packages/sub-projects 2. a google-style monolithic repository providing a common source of truth for thousands of projects (not all related)

thi.ng/umbrella is somewhere between #1 & #2. thi.ng at large is definitely a #2...

I'd really be interested in hearing how others would approach this from an UX POV, since it is seemingly different to the vast majority of open source offerings, especially in that wider field of "creative computing" (which itself IMHO is a too limiting term for thi.ng - there's a much stronger focus on topics outside what's covered by P5, OF, Cinder, OPENRNDR etc.)


Well, I'd start with assuming the majority of visitors will expect a framework, and countering that with explicitly saying THIS IS NOT A FRAMEWORK! very early on on the website. Expectation management will go a long way.

Maybe a search box with "what topic would you like to play around with?", with some optional checkboxes to refine the search query (for example, maybe I want to work in the browser and limit my results to TypeScript and ClojureScript. That would also help a bit with getting the "toolbox" aspect across.

Another idea is to have example projects made with thing (the portfolio part) that also clearly demonstrate which of the libraries were used.


Ok, I think the issue is that people really just don't read anymore :)

First paragraph, second sentence:

"Not a framework, nor bound to any specific use case, environment or even language, it's a vast and mature set of complementing code libraries, which has organically grown to approx. 250 sub-projects"

As for the topic search: The search box says "search by topic" (fuzzy search) - the tags in the tag cloud are all clickable. Is that really not obvious (even though it's also mentioned in the text)? Click on "typescript" to only show typescript projects etc.

As for the example projects. This is also explained in the text. This work is ongoing. There're another 150 or so projects to be added (just my own). For community submissions there is & will be: http://awesome.thi.ng/ (currently just linking to the submission form)


> Ok, I think the issue is that people really just don't read anymore :)

The willingness to invest in reading many paragraphs of fine print (and really, as presented it is fine print) comes after a successful sales-pitch, not before it.

(Also, blaming bad UX on the user won't help in the long run)

> As for the topic search: The search box says "search by topic" (fuzzy search) - the tags in the tag cloud are all clickable. Is that really not obvious (even though it's also mentioned in the text)? Click on "typescript" to only show typescript projects etc.

It's not obvious in terms of telling anyone how this helps them get started. Sure I can search, but what am I searching through?


I didn't mean to imply that your comments are invalid, they're fair enough. Though, this is NOT a sales website, it's a springboard/archive of a body of work, spanning 15-20 years (eventually)...

My sense from some of your above argumentation and issues re: word choices, is that there's somewhat of an implicit expectation of the uniform format of SV-stylee startup landing pages and JS libraries: snappy big letter bullet list of selling points, 5-line code examples and a big fat get started button...

People with such expectations really haven't been the audience so far and likely never will be. Can I/we do a better job to demonstrate use cases and help guiding people discovering relevant projects for their use cases? Yes, definitely, but bandwidth issue, function over time. Though, it's very likely the following will remain an unmovable truth (as explained on the thi.ng/umbrella readme):

> This project is NOT a framework, provides no turn-key, one-size-fits-all approach and instead encourages a mix & match philosophy for various key aspects of application design.

There're many (likely experienced) developers who do very much appreciate such an approach, just as there will be developers for which this means a no-go zone. I think this is fine.

(...and again, I sincerely thank you for your feedback - food for thought!)


> there's somewhat of an implicit expectation of the uniform format of SV-stylee startup landing pages and JS libraries: snappy big letter bullet list of selling points, 5-line code examples and a big fat get started button...

Oh I absolutely do not wish the main take-away from my comments to be that your website should be that! Apologies if that was what it felt like

My point is that even when you do not want to give people what they expect (and you have good reasons for not doing so, as you sum up here), you still need to meet them where their expectations are and lead them out of it. Because that's the best way to make sure that they find their way to where you are coming from and where you want them to end up too.


I've used Processing extensively, including toxilibs, and follow the creative coding community relatively closely. When I look at projects like openFrameworks or libcinder or Processing/p5.js, it's pretty clear to me both what those project are and how to get started with them.

I've kept an eye on thi.ng for years. I like the visuals on the former and current homepage and it seems like something that I would like to understand better. However, exactly what thi.ng is or how I am supposed to use it -- that always remains ever so slightly out of reach to me. The messaging is so focused on cobbling micro-libraries together that it feels like it is left to the reader to understand the possibility space of what you can achieve by doing so. For me, at least, that introduces enough friction to trying the tools that I feel tired and move on to something else.

If you can, I'd consider creating a few very straightforward Shiffman-esque tutorials (a la Nature of Code or something) that drop the discussion of why things are structured how they are and focus instead on helping the reader create something. I feel like if you help draw the line between the capabilities of the libraries and using them in production that the entire project will be more accessible.


This is great feedback! I've got a lot plans for those areas, but the main roadblock is personal bandwidth. This has primarily been a spare time project for the past 4-5 years...

There're ~100 examples for thi.ng/umbrella alone, all commented, all linked from the readme's of each package used. Additionally, I've spent a lot of time this year adding more readmes, docstrings (again with examples), create diagrams etc. I completely get your comments/position, but I'm also really wondering if any of this work is just wasted effort if no one actually reads/looks at that stuff... and that then makes it even harder for me to prioritize.

FWIW I will also start streaming again in December, focusing on smaller projects/examples than previously. Maybe that format will work better for newcomers.

Obviously, there's no desire from my end to be overly cryptic about what you can do with these projects, but whereas P5, OF etc at their core all have a fairly narrow scope (DSLs for OpenGL API and some data wrangling sugar) and only gain their incredible flexibility through various addons and sheer community size, thi.ng simply has no core and that is the hardest thing to "sell" to people, even though IMHO it's also one of it's most unique aspects...

thi.ng is an ecosystem (as others have put it), not following the standard main pillar/silo + plugin architectures...


The "no core" note is a good explanation but also points to the exact reason why folks coming from other creative coding ecosystems might need help resetting their expectations. Thanks!


I know you did a lot of work in Clojure(Script) originally, and IIRC you mostly switched to Typescript. Is that correct? How many of your projects are now designed to be consumed from CLJS vs JS/TS?


There're about 140 TS libraries vs. 70-80 Clojure/ClojureScript projects (around only half of which are libraries).

I partially stopped with the Clojure work because of lack of community/support, perf & workflow issues and changing interests (e.g. got back into C/Forth/STM32). Before that, I've tried for 4-5 years to encourage more people adopting CLJ/CLJS and to provide tools for graphics, data viz, digital fabrication etc. to make the language more appealing/useful for these folks. In hindsight it seems I gave up a year too early... Still, I find the TS monorepo workflow much more suitable for myself (and for the project), since large scale refactoring without types often has been a complete nightmare in Clojure (also using Literate Programming/org-mode made it even harder in these case). Plus, trying to write performant cross-environment code (for realtime graphics) in CLJC has been a quite painful/hairy experience. Still, as I said before, I do have very fond memories of the 6-7 years spent with the language & community. It's been partially commercial suicide (at the time), but an huge and important learning experience and I'm happy that (in the end) quite a few people found (and still do find) those tools useful...


I tried to get more people to pay attention to what you were doing, and still miss you in the Clojure community.


He explained this in a Twitter thread a couple of years ago: https://twitter.com/toxi/status/1041143431786115072


This site is a bit confusing at first, originally I thought they were modular libraries for writing general software.

But it seems to be a collection of tools specifically for generating computational art/design. Still impressive and useful though!


Maybe I mentioned Compdes a bit too often... /shrug

From this comment and others it seems maybe not many people are familiar with the meaning of the term: Design through/by computational means, incl. procedural, generative, evolutionary approaches...

Having said this, these libraries are closer to general purpose computing, but there's somewhat of a bias in terms of topics and data structures towards geometry, graphics, data transformations, visualization etc.


If you talked about creative computing[0] I would have understood earlier. Or made comparisons with Processing or SuperCollider.

[0] https://en.wikipedia.org/wiki/Creative_computing


Creative computing is just a subset of computational design though and wouldn't have sufficed... also see my answer here: https://news.ycombinator.com/item?id=25263818


Yes, it's a subset, but you should nonetheless talk about creative computing in the landing page. And also about other stuff!


You posted on a full moon day, and this is exactly the vibe I get from your projects. Thank you for the wonderful libraries! I've been using thi.ng/geom and thi.ng/color before and the code is easy to use and modify.


I used thing/color on a project where I needed to generate color palettes and ensure contrast.

I was blown away by the scope of your work, and really appreciate it.

Personally, I've been trying to figure out a literate programming style for clojure, but when I saw that you had given up on it, I figured that if it was a barrier to entry for thi.ng contributions, then I might not stand a chance with my smaller projects.

1. Do you have any advice on building community around your projects?

2. Or thoughts on the more recent advances in literate programming like https://github.com/scicloj/notespace ?


Thanks - some of the reasons for giving up on LP using org-mode are here (mainly external factors):

- https://www.reddit.com/r/emacs/comments/9w8i2g/orgmode_liter... - https://www.reddit.com/r/Clojure/comments/9deyxe/thinggeom_a...

The main feedback re: LP style was the additional layer of indirection and unfamiliarity with the idea of code blocks within an .org file. Also obviously the dependency on Emacs for a decent editing experience of these files didn't help either, even though I always thought for Clojure this was less of an issue (at least back then). With more popular IDEs available by now, I'd say it'd be even harder to convince people to contribute in that style...

The only practical advice re: community building I can provide is trying to be there for new users, providing answers/guidance/examples/infrastructure, a space to exchange ideas (i.e. our Discord). That's especially important if other things like extensive documentation/tutorials are still missing. Doing this isn't always easy and there're periods when I'll have to disconnect, but I'm super grateful that we now are starting to have more people helping out on that front, even though the community is still rather small...

Thanks for the notespace link, will it check out asap...


So thi.ng is a collection of open-source libraries for writing software? What am I missing?


Is that not enough?


Both the text of the submission and the other comments here suggest that I am missing something. As a specific example, I don’t expect to see making-of videos for collections of general-purpose libraries.

So I’m curious what that “something” is.

Do you know the answer to my question?


I don't think you miss anything. It is what it is, a collection of OS libs for generative art.


not OP, but the "generative art" part is what I missed


No, that’s what I missed as well.


One suggestion would be to make the carousel a bit slower to switch... I read pretty fast, but I was only able to read a few sentences in each one before it flipped to the next page.


Thanks & noted! Btw. the scrolling stops if you hover with your mouse over it/touch the area (similar to IG stories)


A lot of what I see on hackerne.ws gives me the emotional feeling of the industrial revolution.

Looking at a thi.ng project is closer to the feeling of the renaissance, a period of experimentation and discovery in the arts. Learning, and mastering, a medium through projects over time.


yo just adding my two cents here regarding the presentation.

I am sure this is the coolest thing going because we all know the quality of your work.

If the idea is to get new people playing with the library it would really help simplifying everything. I do actually like the idea of adopting a landing page style design... (hinted at in some of the other comments_ there are reasons why they work.

the website feels cryptic and doesn't give a point of entry ("start here", "look at this thing doing something")

there is way too much text in my opinion, its more of a showcase of commits and terminology than of the project.


Thanks, Thomas! The #1 issue is that a singular entry point simply doesn't exist, largely because of the sheer number of different projects, platforms and use cases involved. The interactive tag cloud was supposed to be the main starting point mechanism, allowing users to explore projects by topic. Yet, somehow this doesn't seem to register with people (at all)... Also, all the timelines have tooltips, are clickable and take you to their respective project pages.

Comparisons with tools like Processing/OF aren't right or fair either, because they focus on a much smaller feature range and then rely on external plugins to expand scope. thi.ng projects have a bias (in terms of percentage of sub-projects) towards data structures, geometry and graphics, but, at large, ALSO cover the "full stack" (arrrgh!!) via tools for: baremetal programming (e.g. on Cortex M4/7 ARM devices), functional & reactive programming, data processing (transducers, datastructures, querying), there're several DSLs & general DSL tooling for creating new ones (parser generators, interpreters, transpilers, VMs), audio/DSP (signal generators, oscillators, filters), file format support (importers, exporters) to UI (for web, desktop, in multiple languages)... Also don't forget most of these libraries are independent. So I'm genuinely, genuinely wondering how one would distill this into a traditional landing page setup? Also, how this is comparable to say P5? It isn't, not even close!

What this discussion has brought out and confirmed again (to me, at least) is the commodification of ideas and the explicit expectation of ideas packaged into easily consumed products. Products, which can be consumed and need to provide a quick sale, regardless of conceptual depth (or breadth in this case)... it's a little sad to see! By that logic I'd need to create 250 websites... and there also somewhat are already: Most projects have their own URL (e.g. http://thi.ng/transducers, http://thi.ng/morphogen etc.)

I'm really not trying to be defensive (even if it might come across as such, merely trying to provide more subtlety & context to some of the comments). I'm thankful & there's a lot of food for thought how to approach the next phase of development, but I'm honestly surprised by some of the comments (esp. from this crowd)


Wonderful




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: