Friday, April 1, 2022

My Recurse Center Syllabus

My Recurse Center Syllabus

            o                   o
             \               __/
              \___          /
                  \__    __/
                     \  /
 ____________________\/_________________
/   _________________________________   \
|  /__/  \__  _____________ \__/  \__\  |
| |    __   \____My_________    __   \| |
| |\__/  \_________________ \__/  \__ | |
| |    __   \___Recurse_____    __   \| |
| |\__/  \__  _____________ \__/  \__ | |
| |    __   \_______Center__    __   \| |
| |\__/  \__  _____________ \__/  \__ | |
| |    __   \__Syllabus____     __   \| |
| |\__/  \__  _____________ \__/  \__ | |
|  \________\________________________/  |
|                                       |
|                          _   _   _    |
|  Ashley Blewer!         (=) (=) (=)   |
\______________________________________/
     "--"                      "--"

Creating a syllabus for myself

I will be attending the Recurse Center from April 2 until June 28. For the uninundated (non-inundated?), I have been describing RC succinctly as "like a writer's retreat for programmers." although maybe that's not quite sufficient. But in general, it is a place to focus intensely on my craft and be surrounded by and inspired by brilliant people.

I am verrrrrry excited!

Because the time you spend at RC and what you choose to work on is self-initiated and self-motivated, I am setting up this repository to create a sort of "syllabus" for myself and what I want to accomplish. BUT! I do not expect to follow it, just give myself some rough structure to make sure I hit my personal productivity goals while leaving enough room for unanticipated discovery.

This will also be a living syllabus,
updated with links to blog posts,
works I produced,
and things I used to tackle these problems
or build things for each week.

Some things will get bumped and other things will get shuffled around as part of the normal un-learning process.

Here is how I answered the application question "What would you like to work on at the Recurse Center?":

I really love video and I understand it (relatively) well, I think, but would really like to better understand compression algorithms and how things work. I think trying to make my own video codec would be a good way to do that, and RC seems like a great place to attempt a task that sounds difficult and academic. I think this kind of broad, open-ended task would allow me to have one major goal to accomplish, and would allow me to break down the problem and potentially tackle mini-problems along the way, accepting productive distraction (like committing to an open source video framework as a mini-goal towards the larger educational goal).

General suggestions from RC to help think about projects:

  • What are the main 2-3 things I'd like to learn? (i.e. why am I doing this?)
  • Which features could I build to learn them?
  • Are there other things I can ignore because they won't help me achieve my learning goals?
  • Does my project divide naturally into certain chunks?
  • How will I know when my project is finished?

Thinking about how to think about this

I want to create goals for myself that are concrete enough to be able to tackle but open enough that I can move in different directions as I grow and learn more.

I also think it's important for me to think about this work as at most 80% of a week, leaving 20% to spread out and learn about or engage in other projects unrelated to this one. But I hope that for each week, I can formulate an idea of readings/tasks to complete, and ensure a solid balance of learning-time and active-programming time.

Week 0 (Now until April 2)

Create this syllabus.

Here are some things inspiring me (and related to this topic):

Popular algorithm names:

  • Huffman
  • Adaptive Huffman!
  • Shannon-Fano
  • Schwartz-Kallick

(Pre-RC Ideas Zone, this will move)

  • Video container/codec review, how do significant properties relate to each other when established by each format?
  • containers versus codecs, how do they work together (or not together?)
  • Begin manipulation of raw video data
  • "signal processing"
  • Muxing, demuxing, compiling code
  • ffmpeg filters
  • Visualizing compression: Is there a way to extract only-the-compression from audio or video for visualization purposes?
  • Build something in C -> I did build something in Rust with much help, so maybe this has been satisfied
  • Colorspaces
  • Subtitles
  • Codec manipulation
  • Web Assembly, put C in the browser
  • Electron, put JS on the desktop
  • Thinking about open source contributions here

