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...
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.
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.
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.)
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.
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'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.
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...
But it seems to be a collection of tools specifically for generating computational art/design. Still impressive and useful though!
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.
So I’m curious what that “something” is.
Do you know the answer to my question?
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 ?
- 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...
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.
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)
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.