toxmeister
Joined 12 years ago
Joined 12 years ago
#2 This is potentially a Safari bug with interactive SVGs on iOS. JS usage on this site is minimal.
From a technical POV, the main reasons I started looking at other languages (Go, C11, TypeScript) back in 2015/16 were: Better performance and less effort required for working with low-level primitives & APIs. I also got more interested again in embedded development (wrote a long blog post about it[1]). The final decision was when I started using thi.ng for a large 5 year computational design tool/project at Nike...
Many of the language features introduced with ES6 (esp. generators, iterables, spread operator, Map/Set, Promises), suddenly made Clojure/ClojureScript feel much more clunky and I felt I can have a lot more fine grained control and performance with much less ceremony/effort, once I implemented (and usually also vastly extended!) some of the key Clojure features/datatypes myself... Working with modern Web APIs (WebGL, WebAudio, WASM, async/await etc.) all became so much easier...
The literate programming (LP) approach I used initially (between 2011-2016) was using the "standard" Emacs OrgMode Babel setup which I found an incredible amplifier for my work[2][3]. Emacs was widely used among the Clojure community back then, but LP itself as an approach _was_ unusual, still is, and scared people off...
[1] https://medium.com/@thi.ng/the-jacob-s-ladder-of-coding-4b12... [2] https://www.reddit.com/r/emacs/comments/9w8i2g/comment/ec7xv... [3] https://www.reddit.com/r/Clojure/comments/9deyxe/comment/e69...
- 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...
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)
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'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...
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)
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...
- OpenCL interop (e.g. https://thi.ng/raymarchcl, https://thi.ng/simplecl)
- GLSL (e.g. https://thi.ng/shader-ast)
- C11 (e.g. https://github.com/thi-ng/c-thing, https://thi.ng/synstack)
- Zig (https://github.com/thi-ng/zig-thing)
- WASM (https://thi.ng/wasm-api)
- Forth (https://thi.ng/charlie)
There are infrastructure packages to simplify creation of ad hoc DSLs, their transpilation or interpretation, but also interop with WASM (so far mostly geared towards & tested with Zig), for example:
- https://thi.ng/parse
- https://thi.ng/pointfree
- https://thi.ng/lispy
- https://thi.ng/sexpr
In general, thi.ng projects range from super high level computational design concepts to low-level primitives like memory allocators and memory/data layout management (e.g. https://thi.ng/tinyalloc, https://thi.ng/malloc, https://thi.ng/simd, https://thi.ng/soa) and a huge spectrum of other things in between...