Week 1 (April 2-6): "Containers/codecs"

Code written

  • Hmm, nothing that would merit a check-in...

Blogging

Exploring Matroska attachments

  • file format polyglot-ing (put mkv file inside mkv file)
  • This was very easy thanks to MKVToolNix!

Understand how codecs are made

Open or non-open codecs, standards:

ffmpeg!

  • FFmpeg has been coming up a lot in conversation, with a lot of people working on different things. Someone told me about this book which is like the best thing ever. I'm ready to start a graduate level program and teach only this book. So many example commands and a visual representation of what they do.
  • I need to follow advice that Misty De Meo was given and passed along via Mastodon, which is "hacking around some stuff in FFmpeg's encoder to see what happens"
  • Misty's Sega FILM demuxer is in ffmpeg now github and I'm #fangirling

Codec exploration: ./lenticular

  • investigation of lenticular, a codec-in-progress for lenticular film
  • Running lenticular partially successfully
  • Ran into segmentation faults and I'd like to explore these more, but moving on for now

File formats, methods of implementation

  • deep read: the secret life of nan. This blog post casually mentions standardization drama and I clicked on the link to read more SO fast. It's here
  • deep read: google docs, not a file format I like these two quotes in a succinct blog post: "Proprietary formats are always risky. When the format isn’t a file format at all, you can’t even reverse-engineer it in principle." and "Don’t be a cheapskate. Pay for the storage you need."
  • deep read: How can we preserve Google Documents?

gdb / debugging in C

  • brew install gdb
  • extra stuff for macOS
  • Is the problem: macOS, gcc, gdb, Homebrew, XCode, the code, or something else?
  • "Reading symbols from lenticular...(no debugging symbols found)...done."
  • "Undefined symbols for architecture x86_64" - sometimes this is macOS being weird, but sometimes this is just me not remembering to call an external lib in C
  • "duplicate symbol _main in:"" - added -c to the two .o rules to tell gcc to stop at the compilation stage. But also noting that this could be main being defined twice in the program.
  • My brain today: "How do you debug a debugger?"
  • Valgrind
  • brew install valgrind

Rust

Manipulating data

gpg/pgp

  • Intro from Ernest
  • pki, public key infrastructure
  • "web of trust" / "strong set"
  • expiration and revokation
  • "security convenience balance"
  • yubikey is closed source, nitrokey is open software/hardware
  • Ring (end to end encrypted Skype) ring.cx

Cultural heritage and copyleft opinions

Lots of talks and inspiration from batchmate Marianne:

Preservation of complex media

Feelings

  • Something obvious to me when working in the context of the humanities is that we each have specific knowledge about a subject derived from our own lenses and cumulative individual experience (hello Black feminist critical theory), and the sooner I acknowledge this applies to technical subjects too, the better off I’ll be. RC is a great place for this because of the diverse experience and backgrounds collaborating in one space, but harder in a small monoculture like digital preservation.
  • adding increasingly dangerous amounts of coffee, trying to reign it in

Misc

  • first added a xml feed to my blog, next day I actually showcase that endpoint so people can use it: http://bits.ashleyblewer.com/feed.xml if you want to subscribe
  • TIL zulip offers free hosting for OSS projects https://zulipchat.com/for/open-source/
  • more zulip love: you can view source, you write in markdown
  • Looking at http://www.vapoursynth.com/about/
  • my review was requested on audiorecorder
  • "are you upstate or something? I picture you in some sort of compound like the end of mad men"
  • YCbCr: "But how do you make yellow?" Because colorspaces are cubes, and the absence of blue produces yellow, and the absence of red produces green.
  • fell into the same Jekyll time zone trap as Marianne did this week: A few of my posts was originally written at something like "23:16:00 -0400" so when the time changed for daylight savings, it reverted to thinking it "should" be the next day, deleting the original page and replacing it with a date that was one day later. Tricky! My hack to resolve it was to not get so granular with time-of-posts and kept it at the day-level for these late-ish night additions.
  • Lydia recommends: https://www.goodreads.com/book/show/44882.Code

