# [sketch-a-day](https://abav.lugaralgum.com/sketch-a-day) ## coding a visual idea a day Welcome! My name is [Alexandre Villares](https://abav.lugaralgum.com) and since January, 2018 I have been coding *sketches* everyday, publishing the source code in the same repository that stores this page, [github.com/villares/sketch-a-day](https://github.com/villares/sketch-a-day). The results here are mostly tentative, exploratory, and I don’t feel like they need to be relevant or meaningful on any particular day. The everyday practice leads to the emergence of ideas that I consider interesting, worthy of further exploration. Some of those have been added to [selected work](https://abav.lugaralgum.com/selected-work/index-EN.html), this collection itself became valuable for me, and it is my pleasure to share it with anyone willing to explore coding as a creative and expressive medium. To support my artistic work, research and open educational resources I freely publish on-line, donate using [Wise](https://wise.com/pay/me/alexandrev562), [Liberapay](https://liberapay.com/villares), [PayPal](https://www.paypal.com/donate/?hosted_button_id=5B4MZ78C9J724), or to the Brazilan PIX key `46c37783-5edb-4f1c-b3a8-1309db11488c`. You can follow me on Mastodon [@villares@ciberlandia.pt](https://ciberlandia.pt/@villares) or at @villares@pynews.com.br, where I post most of my daily sketches. Please do not hesitate to [contact me](http://contato.lugaralgum.com) regarding licenses to use my work, teaching opportunities, consulting or other projects. --- 2026 \| [2025](2025.md) \| [2024](2024.md) \| [2023](2023.md) \| [2022](2022.md) \| [2021](2021.md) \| [2020](2020.md) \| [2019](2019.md) \| [2018](2018.md) --- ### sketch_2026_07_30 ![sketch_2026_07_30](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_30/sketch_2026_07_30.gif) [sketch_2026_07_30](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_30) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_29 ![sketch_2026_07_29](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_29/sketch_2026_07_29.gif) [sketch_2026_07_29](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_29) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_28 ![sketch_2026_07_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_28/sketch_2026_07_28.gif) [sketch_2026_07_28](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_28) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_27 ![sketch_2026_07_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_27/sketch_2026_07_27.gif) [sketch_2026_07_27](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_27) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_26 ![sketch_2026_07_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_26/sketch_2026_07_26.gif) [sketch_2026_07_26](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_26) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_25 ![sketch_2026_07_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_25/sketch_2026_07_25.gif) [sketch_2026_07_25](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_25) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_24 ![sketch_2026_07_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_24/sketch_2026_07_24.gif) [sketch_2026_07_24](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_24) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_23 ![sketch_2026_07_23](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_23/sketch_2026_07_23.png) [sketch_2026_07_23](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_23) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_22 ![sketch_2026_07_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_22/sketch_2026_07_22.gif) [sketch_2026_07_22](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_22) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_21 ![sketch_2026_07_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_21/sketch_2026_07_21.gif) [sketch_2026_07_21](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_21) [[py5](https://py5coding.org/)] #shapely v = poly.exterior.interpolate(t, normalized=True) --- ### sketch_2026_07_20 ![sketch_2026_07_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_20/sketch_2026_07_20.gif) [sketch_2026_07_20](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_20) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_19 ![sketch_2026_07_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_19/sketch_2026_07_19.png) [sketch_2026_07_19](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_19) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_18 ![sketch_2026_07_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_18/sketch_2026_07_18.png) [sketch_2026_07_18](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_18) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_17 ![sketch_2026_07_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_17/sketch_2026_07_17.png) [sketch_2026_07_17](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_17) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_16 ![sketch_2026_07_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_16/sketch_2026_07_16.png) [sketch_2026_07_16](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_16) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_15 ![sketch_2026_07_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_15/sketch_2026_07_15.png) [sketch_2026_07_15](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_15) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_14 ![sketch_2026_07_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_14/sketch_2026_07_14.png) [sketch_2026_07_14](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_14) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_13 ![sketch_2026_07_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_13/sketch_2026_07_13.png) [sketch_2026_07_13](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_13) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_12 ![sketch_2026_07_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_12/sketch_2026_07_12.gif) [sketch_2026_07_12](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_12) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_11 ![sketch_2026_07_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_11/sketch_2026_07_11.png) [sketch_2026_07_11](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_11) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_10 ![sketch_2026_07_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_10/sketch_2026_07_10.png) [sketch_2026_07_10](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_10) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_09 ![sketch_2026_07_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_09/sketch_2026_07_09.png) [sketch_2026_07_09](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_09) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_08 ![sketch_2026_07_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_08/sketch_2026_07_08.png) [sketch_2026_07_08](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_08) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_07 ![sketch_2026_07_07](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_07/sketch_2026_07_07.gif) [sketch_2026_07_07](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_07) [[py5](https://py5coding.org/)] 90 estrelas --- ### sketch_2026_07_06 ![sketch_2026_07_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_06/sketch_2026_07_06.gif) [sketch_2026_07_06](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_06) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_05 ![sketch_2026_07_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_05/sketch_2026_07_05.png) [sketch_2026_07_05](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_05) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_04 ![sketch_2026_07_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_04/sketch_2026_07_04.png) [sketch_2026_07_04](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_04) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_03 ![sketch_2026_07_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_03/sketch_2026_07_03.png) [sketch_2026_07_03](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_03) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_02 ![sketch_2026_07_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_02/sketch_2026_07_02.png) [sketch_2026_07_02](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_02) [[py5](https://py5coding.org/)] --- ### sketch_2026_07_01 ![sketch_2026_07_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_07_01/sketch_2026_07_01.png) [sketch_2026_07_01](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_07_01) [[py5](https://py5coding.org/)] --- ### sketch_2026_06_30 ![sketch_2026_06_30](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_30/sketch_2026_06_30.png) [sketch_2026_06_30](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_30) [[py5](https://py5coding.org/)] Continued from sketch_2026_06_07 --- ### sketch_2026_06_29 ![sketch_2026_06_29](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_29/sketch_2026_06_29.png) [sketch_2026_06_29](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_29) [[py5](https://py5coding.org/)] --- ### sketch_2026_06_28 ![sketch_2026_06_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_28/sketch_2026_06_28.gif) [sketch_2026_06_28](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_28) [[py5](https://py5coding.org/)] A blast from the past... revisiting a 2018 sketch-a-day sketch "s310". --- ### sketch_2026_06_27 ![sketch_2026_06_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_27/sketch_2026_06_27.png) [sketch_2026_06_27](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_27) [[py5](https://py5coding.org/)] --- ### sketch_2026_06_26 ![sketch_2026_06_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_26/sketch_2026_06_26.png) [sketch_2026_06_26](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_26) [[py5](https://py5coding.org/)] --- ### sketch_2026_06_25 ![sketch_2026_06_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_25/sketch_2026_06_25.png) [sketch_2026_06_25](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_25) [[py5](https://py5coding.org/)] --- ### sketch_2026_06_24 ![sketch_2026_06_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_24/sketch_2026_06_24.png) [sketch_2026_06_24](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_24) [[py5](https://py5coding.org/)] --- ### sketch_2026_06_22 ![sketch_2026_06_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_22/sketch_2026_06_22.png) [sketch_2026_06_22](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_22) [[py5](https://py5coding.org/)] WIP --- ### sketch_2026_06_21 ![sketch_2026_06_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_21/sketch_2026_06_21.png) [sketch_2026_06_21](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_21) [[py5](https://py5coding.org/)] WIP, it was easy and fun to add sound using the Processing Sound library... let's see if I can post a capture with sound... --- ### sketch_2026_06_20 ![sketch_2026_06_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_20/sketch_2026_06_20.png) [sketch_2026_06_20](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_20) [[py5](https://py5coding.org/)] WIP memory game, maybe --- ### sketch_2026_06_19 ![sketch_2026_06_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_19/sketch_2026_06_19.png) [sketch_2026_06_19](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_19) [[py5](https://py5coding.org/)] WIP of a memory game, maybe --- ### sketch_2026_06_18 ![sketch_2026_06_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_18/sketch_2026_06_18.png) [sketch_2026_06_18](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_18) [[py5](https://py5coding.org/)] WIP of a memory game, maybe --- ### sketch_2026_06_17 ![sketch_2026_06_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_17/sketch_2026_06_17.gif) [sketch_2026_06_17](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_17) [[py5](https://py5coding.org/)] --- ### sketch_2026_06_16 ![sketch_2026_06_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_16/sketch_2026_06_16.gif) [sketch_2026_06_16](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_16) [[py5](https://py5coding.org/)] --- ### sketch_2026_06_15 ![sketch_2026_06_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_15/sketch_2026_06_15.gif) [sketch_2026_06_15](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_15) [[py5](https://py5coding.org/)] --- ### sketch_2026_06_14 ![sketch_2026_06_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_14/sketch_2026_06_14.png) [sketch_2026_06_14](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_14) [[py5](https://py5coding.org/)] --- ### sketch_2026_06_13 ![sketch_2026_06_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_13/sketch_2026_06_13.png) [sketch_2026_06_13](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_13) [[py5](https://py5coding.org/)] --- ### sketch_2026_06_12 ![sketch_2026_06_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_12/sketch_2026_06_12.png) [sketch_2026_06_12](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_12) [[py5](https://py5coding.org/)] --- ### sketch_2026_06_11 ![sketch_2026_06_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_11/sketch_2026_06_11.png) [sketch_2026_06_11](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_11) [[py5](https://py5coding.org/)] --- ### sketch_2026_06_10 ![sketch_2026_06_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_10/sketch_2026_06_10.gif) [sketch_2026_06_10](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_10) [[py5](https://py5coding.org/)] --- ### sketch_2026_06_09 ![sketch_2026_06_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_09/sketch_2026_06_09.png) [sketch_2026_06_09](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_09) [[py5](https://py5coding.org/)] --- ### sketch_2026_06_08 ![sketch_2026_06_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_08/sketch_2026_06_08.png) [sketch_2026_06_08](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_08) [[py5](https://py5coding.org/)] --- ### sketch_2026_06_07 ![sketch_2026_06_07](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_07/sketch_2026_06_07.png) [sketch_2026_06_07](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_07) [[py5](https://py5coding.org/)] --- ### sketch_2026_06_06 ![sketch_2026_06_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_06/sketch_2026_06_06.png) [sketch_2026_06_06](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_06) [[py5](https://py5coding.org/)] Now I think I got it exactly! (https://freeradical.zone/@bitartbot/116696573113492478) --- ### sketch_2026_06_05 ![sketch_2026_06_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_05/sketch_2026_06_05.png) [sketch_2026_06_05](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_05) [[py5](https://py5coding.org/)] inspired by https://freeradical.zone/@bitartbot/116696573113492478 f(x,y) = ((((y % 9) * (~y)) & (-(x & x))) ^ (~((-y) ^ (-y)))) % 6 --- ### sketch_2026_06_04 ![sketch_2026_06_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_04/sketch_2026_06_04.gif) [sketch_2026_06_04](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_04) [[py5](https://py5coding.org/)] #LSystem --- ### sketch_2026_06_03 ![sketch_2026_06_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_03/sketch_2026_06_03.png) [sketch_2026_06_03](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_03) [[py5](https://py5coding.org/)] #LSytem --- ### sketch_2026_06_02 ![sketch_2026_06_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_02/sketch_2026_06_02.png) [sketch_2026_06_02](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_02) [[py5](https://py5coding.org/)] #SãoPaulo map made with #geopandas + #folium + social vulnerabilirty index data from GeoSampa. A heavy but interactive version at https://abav.lugaralgum.com/sketch-a-day/2026/sketch_2026_06_02/mapa.html --- ### sketch_2026_06_01 ![sketch_2026_06_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_06_01/sketch_2026_06_01.png) [sketch_2026_06_01](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_06_01) [[py5](https://py5coding.org/)] More slider experiments... --- ### sketch_2026_05_31 ![sketch_2026_05_31](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_31/sketch_2026_05_31.png) [sketch_2026_05_31](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_31) [[py5](https://py5coding.org/)] I think I'm going to revisit my silly Slider class... I can use ControlP5 with py5 but for some reason I always want to fiddle with this myself. At some point I had a Frankenstein Sliders+Arduino+Pots hybrid... --- ### sketch_2026_05_30 ![sketch_2026_05_30](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_30/sketch_2026_05_30.png) [sketch_2026_05_30](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_30) [[py5](https://py5coding.org/)] #Arduino + #telemetrix + #rotaryEncoder testing... --- ### sketch_2026_05_29 ![sketch_2026_05_29](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_29/sketch_2026_05_29.png) [sketch_2026_05_29](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_29) [[py5](https://py5coding.org/)] #Arduino + #telemetrix + #rotaryEncoder testing... --- ### sketch_2026_05_28 ![sketch_2026_05_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_28/sketch_2026_05_28.png) [sketch_2026_05_28](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_28) [[py5](https://py5coding.org/)] Experimenting with #telemetrix, a Python tool for serial comms with an #Arduino board (replacing #pyfirmata). Trying out rotary encoders... --- ### sketch_2026_05_27 ![sketch_2026_05_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_27/sketch_2026_05_27.png) [sketch_2026_05_27](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_27) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_26 ![sketch_2026_05_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_26/sketch_2026_05_26.png) [sketch_2026_05_26](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_26) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_25 ![sketch_2026_05_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_25/sketch_2026_05_25.png) [sketch_2026_05_25](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_25) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_24 ![sketch_2026_05_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_24/sketch_2026_05_24.png) [sketch_2026_05_24](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_24) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_23 ![sketch_2026_05_23](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_23/sketch_2026_05_23.gif) [sketch_2026_05_23](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_23) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_22 ![sketch_2026_05_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_22/sketch_2026_05_22.png) [sketch_2026_05_22](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_22) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_21 ![sketch_2026_05_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_21/sketch_2026_05_21.png) [sketch_2026_05_21](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_21) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_20 ![sketch_2026_05_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_20/sketch_2026_05_20.png) [sketch_2026_05_20](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_20) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_19 ![sketch_2026_05_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_19/sketch_2026_05_19.gif) [sketch_2026_05_19](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_19) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_18 ![sketch_2026_05_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_18/sketch_2026_05_18.gif) [sketch_2026_05_18](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_18) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_17 ![sketch_2026_05_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_17/sketch_2026_05_17.png) [sketch_2026_05_17](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_17) [[py5](https://py5coding.org/)] Reviving a sketch/idea from 2018 :) --- ### sketch_2026_05_16 ![sketch_2026_05_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_16/sketch_2026_05_16.gif) [sketch_2026_05_16](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_16) [[py5](https://py5coding.org/)] Everything looks a bit fishy and broken on these latest sketches, because changing the rendering sizes is changing the number of combos found, which it shouldn't :( --- ### sketch_2026_05_15 ![sketch_2026_05_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_15/sketch_2026_05_15.gif) [sketch_2026_05_15](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_15) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_14 ![sketch_2026_05_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_14/sketch_2026_05_14.png) [sketch_2026_05_14](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_14) [[py5](https://py5coding.org/)] WIP --- ### sketch_2026_05_13 ![sketch_2026_05_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_13/sketch_2026_05_13.png) [sketch_2026_05_13](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_13) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_12 ![sketch_2026_05_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_12/sketch_2026_05_12.png) [sketch_2026_05_12](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_12) [[py5](https://py5coding.org/)] 57 closed loops made from 4 segments on a 3x3 grid of points. --- ### sketch_2026_05_11 ![sketch_2026_05_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_11/sketch_2026_05_11.png) [sketch_2026_05_11](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_11) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_10 ![sketch_2026_05_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_10/sketch_2026_05_10.png) [sketch_2026_05_10](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_10) [[py5](https://py5coding.org/)] 261 combinations of 3 connected segments, on a 3x3 grid of points. Removing rotations and translations. --- ### sketch_2026_05_09 ![sketch_2026_05_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_09/sketch_2026_05_09.png) [sketch_2026_05_09](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_09) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_08 ![sketch_2026_05_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_08/sketch_2026_05_08.gif) [sketch_2026_05_08](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_08) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_07 ![sketch_2026_05_07](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_07/sketch_2026_05_07.gif) [sketch_2026_05_07](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_07) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_06 ![sketch_2026_05_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_06/sketch_2026_05_06.gif) [sketch_2026_05_06](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_06) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_05 ![sketch_2026_05_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_05/sketch_2026_05_05.gif) [sketch_2026_05_05](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_05) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_04 ![sketch_2026_05_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_04/sketch_2026_05_04.gif) [sketch_2026_05_04](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_04) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_03 ![sketch_2026_05_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_03/sketch_2026_05_03.gif) [sketch_2026_05_03](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_03) [[py5](https://py5coding.org/)] Reviving a sketch from 2018... --- ### sketch_2026_05_02 ![sketch_2026_05_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_02/sketch_2026_05_02.gif) [sketch_2026_05_02](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_02) [[py5](https://py5coding.org/)] --- ### sketch_2026_05_01 ![sketch_2026_05_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_05_01/sketch_2026_05_01.gif) [sketch_2026_05_01](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_05_01) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_30 ![sketch_2026_04_30](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_30/sketch_2026_04_30.png) [sketch_2026_04_30](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_30) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_29 ![sketch_2026_04_29](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_29/sketch_2026_04_29.png) [sketch_2026_04_29](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_29) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_28 ![sketch_2026_04_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_28/sketch_2026_04_28.png) [sketch_2026_04_28](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_28) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_27 ![sketch_2026_04_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_27/sketch_2026_04_27.gif) [sketch_2026_04_27](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_27) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_26 ![sketch_2026_04_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_26/sketch_2026_04_26.png) [sketch_2026_04_26](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_26) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_25 ![sketch_2026_04_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_25/sketch_2026_04_25.png) [sketch_2026_04_25](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_25) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_24 ![sketch_2026_04_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_24/sketch_2026_04_24.png) [sketch_2026_04_24](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_24) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_23 ![sketch_2026_04_23](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_23/sketch_2026_04_23.png) [sketch_2026_04_23](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_23) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_22 ![sketch_2026_04_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_22/sketch_2026_04_22.gif) [sketch_2026_04_22](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_22) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_21 ![sketch_2026_04_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_21/sketch_2026_04_21.gif) [sketch_2026_04_21](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_21) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_20 ![sketch_2026_04_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_20/sketch_2026_04_20.gif) [sketch_2026_04_20](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_20) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_19 ![sketch_2026_04_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_19/sketch_2026_04_19.png) [sketch_2026_04_19](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_19) [[py5](https://py5coding.org/)] #pymunk studies... spring WIP --- ### sketch_2026_04_18 ![sketch_2026_04_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_18/sketch_2026_04_18.gif) [sketch_2026_04_18](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_18) [[py5](https://py5coding.org/)] Another attempt at improving an old "Particle Life" sketch... --- ### sketch_2026_04_17 ![sketch_2026_04_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_17/sketch_2026_04_17.png) [sketch_2026_04_17](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_17) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_16 ![sketch_2026_04_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_16/sketch_2026_04_16.png) [sketch_2026_04_16](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_16) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_15 ![sketch_2026_04_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_15/sketch_2026_04_15.png) [sketch_2026_04_15](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_15) [[py5](https://py5coding.org/)] WIP #QuadraticCurve --- ### sketch_2026_04_14 ![sketch_2026_04_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_14/sketch_2026_04_14.png) [sketch_2026_04_14](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_14) [[py5](https://py5coding.org/)] Sketch feito na última aula do curso para o MAM-SP... uma turma muito legal, foi um prazer. --- ### sketch_2026_04_13 ![sketch_2026_04_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_13/sketch_2026_04_13.gif) [sketch_2026_04_13](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_13) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_12 ![sketch_2026_04_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_12/sketch_2026_04_12.gif) [sketch_2026_04_12](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_12) [[py5](https://py5coding.org/)] Adding some old code for handling #shapely MultiPolygons and Polygons with holes to my #pymunk wrapper :) --- ### sketch_2026_04_11 ![sketch_2026_04_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_11/sketch_2026_04_11.png) [sketch_2026_04_11](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_11) [[py5](https://py5coding.org/)] Zero-gravity study of #pymunk PinJoint and PivotJoint, --- ### sketch_2026_04_10 ![sketch_2026_04_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_10/sketch_2026_04_10.png) [sketch_2026_04_10](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_10) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_09 ![sketch_2026_04_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_09/sketch_2026_04_09.gif) [sketch_2026_04_09](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_09) [[py5](https://py5coding.org/)] L-System from today's activity at Sesc. --- ### sketch_2026_04_08 ![sketch_2026_04_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_08/sketch_2026_04_08.png) [sketch_2026_04_08](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_08) [[py5](https://py5coding.org/)] More #pymunk experiments, I think I have a basic "experimental helpers" module with a few wrapper classes. --- ### sketch_2026_04_06 ![sketch_2026_04_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_06/sketch_2026_04_06.gif) [sketch_2026_04_06](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_06) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_05 ![sketch_2026_04_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_05/sketch_2026_04_05.gif) [sketch_2026_04_05](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_05) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_04 ![sketch_2026_04_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_04/sketch_2026_04_04.png) [sketch_2026_04_04](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_04) [[py5](https://py5coding.org/)] WIP I'm pursuing an idea I discussed with Ramalho once about making some thin class wrappers around #pymunk objects to simplify creation (and py5 drawing) of the simulations. --- ### sketch_2026_04_03 ![sketch_2026_04_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_03/sketch_2026_04_03.png) [sketch_2026_04_03](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_03) [[py5](https://py5coding.org/)] --- ### sketch_2026_04_02 ![sketch_2026_04_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_02/sketch_2026_04_02.gif) [sketch_2026_04_02](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_02) [[py5](https://py5coding.org/)] A small #pymunk demo I've built today at Sesc... --- ### sketch_2026_04_01 ![sketch_2026_04_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_04_01/sketch_2026_04_01.gif) [sketch_2026_04_01](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_04_01) [[py5](https://py5coding.org/)] --- ### sketch_2026_03_31 ![sketch_2026_03_31](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_31/sketch_2026_03_31.png) [sketch_2026_03_31](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_31) [[py5](https://py5coding.org/)] --- ### sketch_2026_03_30 ![sketch_2026_03_30](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_30/sketch_2026_03_30.png) [sketch_2026_03_30](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_30) [[py5](https://py5coding.org/)] --- ### sketch_2026_03_29 ![sketch_2026_03_29](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_29/sketch_2026_03_29.gif) [sketch_2026_03_29](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_29) [[py5](https://py5coding.org/)] --- ### sketch_2026_03_28 ![sketch_2026_03_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_28/sketch_2026_03_28.gif) [sketch_2026_03_28](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_28) [[py5](https://py5coding.org/)] Obrigado aos amigos do LHC (Laboratório Hacker de Campinas) pelo dia sensacional! --- ### sketch_2026_03_27 ![sketch_2026_03_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_27/sketch_2026_03_27.gif) [sketch_2026_03_27](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_27) [[py5](https://py5coding.org/)] Today my father would have been 91 years old. --- ### sketch_2026_03_26 ![sketch_2026_03_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_26/sketch_2026_03_26.gif) [sketch_2026_03_26](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_26) [[py5](https://py5coding.org/)] --- ### sketch_2026_03_25 ![sketch_2026_03_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_25/sketch_2026_03_25.png) [sketch_2026_03_25](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_25) [[py5](https://py5coding.org/)] WIP... #Typography --- ### sketch_2026_03_24 ![sketch_2026_03_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_24/sketch_2026_03_24.png) [sketch_2026_03_24](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_24) [[py5](https://py5coding.org/)] --- ### sketch_2026_03_23 ![sketch_2026_03_23](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_23/sketch_2026_03_23.png) [sketch_2026_03_23](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_23) [[py5](https://py5coding.org/)] --- ### sketch_2026_03_22 ![sketch_2026_03_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_22/sketch_2026_03_22.png) [sketch_2026_03_22](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_22) [[py5](https://py5coding.org/)] --- ### sketch_2026_03_21 ![sketch_2026_03_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_21/sketch_2026_03_21.png) [sketch_2026_03_21](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_21) [[py5](https://py5coding.org/)] --- ### sketch_2026_03_20 ![sketch_2026_03_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_20/sketch_2026_03_20.gif) [sketch_2026_03_20](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_20) [[py5](https://py5coding.org/)] #scipy minimal spanning tree --- ### sketch_2026_03_19 ![sketch_2026_03_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_19/sketch_2026_03_19.gif) [sketch_2026_03_19](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_19) [[py5](https://py5coding.org/)] Dürer meets py5 https://en.wikipedia.org/wiki/Melencolia_I (thank you for the vertex data @introscopia!) --- ### sketch_2026_03_18 ![sketch_2026_03_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_18/sketch_2026_03_18.png) [sketch_2026_03_18](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_18) [[py5](https://py5coding.org/)] 322 combinations of 3 segments from 3x3 grid of points, avoiding rotations. --- ### sketch_2026_03_17 ![sketch_2026_03_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_17/sketch_2026_03_17.png) [sketch_2026_03_17](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_17) [[py5](https://py5coding.org/)] 1300 combinations of 3 connected line segments from a 3x3 grid of points. --- ### sketch_2026_03_16 ![sketch_2026_03_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_16/sketch_2026_03_16.png) [sketch_2026_03_16](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_16) [[py5](https://py5coding.org/)] 228 pairs of segments from a 3x3 grid that share a point *and* don't align or overlap. --- ### sketch_2026_03_15 ![sketch_2026_03_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_15/sketch_2026_03_15.png) [sketch_2026_03_15](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_15) [[py5](https://py5coding.org/)] 378 two-segment combinations from a 3x3 grid. Ordered and colored by segment length. --- ### sketch_2026_03_14 ![sketch_2026_03_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_14/sketch_2026_03_14.png) [sketch_2026_03_14](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_14) [[py5](https://py5coding.org/)] 1260 combinations of 3 line segments on a 3x3 grid of points. The segments must not have endings in common. --- ### sketch_2026_03_13 ![sketch_2026_03_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_13/sketch_2026_03_13.png) [sketch_2026_03_13](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_13) [[py5](https://py5coding.org/)] Same 945 combinations of 4 lines from a 3x3 grid of points. Lines are now colored according to their angle. --- ### sketch_2026_03_12 ![sketch_2026_03_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_12/sketch_2026_03_12.png) ![sketch_2026_03_12b](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_12/sketch_2026_03_12b.png) [sketch_2026_03_12](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_12) [[py5](https://py5coding.org/)] 945 combinations of 4 lines on a 3x3 grid: the lines have no shared vertices --- ### sketch_2026_03_11 ![sketch_2026_03_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_11/sketch_2026_03_11.gif) [sketch_2026_03_11](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_11) [[py5](https://py5coding.org/)] 100 of the 1890 combinations of 4 connected lines on a 3x3 grid... WIP. --- ### sketch_2026_03_10 ![sketch_2026_03_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_10/sketch_2026_03_10.gif) [sketch_2026_03_10](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_10) [[py5](https://py5coding.org/)] Inspired by https://internet-janitor.itch.io/wigglypaint --- ### sketch_2026_03_09 ![sketch_2026_03_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_09/sketch_2026_03_09.gif) [sketch_2026_03_09](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_09) [[py5](https://py5coding.org/)] Inpired by Wiggly Paint (https://internet-janitor.itch.io/wigglypaint) - See also https://beyondloom.com/blog/onwigglypaint.html --- ### sketch_2026_03_08 ![sketch_2026_03_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_08/sketch_2026_03_08.png) [sketch_2026_03_08](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_08) [[py5](https://py5coding.org/)] 516 triangles on a 4x4 grid of points, avoiding duplicates with whole grid rotation, but not duplicates whit translations (& possible rotations) of the triangles inside the grid. --- ### sketch_2026_03_07 ![sketch_2026_03_07](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_07/sketch_2026_03_07.gif) [sketch_2026_03_07](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_07) [[py5](https://py5coding.org/)] --- ### sketch_2026_03_06 ![sketch_2026_03_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_06/sketch_2026_03_06.gif) [sketch_2026_03_06](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_06) [[py5](https://py5coding.org/)] Based on the code written yesterday at the "drawing with code open atelier" at Sesc. Using images from Wikimedia Commons! :) --- ### sketch_2026_03_05 ![sketch_2026_03_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_05/sketch_2026_03_05.gif) [sketch_2026_03_05](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_05) [[py5](https://py5coding.org/)] Another #CellularAutomata experiment --- ### sketch_2026_03_04 ![sketch_2026_03_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_04/sketch_2026_03_04.png) [sketch_2026_03_04](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_04) [[py5](https://py5coding.org/)] #CellularAutomata with a 16 cell neighborhood: (-1, -1), ( 0, -1), (1, -1), (-1, 0), ( 1, 0), (-1, 1), (0, 1), ( 1, 1), (-2, -2), ( 0, -4), (2, -2), (-4, 0), ( 4, 0), (-2, 2), (0, 4), ( 2, 2) --- ### sketch_2026_03_03 ![sketch_2026_03_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_03/sketch_2026_03_03.png) [sketch_2026_03_03](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_03) [[py5](https://py5coding.org/)] Changing Conway's neighborhood rules is a quick way to explore closely related #CellularAutomata ... also circles! --- ### sketch_2026_03_02 ![sketch_2026_03_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_02/sketch_2026_03_02.png) [sketch_2026_03_02](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_02) [[py5](https://py5coding.org/)] Calculation of #Conway's #GameOfLife was already very fast with #Numpy, but drawing was slow (squares and text...) now this is *so* fast... with vectorized `py5.points()` getting arrays of points to draw as squares with `py5.stroke_cap(py5.PROJECT)`. Check it out! --- ### sketch_2026_03_01 ![sketch_2026_03_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_03_01/sketch_2026_03_01.png) [sketch_2026_03_01](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_03_01) [[py5](https://py5coding.org/)] --- ### sketch_2026_02_28 ![sketch_2026_02_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_28/sketch_2026_02_28.png) [sketch_2026_02_28](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_28) [[py5](https://py5coding.org/)] Preparing a bit for teaching my #CellularAutomata class a few times this semester.#WIP #ConwaysGameOfLife with #numpy --- ### sketch_2026_02_27 ![sketch_2026_02_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_27/sketch_2026_02_27.png) [sketch_2026_02_27](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_27) [[py5](https://py5coding.org/)] Back to some #numpy + #OpenSimplexNoise studies... --- ### sketch_2026_02_26 ![sketch_2026_02_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_26/sketch_2026_02_26.png) [sketch_2026_02_26](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_26) [[py5](https://py5coding.org/)] 979 ways of dividing a square with a 3x3 grid of points (980 if you count not dividing the square at all as one!) --- ### sketch_2026_02_25 ![sketch_2026_02_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_25/sketch_2026_02_25.png) [sketch_2026_02_25](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_25) [[py5](https://py5coding.org/)] 979 ways of dividing a 3x3 grid of points into polygons. Did I miss any? I hope not. The polys are colored according to the number of vertices. --- ### sketch_2026_02_24 ![sketch_2026_02_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_24/sketch_2026_02_24.png) [sketch_2026_02_24](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_24) [[py5](https://py5coding.org/)] WIP / debug view: #shapely union is generating some bad polygons maybe subdivided edges or badly behaving vertices?) I have to figure out how to fix them. --- ### sketch_2026_02_23 ![sketch_2026_02_23](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_23/sketch_2026_02_23.png) [sketch_2026_02_23](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_23) [[py5](https://py5coding.org/)] 197 ways of dividing a grid of 3x3 points into triangles. Removing rotations. I have done this before, but it has been fun doing it again from scratch I like the strategy this time much better. --- ### sketch_2026_02_22 ![sketch_2026_02_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_22/sketch_2026_02_22.png) [sketch_2026_02_22](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_22) [[py5](https://py5coding.org/)] 270 pairs of non-overlapping triangles from a 3x3 grid of points. Removing rotations. --- ### sketch_2026_02_21 ![sketch_2026_02_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_21/sketch_2026_02_21.png) [sketch_2026_02_21](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_21) [[py5](https://py5coding.org/)] WIP: A first attempt at rendering a dictionary that shows on each row, at the start on the left, one of the 76 triangles that can be drawn on a 3x3 grid, then all the other triangles that do not overlapp with it. Tweaked the next day... --- ### sketch_2026_02_20 ![sketch_2026_02_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_20/sketch_2026_02_20.png) [sketch_2026_02_20](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_20) [[py5](https://py5coding.org/)] The 23 ways of dividing a 3x3 grid into 2, 3 and 4 triangles, excluding rotations. --- ### sketch_2026_02_19 ![sketch_2026_02_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_19/sketch_2026_02_19.png) [sketch_2026_02_19](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_19) [[py5](https://py5coding.org/)] 244 ways of dividing a 3 x 3 grid of points into 6 triangles. --- ### sketch_2026_02_18 ![sketch_2026_02_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_18/sketch_2026_02_18.png) [sketch_2026_02_18](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_18) [[py5](https://py5coding.org/)] 471 of 1703 triangulations of the 3 x 3 grid --- ### sketch_2026_02_17 ![sketch_2026_02_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_17/sketch_2026_02_17.png) [sketch_2026_02_17](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_17) [[py5](https://py5coding.org/)] --- ### sketch_2026_02_16 ![sketch_2026_02_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_16/sketch_2026_02_16.png) [sketch_2026_02_16](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_16) [[py5](https://py5coding.org/)] --- ### sketch_2026_02_15 ![sketch_2026_02_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_15/sketch_2026_02_15.png) [sketch_2026_02_15](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_15) [[py5](https://py5coding.org/)] --- ### sketch_2026_02_14 ![sketch_2026_02_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_14/sketch_2026_02_14.png) [sketch_2026_02_14](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_14) [[py5](https://py5coding.org/)] --- ### sketch_2026_02_13 ![sketch_2026_02_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_13/sketch_2026_02_13.png) [sketch_2026_02_13](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_13) [[py5](https://py5coding.org/)] --- ### sketch_2026_02_12 ![sketch_2026_02_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_12/sketch_2026_02_12.gif) [sketch_2026_02_12](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_12) [[py5](https://py5coding.org/)] This sketch was made during an activity at Sesc today :) --- ### sketch_2026_02_11 ![sketch_2026_02_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_11/sketch_2026_02_11.jpg) [sketch_2026_02_11](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_11) [[py5](https://py5coding.org/)] --- ### sketch_2026_02_10 ![sketch_2026_02_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_10/sketch_2026_02_10.png) [sketch_2026_02_10](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_10) [[py5](https://py5coding.org/)] --- ### sketch_2026_02_09 ![sketch_2026_02_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_09/sketch_2026_02_09.png) [sketch_2026_02_09](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_09) [[py5](https://py5coding.org/)] --- ### sketch_2026_02_08 ![sketch_2026_02_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_08/sketch_2026_02_08.png) [sketch_2026_02_08](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_08) [[py5](https://py5coding.org/)] --- ### sketch_2026_02_07 ![sketch_2026_02_07](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_07/sketch_2026_02_07.png) [sketch_2026_02_07](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_07) [[py5](https://py5coding.org/)] --- ### sketch_2026_02_06 ![sketch_2026_02_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_06/sketch_2026_02_06.png) [sketch_2026_02_06](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_06) [[py5](https://py5coding.org/)] --- ### sketch_2026_02_05 ![sketch_2026_02_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_05/sketch_2026_02_05.png) [sketch_2026_02_05](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_05) [[py5](https://py5coding.org/)] --- ### sketch_2026_02_04 ![sketch_2026_02_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_04/sketch_2026_02_04.png) [sketch_2026_02_04](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_04) [[py5](https://py5coding.org/)] --- ### sketch_2026_02_03 ![sketch_2026_02_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_03/sketch_2026_02_03.png) [sketch_2026_02_03](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_03) [[py5](https://py5coding.org/)] --- ### sketch_2026_02_02 ![sketch_2026_02_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_02/sketch_2026_02_02.png) [sketch_2026_02_02](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_02) [[py5](https://py5coding.org/)] WIP... --- ### sketch_2026_02_01 ![sketch_2026_02_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_02_01/sketch_2026_02_01.png) [sketch_2026_02_01](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_02_01) [[py5](https://py5coding.org/)] --- ### sketch_2026_01_31 ![sketch_2026_01_31](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_31/sketch_2026_01_31.png) [sketch_2026_01_31](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_31) [[py5](https://py5coding.org/)] I'm restarting my shape subdivision ideas, this time with simpler structures (maybe?) instead of an object oriented "Shape" class. --- ### sketch_2026_01_30 ![sketch_2026_01_30](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_30/sketch_2026_01_30.png) [sketch_2026_01_30](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_30) [[py5](https://py5coding.org/)] --- ### sketch_2026_01_29 ![sketch_2026_01_29](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_29/sketch_2026_01_29.gif) [sketch_2026_01_29](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_29) [[py5](https://py5coding.org/)] --- ### sketch_2026_01_28 ![sketch_2026_01_28](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_28/sketch_2026_01_28.png) [sketch_2026_01_28](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_28) [[py5](https://py5coding.org/)] A crude attempt at a noisy brush #PerlinNoise --- ### sketch_2026_01_27 ![sketch_2026_01_27](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_27/sketch_2026_01_27.gif) [sketch_2026_01_27](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_27) [[py5](https://py5coding.org/)] --- ### sketch_2026_01_26 ![sketch_2026_01_26](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_26/sketch_2026_01_26.gif) [sketch_2026_01_26](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_26) [[py5](https://py5coding.org/)] --- ### sketch_2026_01_25 ![sketch_2026_01_25](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_25/sketch_2026_01_25.png) [sketch_2026_01_25](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_25) [[py5](https://py5coding.org/)] --- ### sketch_2026_01_24 ![sketch_2026_01_24](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_24/sketch_2026_01_24.png) [sketch_2026_01_24](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_24) [[py5](https://py5coding.org/)] `py5.blend_mode(py5.MULTIPLY)` --- ### sketch_2026_01_23 ![sketch_2026_01_23](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_23/sketch_2026_01_23.png) [sketch_2026_01_23](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_23) [[py5](https://py5coding.org/)] --- ### sketch_2026_01_22 ![sketch_2026_01_22](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_22/sketch_2026_01_22.png) [sketch_2026_01_22](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_22) [[py5](https://py5coding.org/)] I enjoyed this one, randomizing the widths of rows and columns of a grid then applying a #TSP strategy. #genuary #genuary22 #genuary2026 --- ### sketch_2026_01_21 ![sketch_2026_01_21](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_21/sketch_2026_01_21.png) [sketch_2026_01_21](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_21) [[py5](https://py5coding.org/)] Ada meets Waldemar Cordeiro and Giorgio Moscati (Learn more about them at https://www.waldemarcordeiro.com/ & https://ekac.org/moscati.html) --- ### sketch_2026_01_20 ![sketch_2026_01_20](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_20/sketch_2026_01_20.png) [sketch_2026_01_20](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_20) [[py5](https://py5coding.org/)] --- ### sketch_2026_01_19 ![sketch_2026_01_19](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_19/sketch_2026_01_19.png) [sketch_2026_01_19](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_19) [[py5](https://py5coding.org/)] --- ### sketch_2026_01_18 ![sketch_2026_01_18](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_18/sketch_2026_01_18.png) [sketch_2026_01_18](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_18) [[py5](https://py5coding.org/)] 10000 steps of walker that turns 30° one way if the step is prime and 30° the other way. #genuary #genuary18 #genuary2026 --- ### sketch_2026_01_17 ![sketch_2026_01_17](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_17/sketch_2026_01_17.png) [sketch_2026_01_17](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_17) [[py5](https://py5coding.org/)] I'm not sure it would count as #genuary17 but I wanted to do this inspired by something I saw from @ranoya@vis.social #genuary #genuary2026 --- ### sketch_2026_01_16 ![sketch_2026_01_16](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_16/sketch_2026_01_16.png) [sketch_2026_01_16](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_16) [[py5](https://py5coding.org/)] --- ### sketch_2026_01_15 ![sketch_2026_01_15](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_15/sketch_2026_01_15.png) [sketch_2026_01_15](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_15) [[py5](https://py5coding.org/)] --- ### sketch_2026_01_14 ![sketch_2026_01_14](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_14/sketch_2026_01_14.gif) [sketch_2026_01_14](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_14) [[py5](https://py5coding.org/)] --- ### sketch_2026_01_13 ![sketch_2026_01_13](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_13/sketch_2026_01_13.png) [sketch_2026_01_13](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_13) [[py5](https://py5coding.org/)] --- ### sketch_2026_01_12 ![sketch_2026_01_12](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_12/sketch_2026_01_12.png) [sketch_2026_01_12](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_12) [[py5](https://py5coding.org/)] #genuary #genuary12 #genuary2026 #3D boxes only --- ### sketch_2026_01_11 ![sketch_2026_01_11](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_11/sketch_2026_01_11.png) [sketch_2026_01_11](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_11) [[py5](https://py5coding.org/)] --- ### sketch_2026_01_10 ![sketch_2026_01_10](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_10/sketch_2026_01_10.png) [sketch_2026_01_10](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_10) [[py5](https://py5coding.org/)] #genuary #genuary10 #genurary2026 --- ### sketch_2026_01_09 ![sketch_2026_01_09](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_09/sketch_2026_01_09.gif) [sketch_2026_01_09](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_09) [[py5](https://py5coding.org/)] Tweaking an old idea of coloring Wolfram's Automata #genuary #genuary9 #genuary2026 --- ### sketch_2026_01_08 ![sketch_2026_01_08](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_08/sketch_2026_01_08.gif) [sketch_2026_01_08](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_08) [[py5](https://py5coding.org/)] #genuary #genuary8 #genuary2026 Tweaking a sketch from 2022... --- ### sketch_2026_01_07 ![sketch_2026_01_07](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_07/sketch_2026_01_07.png) [sketch_2026_01_07](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_07) [[py5](https://py5coding.org/)] The cool binary XOR based pattern I learned fron Ntsutae... now with #numpy #genuary #genuary7 #genuary2026 --- ### sketch_2026_01_06 ![sketch_2026_01_06](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_06/sketch_2026_01_06.gif) [sketch_2026_01_06](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_06) [[py5](https://py5coding.org/)] #genuary6 #genuary #genurary2026 --- ### sketch_2026_01_05 ![sketch_2026_01_05](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_05/sketch_2026_01_05.gif) [sketch_2026_01_05](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_05) [[py5](https://py5coding.org/)] In 2021 I was working on some older code for a silly glyph editor, I couldn't resurrect the editor (yet) but I could still read some pickled glyphs data! I hope I get back to these studies again. Note: be careful about loading pickled data from untrusted sources, there is a nasty risk of "arbitrary code execution". --- ### sketch_2026_01_04 ![sketch_2026_01_04](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_04/sketch_2026_01_04.png) [sketch_2026_01_04](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_04) [[py5](https://py5coding.org/)] #genuary4 #genuary #genuary2026 --- ### sketch_2026_01_03 ![sketch_2026_01_03](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_03/sketch_2026_01_03.png) [sketch_2026_01_03](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_03) [[py5](https://py5coding.org/)] Once I made a nice Fibonacci based animation, but this time I couldn't figure something I liked :( #genuary #genuary 3 #genuary2026 --- ### sketch_2026_01_02 ![sketch_2026_01_02](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_02/sketch_2026_01_02.gif) [sketch_2026_01_02](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_02) [[py5](https://py5coding.org/)] #genuary2 #genuary #genuary2026 --- ### sketch_2026_01_01 ![sketch_2026_01_01](https://raw.githubusercontent.com/villares/sketch-a-day/main/2026/sketch_2026_01_01/sketch_2026_01_01.png) [sketch_2026_01_01](https://github.com/villares/sketch-a-day/tree/main/2026/sketch_2026_01_01) [[py5](https://py5coding.org/)] #genuary #genuary1 #genuary2026 --- 2026 \| [2025](2025.md) \| [2024](2024.md) \| [2023](2023.md) \| [2022](2022.md) \| [2021](2021.md) \| [2020](2020.md) \| [2019](2019.md) \| [2018](2018.md) ---

The sketch-a-day project, images and code repository, by Alexandre B A Villares are licensed under Attribution-NonCommercial-NoDerivatives 4.0 International , except if marked/attributed otherwise in a file or code section. Please contact for licensing questions.