AlgoApril

About

Learning about & applying algorithms and data structures for generative art/design, helping to introduce participants to a wider spectrum of techniques.

Unlike other initiatives like #genuary, #codevember, #nodevember etc., all of which are predominantly using visual/conceptual prompts, the focus of the #AlgoApril initiative is on algorithmic literacy, using technical, algorithmic prompts (of course, with some [visual] references and study materials) without further prescribing how these algorithms should be used. The only aim, goal and hope is for people to creatively engage with these techniques, breaking 'em, hacking 'em and finding interesting uses to create outcomes, which could be considered artistic. Algorithmic layering is encouraged at each turn!

In some sense, this more "bottom-up" approach to creation is maybe alien to some, but the lack of explicit aesthetic or conceptual/artistic goals has the potential to produce a much wider scope of outcomes (hopefully not only visual - audio, text and other outputs are highly encouraged!). There's also hope it could be more educational, helping people to engage with a larger repertoire of fundamental algorithmic tools and then apply & mix them in their own work/practice.

Many of the topics & algorithms selected here will have a more or less known visual representation and we encourage everyone to consciously reject these clichés and make honest attempts to find creative other solutions to visualize/sonify/represent them.

Format

In short: Still TBD.

Initial community feedback seems to show a general preference for a slower-than-daily pace, e.g. weekly. This makes sense, because the stated aim is "learning new things" (in addition to creating "interesting things") and faster is not always better! In general, only because there will be altogether 30 prompts, there should be however no expectation of daily participation. Also participation in one's own time after April 2022 is highly encouraged and would still be individually useful... Get in touch with your own thoughts on the matter!

Required skills

This is not a curriculum and should not be seen as a form of courseware. There're also no specific requirements or languages. Practically though, you should already feel (quite) familiar with your chosen language or toolset, so that your focus can be on the creative exploration of the prompts, rather than struggling along with syntax & fundamental semantics.

(Very incomplete) List of topics

These will still have to be properly selected, ordered and turned into actual daily prompts with linked references/materials. In no particular order or importance (yet)! The current list is very early WIP, more of a brain dump and has a large thematic overlap with a courseware I'm currently preparing for various thi.ng/umbrella packages. Feel free to add/remove (see section below)!

  1. Non-uniform random distributions
    • Gaussian/normal, geometric, exponential...
    • Poisson disc sampling
    • Density fields
  2. Colored noise
    • red, blue, pink, brown, green...
  3. Low discrepancy sequences
    • Halton, Kronecker, Plastic number
  4. Metrics & dissimilarities
    • Manhattan, Chebyshev, Haversine, Hamming, Canberra, Minkowski...
    • Bray-Curtis, Jaccard, Sørensen–Dice...
  5. (Signed) Distance Fields
    • 2D/3D shape/form creation/combination/rendering
    • Spatial manipulations
    • Typography
  6. Interpolation
    • 1D/2D/3D/nD
    • non-linear functions
    • bilinear, trilinear, cubic, bicubic, hermite, bezier etc.
  7. DSP
    • Waves/oscillators
      • Additive vs. subtractive synthesis
      • Granular synthesis
      • Physical modeling
      • AM/FM, LFOs (modulation)
    • Filtering
      • IIR vs. FIR type filters
      • LP/HP/BP/Biquad
    • DFT/FFT
      • Window functions
  8. Trees
    • Spatial indexing: Quad/Oct/Kd-trees
    • Sparse Voxel trees
    • Interval trees
    • Abstract syntax trees (e.g. S-expressions, Lisp, WASM, parsing)
  9. Subdivisions
    • Tree vs curve/shape/mesh
    • Chaikin, Catmull-clark, Doo-Sabin, Loop etc.
    • Displacements
  10. Graphs
    • Directed vs. undirected
    • Adjacency/degree matrices
    • Analysis/visualization
  11. Disjoint Sets
    • Unionfind (e.g. blob detection/labeling)
    • Mazes
  12. Minimum Spanning Tree
    • Kruskal
  13. Paths
    • Shortest paths, Dijkstra...
    • Hamiltonian
  14. Convolution
    • Kernels
    • Cellular automata
    • Audio (1D), Image (2D), Volume (3D) filtering
  15. Dataflow/reactivity
    • graph/event based
    • spreadsheet
    • transformation, signal/collect/broadcast
    • deterministic vs. undeterministic
  16. Physics
    • rigid vs. softbody vs. fluids
    • behaviors/constraints
  17. Meshes

More to come/select...

Prompts

For each prompt we will try to provide a list of references, tutorial links, and where applicable, images/diagrams/videos, (pseudo)code examples.

TODO - to be extracted & ordered from above topics

Resources

TODO

  • Wikipedia
  • Sedgewick/Alg4CS
  • Github repos
  • Images
  • Youtube vids
  • Blog posts / tutorials

Contributing

Looking for contributors. For now, please feel free to propose topics, prompts, references and any other useful materials.

There're two barebones project boards:

Contact

Please get in touch:

License

© 2022 The #AlgoApril authors // MIT licensed