Week 2 (April 9-13): R U S T

Code written

Blogging

Minimum Viable Codec

  • What does this look like?

Rust vs multimedia

  • Kostya's Boring Codec World
  • but especially: NihAV — Concept and Principles
  • The above blog post helps me break down my own problems-I-will-be-creating-for-myself with this statement: "I hope the domain for NihAV is clear: it will take ByteIO input, demux data using it (packets or elementary stream chunks—if you want them in packet format then use a parser), optionally fill timestamp information, decode frames, reorder them in display order if requested, similar approach for writing data."
  • Huffman coding implementation in Rust

Rust in general

rust-av

Codecs, etc

Video, in general

Linear Algebra

I think I may have to overcome my utter lack of maths knowledge soon...

Feelings

  • Learning can feel painful and that's okay!
  • How to make mistakes, acknowledge them, correct them, and move forward.
  • The difficulties of committing (and wanting to commit) to 100% focus on something (this) but still having to manage winding down paused or ending freelance projects, maintaining pre-existing relationships, and trying not to worry about housing and employment after RC.

Misc

Week 3 (April 16-20) "Minimum Viable Codec" (Encoding)

Code written

Blogging

Analog Video!

Encoding

Rust

Misc

Week 4 (April 23-27) "Minimum Viable Codec" (Decoding)

Goals

Goals at the start of this week:

  • Writing h264 decoder / mini-player
  • Getting Rust to the browser with wasm - done!
  • Writing encoder for video streams using huffman algo
  • Not have a cold anymore - done!

Code written

Blogging

WASM

Video

Deep video

Misc

YUV2RGB shader math

vec3 yuv = vec3(yColor.r - 16.0/256, uColor.r - 0.5, vColor.r - 0.5);
oColor.x = dot(yuv, vec3(1.164,  0.000,  1.596));
oColor.y = dot(yuv, vec3(1.164, -0.391, -0.813));
oColor.z = dot(yuv, vec3(1.164,  2.018,  0.000));

Week 5 (April 30 - May 4) (Floating in space)

Code written

Blogging

Calling C in Rust

A return to Rust+WASM+JS

Video

Video players

Misc

Week 6 (May 7-11) (Planets in alignment)

Code written

Blogging

Malaysian General Election 2018

Video

Misc

BONUS WEEK (May 14-18)

!!Con May 12-13 - I got a ticket!

This is when Never Graduate Week happens. SPRING BREAKKKKKKKK!

Code written

  • I-Ching gets a save-state upgrade and makeover

Week 7 (May 21-25) (Reboot)

Code written

Blogging

Back 2 video

Manipulating video in the browser

Deepfakes again

MATH

Misc

Week 8 (May 28 - June 1)

Code written

Blogging

Encoding

Rust

Misc

YUV - RGB Conversion

R = Y + 1.4075 * (V - 128)
G = Y - 0.3455 * (U - 128) - (0.7169 * (V - 128))
B = Y + 1.7790 * (U - 128)

Y = R *  .299000 + G *  .587000 + B *  .114000
U = R * -.168736 + G * -.331264 + B *  .500000 + 128
V = R *  .500000 + G * -.418688 + B * -.081312 + 128

Week 9 (June 4-8)

Code written

Blogging

Real Life Hour

Rust

Video

Misc

Week 10 (June 11-15) 🎊🎂🆎

Video Pixel Formats

Misc

Week 11 (June 18-22) ⿒

Blogging

Python

Misc

Week 12 (June 25-28) 🙀

Python

Back on my bullshit

AV1

scanlime video content

Misc

THE END! 🎉

There is no end! Never graduate!

Thanks for reading!

~ ~ ~

NGW'19

