Location: Ohio, USA
Remote: yes
Willing to relocate: no
Technologies: Java, Scala, Python, PostgreSQL, Neo4j, AWS, Snowflake, Spark, Pulumi, Docker/Kubernetes, Elasticsearch, Redis
Résumé/CV: https://www.dropbox.com/scl/fi/b9xdy2wx2315hgany7mcb/ThomasMatlak.pdf?rlkey=d6e11pweopk52glg3p65exeyl&st=235hon4q&dl=0
Email: see profile or résumé
I have been working mostly in JVM-land doing backend development. Writing APIs, data ETL jobs, and managing cloud infrastructure (AWS).
Happy to jump into any part of the stack (as long as it's not exclusively frontend) and pick up any programming language on the job.HN user
big_t
thomas.matlak@gmail.com github.com/ThomasMatlak
Classical 101: WOSA/Grove City, OH
In the answer to "Wait, what's a rest?", I'm intrigued by the definition of "...any time step where you don’t play any new notes." (emphasis mine)
Why not have each time step contain all pitches that should sound during that time step (so starting a new quarter note and continuing a half note would both appear in the same time step)? Then at the end of generating the music, perform some post-processing to get the note lengths. Would the approach in the interview having any significant advantages to this approach? (I suppose you do lose the ability to rearticulate a pitch with my idea)
I actually just recently took a shot at something very similar to this for my undergrad thesis! [0]
I used genetic algorithms to generate 4 measure melodies, using a long short-term memory (LSTM) neural network to determine the fitness of melodies. I trained the LSTM on snippets of music by J.S. Bach. It was able to distinguish between random noise notes and actual music quite well, and to a somewhat lesser degree between Bach and other composers.
The melodies it produced were...mixed in quality. I really liked some of them, but quite often it would get stuck at some local maxima of the fitness and couldn't mutate its way to something better.
[0] https://github.com/ThomasMatlak/is-software/tree/master/gene...