I did not take time off for this week, and I regretted it. I was able to spend some time in the space, see old friends, listen to lots of talks, participate in a few group discussions, including some deep dives into web archiving and digital preservation and video.

NGW'20 / two years later! What will I build?

This year, I took the week off and couldn't wait to see all of my friends spread over the globe, but then a global pandemic happened and everything has shifted into being remote-only. I am still taking the week off, and intend to focus on researching and building.

Like my time at RC, I will track some of my work here as a bit of a time capsule into what I explored during this time.

My research focus is on virtual worlds, past and present. I want to be able to structure my thinking around this topic in a way that is deeper than my own memory. I have a few other ideas, including visualizing and searching a PDF database, more adventures in digital divination, and focusing on CSS and SVG animations.

Beginning of May

Trying to make up for long time? I have started planning what to work on and look into, which have shifted slightly from the paragraph above this one.

Ideas

  • techno-divination (continuing theme of aura-reader, i-ching, barthes-tarot, et al)
  • visualization of archival material (have a collection of 3300 PDFs, how can I produce meaningful access?)
  • network-based performance artwork
  • exploring virtual worlds

Code written

  • aura reader 2020
  • jams page for me to track audio inspiration while in quarantine
  • all the code and assets for a project that I have not yet checked into a git repo (rare for me!), more tbd. I usually don't hide things but this is something that is meant to be viewed in a specific way, and I don't usually do that, either.
  • OCR and thumbnail generation for a set of PDFs, data transformation, small sqlite proof of concept also not quite ready for primetime

Misc

2020-05-11 Monday

Here is where I will do a check-in of what I've done and what I plan to do yesterday and today. I think this is a useful way of keeping myself accountable even if it is similar to tactics deployed by power-hungry middle-managers seeking to control a workforce. 🙃

Accomplishments

  • configure DNS for network-based art project
  • write artist statement
  • reallife: last class sendoff
  • remembering to stretch neck/shoulders

Misc

2020-05-12 Tuesday

Today I remembered that doing things right takes time. Repetition and testing. Some things can't be rushed through.

Accomplishments

  • still stretching
  • html/css up an intro-site to give context, refine artist statement, and...
  • Throttled is now live, sending it to testers before I can feel like it's really wrapped! Checking "network-based performance artwork" off the list -- I am really happy with this. It feels like there's not much to talk about technically, but maybe I will write a blog post about it since I did some diving into a few places I hadn't explored before.
  • reallife: time to give students meaningful feedback on their final projects! this took a lot of time and talking about it in detail is not appropriate for these notes
  • Finishing the ebook for Normal People before it gets auto-returned to the library in 24 hours

Misc

2020-05-13 Wednesday

Lots of social/group learning events today! Excited for: web standards disucssion, weird internet spaces, apl, intersectional feminist scifi talk, caaaats.

I am trying to switch gears and into the meaningful archival access project, but still hanging on to finishing up Throttled with regards to blog-post writing and formalizing notes so I don't forget in the future.

Accomplishments

Misc

2020-05-14 Thursday

Yesterday was the halfway point, and I haven't gotten back into the archival access project, but hope to make a lot of progress on it today -- now that is my sole focus, now that the other project is out of my brain and in the world. This morning, I am going to start with writing what I've already done with the assumption that that will lead me to where I need to go in a way that feels more inviting than my todo list.

Accomplishments

  • Made a lot of progress on a forthcoming blog post about this week's project

Misc

  • reallife: it is still grant-review season, deadline imminent
  • reallife: signed a contract for a small but impactful project :)
  • I just keep opening this and eventually closing it 🤦
  • "The museum does not exist"
  • Trader Joe's Organic Tusi Holy Basil Herbal Tea ☕
  • Browsing Open source, experimental, and tiny tools roundup and wishing I had more time!
  • a friend and new coworker wrote something personal and I read it and cried because I'm so happy for her. 😭💖
    1. Charli XCX - 7 years.mp3
  • This is a very thorough StackOverflow answer listing out Node/Express response methods, something I didn't easily find elsewhere.

2020-05-15 Friday

Last day :(

Accomplishments

  • lightning talk on Throttled
  • lightning talk on the Vasulka archive project
  • blog post with notes about the Vasulka exploratory project. I want to spent two more days on this and then wrap it up completely, since I didn't get to spent the full week focused on it -- really only just a couple of days.

Misc

2020-05-16 Saturday

And that's a wrap! There's more I want to do, but I have to start acclimating back into reallife obligations.

NGW is such a refreshing burnout-prevention supplement. It's not the cure, but it helps get you there.

~ ~ ~

NGW'21

THREEEE years later! What will I maintain?

Year three of Never Graduate Week and I'm focusing on not not shipping anything, doing maintenance work on existing things, and learning/practicing old skills.

A short list of things:

  • Make color change consistent on the I Ching (this is like a 5min fix, why do I procrastinate on it so much?)
  • make and apply custom "sleeping" or "powered down" screens to my reMarkable2
  • clean up old laptop
  • set up new laptop
  • thinking about trying a new Linux distro, which means I need to think about Linux distros
  • so many code editor things annoy me and I just put up with it, I'd like to be more intentional about this arrangement
  • improve thinking and structure on a long-form writing project
  • some sort of Exercism practice
  • I got firefox tabs for days

2021-05-09 Sunday

  • Made sure my equipment id set up and working for tomorrow's e-ink display workshop
  • watered plants, planted some new seeds, repotted plants
  • bought a new personal computer (a long-coveted Dell XPS 13"), feels good

2021-05-10 Monday

Something I have a really hard time learning is how to chill out and take a break, which has been very detrimental to my health. I'm trying to focus on that this week -- body/brain maintenance is part of the maintenance stack, after all.

Accomplishments

  • Signed up as a patreon for the Tech Won't Save Us podcast.
  • gave myself a manicure with stick-on nail decals
  • made three healthy little salads

E-ink

  • attended a very cool e-ink workshop
    • also needed to apt-get update and install pip3
    • sudo apt-get install libopenjp2-7 libtiff5 libatlas-base-dev
    • Enabling SPI via sudo raspi-config (here's a how-to)
    • this later broke, and I need to figure out why it doesn't think there are any more events today when there are
    • I also want to add images
    • Also the time is UTC and showing it in MYYY time would be good
    • Here is what it looks like

Memex Tech Demos

These are just loose notes

Elementary OS

Thinking of going with this OS when I get my new personal computer (ETA: Friday!!!)

Misc

2021-05-11 Tuesday

  • The I Ching's background should be smooth, This has bothered me for so long, yet it was like a 5-minute fix!

Building collaborative virtual spaces discussion

Cyberspace Show and Tell

  • LIKELIKE Gallery (easy to fork) -- love this one
  • Workadventure -- so cute and cool, works really well!
  • visiting ascii town - managed to sign the guestbook
  • sprout.place !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  • walky.space

Streaming MEDIA / WebRTC

Internet Girlfriend Club

  • Volume 10 is here!!! It's been "ready" for a while (as in, I had enough entries to build a new zine) but hadn't had the time and mental space to put it together. YAY!!

2021-05-12 Wednesday

Morning

  • ate a cookie and a lavender latte because I am on vacation

Programming in other languages

  • Edith gives a talk about translating the official python documentation into French
    • organized a translation sprint
    • "great way to do dev tools onboard - you will be using git, but not in prod"
    • "you will learn about the language you are translating into, even if its your native language"
    • "(espaces insecables = non-breaking spaces in english)"

I asked about funding, because I want the A/VAA to be translated but I want to pay people to do it. This work was pro-bono though, but this is Edith's career also.

I also asked about the variations of a language, like that there are many different types of official Spanish. This context is French, so there's a specific official French to look towards, but caveats to that are that everything is default-masculine, and there are other situational problems.

Another question is about when to translate technical terms like "commit" or "branch". This seems to be project-based, so like many things, it depends.

Janice laments that American English always dominates, like in CSS: color: black instead of colour: black

  • Talk from Paul on Dark and supporting multiple languages here
  • using multi-language for search even if the actual variable names are in English

"some of the biggest challenges aren't technical, they are cultural"

  • Daniel talking about a few languages written in other languages

Memex Challenges

  • "most things decay in the order of magnitude of a decade"
  • interchange formats are key
  • markdown is great
  • not wanting to be locked into a company ecosystem, and able to bring/use your own tools
  • how do I structure a trial period for moving to a new system?
  • coaching people to use memex technology
  • hierarchies, flat lists, different things work for different people. how long do you try out not just a software, but the rituals around notetaking?
  • FUSE bridge, org-mode, tagging
  • panic driven development
  • user-defined tag relationships
  • k-means clustering tags
  • ontology - defining tag synonyms - programming and software and computer engineering
  • different definitions of ontology flying around lolol
  • sorting/filtering
  • your brain is very good at filtering and bubble up things you're looking for with context
  • archive folder, move things into there
  • memex failure: facebook in general
  • collecting for the sake of collecting
  • what is the goal of the memex?
    • increasing surface area
    • ability to share with others
  • Arc (app location activity tracking, offline only, private, secure, etc)
  • "how to take smart notes"
  • tarsnap

It's so interesting to bounce from the "programming in different languages" directly into a call with a small archives that is looking for some help/guidance and then right into the Memex discussion. Being right in the middle of archives world and tech world, I have so many thoughts/feelings about this but not sure how to articulate them well, so I am not going to! I think my primary thoughts are around how the LIS/archives field are based around community knowledge, instutitional knowledge (and the conflation that an instution's knowledge is the same thing as community/culture, because I'm not trying to paint this as all positive) and the memex conversations here are all about personal knowledge systems, boutique and unique-to-you work (not fully, but the general purpose for convening is a celebration of the different ways people work towards the same general goal).

Misc

Got a tip

2021-05-13 Thursday

Morning

Midday

World Radio History

Can I build on last year's Vasulka work to make this easy to search, retrieve, discover?

2021-05-14 Friday

Morning/Lunch/Afternoon/Evening

  • Finally finished Detransition, Baby last night!
  • Taking care of something I can't talk about yet
  • My Halt and Catch Fire Syllabus had some CSS that was failing to render properly in Chrome, and people seemed to really like it and think it was the intended aesthetic, which is cool, but I fixed it so that it looks the same in Chrome and Firefox.
  • A New Session, a telnet-based zine, is out now!!!!! I spent the lunchtime reading it.
  • Looks cool: Future of the Browser Unconference
  • watched some presentations that fried my brain
  • I've been waiting to read this piece about Andrew W.K. for so many years
  • started this book about React/TypeScript
  • Listening: Another Morning, Another Pillows
  • more presentations!
  • End of NGW party!
    • I made a rhubarb cake which I kept calling a pie, but was obviously not a pie. It involved making meringue which I haven't done since I was a kid, and I somehow managed to do it while keeping up with the conversations in the RC "Kitchen" room. Also if I had read the instructions before I started, I don't know if I would have had gone through with it, but it was too late by the time I got to the "separate the eggs and whip each in separate bowls" bit.

Overall, this year I went to a LOT of events (and there were so many to attend!), and didn't try to focus on doing much else, which worked really well! I wasn't able to get to work setting up a new personal computer because it hadn't arrived in time, but I did manage to think/learn/discover a lot of things and fix a few tiny things that had been annoying me for a long time. Also, I read two whole books that had nothing to do with programming.

Given that the entire world is burnt out and I am no exception to that, this was a great way to spend a week.

I spent the next two days not opening my computer at all! Until next year!

~ ~ ~



from Hacker News https://ift.tt/UlQDduF

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.