https://pine32.be - © pine32.be 2026
Welcome! - 120 total posts. [RSS]
A Funny little cycle 2.0 [LATEST]


Search 120 posts with 50 unique tags


#1738273490


[ dev ]

Still alive, just busy. First post of the year… yay I guess.

I have been working on my fork of Navidrome that will have some audio and music analysis with the help of Essentia, the MVP is almost done. Because fuck Spotify, I am done with their bullshit. But I still want my cool data, so I am making it myself, all open source ofcourse.

Navidrome is written in Golang but most analysis libraries are written in C/C++ or Python, so gRPC was the solution because I am not writing a wrapper. My first time working with gRPC, it’s really nice once you get it all set up. But the setup can be a pain, like WTF are .pyi files. I have never seen them before, they are interface files so you have your types available (this is because Python Protobuf does some weird runtime C thing that processes the proto files or something). It has been nice to use, apart from setup. The end-to-end types are just a huge plus, you just know that they will work.

Python multiprocessing has also been a journey. Tested all types of pools but they always just deadlocked or didn’t run. In the end I just made my own worker pool with each worker having its own process. And they share a multiprocessing-safe queue for input and output. Sort of like I would do in Golang with channels instead of queues. And this dead simple approach worked first try of course, after everything I tried. But I am just happy that it works now. Still feels weird to see python use almost 100% of your CPU on all cores.

One year anniversary coming up for MB.

#1735654254


[ music | rock ]

Last post of the year, more music

Cover Art

(Sounds way better in lossless)

#1734968642


[ music | metal ]

Funny neo Japan woman

Cover Art

No lyrics caption this time, idk what they are saying

#1734385699


[ homelab ]

Finally moved my VPS from Caddy to Traefik. There are still a few kinks to work out, but it works great. I like Traefik’s configuration more; it allows my config to be inside each Docker Compose file itself, so it’s all in one spot. It also has TCP and UDP support, which I will be using in future projects. It little more complex to setup, but way more powerful.

#1733314156


[ rant | music ]

Today on Spotify is horrible for everybody. They killed major part of there API (since 27/11/2024), the following parts are deprecated and can’t be used by any new app.

And they did this without any notice. For some people (myself included) this means that a project with months of work is just scrapped in an instant. It is really time to move of Spotify but the alternatives are not that much better, but still better I guess. I will have to look into my own audio analyzer, if I even have the compute for that…

I am happy that this blog is scraping based so I am not dependent on there API and everything just works as before. But meta-tune and my upcoming scraping project are just totally bricked.

Cover Art

#1733042840


[ AOC_2024 ]

Advent of code is back! I don’t know I will have time to complete all days. Finally time to give a Scala a try. I figured that Scala is the best functional programming languages that is still useful to write real apps. I also was considering Elixir but I have already gave it a chance with the Phoenix framework, so Scala it is.

#1731920421


[ mb_dev ]

Got my first contribution and fork on this project. Happy to see his version deployed and taking on his own look. This project was made to be forked, I hope more people follow suit.

Hi Tim o/

#1731844234


[ music | pop ]

No, Billy, I haven’t done that dance since my wife died

Cover Art

#1731188466


[ dev | meta_raid ]

I am making a scraper for Spotify meta data. My testing numbers indicates that I could scrape 100% of Spotify in less then a week, something feels wrong.

INFO Stats per minute id=0 request=204 tracks=2451
INFO Stats per minute id=2 request=193 tracks=2086
INFO Stats per minute id=1 request=212 tracks=2392

#1730630725


[ dev | golang | meta_raid ]

Golangs new integrators came in handy for request pagination. I know the code is not optimal but is very readable and it is just for a proof of concept. I am try to get Spotify metadata in bulk. Hopefully I won’t get IP banned, fingers crossed.

for chunk := range slices.Chunk(allSimpleTracks, 100) {
	ids := make([]spotify.ID, len(chunk))
	for i, a := range chunk {
		ids[i] = a.ID
	}

	f, err := client.GetAudioFeatures(ctx, ids...)
	if err != nil {
		return nil, err
	}

	fullTracks := make([]*spotify.FullTrack, len(ids))
	for subChunk := range slices.Chunk(ids, 50) {
		full, err := client.GetTracks(ctx, subChunk, spotify.Limit(50))
		if err != nil {
			return nil, err
		}
		fullTracks = append(fullTracks, full...)
	}
	for i := range len(ids) {
		allTracks[i] = &FullerTrack{
			Track:    fullTracks[i],
			Features: f[i],
		}
	}
}

#1730070397


[ core | drums ]
YouTube Thumbnail

#1729278424


Penger City!!

penger.city

This is peak internet for me. Everybody should have a site like this instead of social media.

#1728621397


[ music ]

3-6-5-3-6-5-3-6-5-3-6-5-3-6-5-3-6-5-3-6-5…

Cover Art

#1728318672


[ dev | corap ]

Apart from a few minor glitches (which have been fixed) the scraper and scheduler runs fine. The frontend is also coming along nicely, needs a few more pages and then the CSS. And I also need to figure out how to load a dynamic amount of columns from a materialized view, shouldn’t be to hard but I want to make it fault tolerant. I don’t know what I want to do regarding design. But I know some body that maybe wants to help me, fingers crossed.

#1727454186


[ music | hardcore ]

DOWNTEMPO

Cover Art

#1727195369


[ dev | corap ]

Python (scraper) rewrite is done. Almost no dependencies now. Reduced the Docker image from 1.2 GB to less then 100MB. Feels a lot better to update and modify to. Now time for the fronted webserver.

beautifulsoup4==4.12.3
requests==2.32.3
python-dotenv==1.0.1
psycopg==3.2.2
psycopg-binary==3.2.2

#1726927465


[ dev | corap | database ]

The amount of cursed SQL that I am writing just to keep it in pure SQL. It would be way faster to just make the query in Python. Anyway… Corap rewrite is coming along nicely.

DO $$
DECLARE
    cols text;
    query text;
BEGIN
    SELECT string_agg(quote_ident(name) || ' text', ', ')
    INTO cols
    FROM (
        SELECT name
        FROM (SELECT DISTINCT name, priority FROM device_analyses) AS o
        ORDER BY priority DESC
    ) AS o;
    
    BEGIN
        EXECUTE 'DROP MATERIALIZED VIEW IF EXISTS device_analysis_summary';
        query := format('
            CREATE MATERIALIZED VIEW device_analysis_summary AS
            SELECT *
            FROM crosstab(
                ''SELECT d.deveui, da.name, da.value
                FROM devices d
                LEFT JOIN device_analyses da ON d.deveui = da.device_id
                ORDER BY d.deveui, da.name'',
                ''SELECT name
                FROM (SELECT DISTINCT name, priority FROM device_analyses) AS o
                ORDER BY priority DESC''
            ) AS ct(deveui text, %s);
        ', cols);
        EXECUTE query;
    EXCEPTION
        WHEN OTHERS THEN
            RAISE NOTICE 'Error creating materialized view: %', SQLERRM;
            ROLLBACK;
            RETURN;
    END;
END $$;

#1726858812


[ music | techno ]

Brussels based proto-techno

Cover Art

#1726662585


[ dev | corap ]

Time to rewrite Corap finally, starting with the scheduler. The current docker images is more then 1 GB. Going to remove a lot of dependencies. Also going to rewrite the fronted, learned a lot about Golang sins starting that project.

#1724482570


[ photography ]
sqr_dump_1_1 sqr_dump_1_2 sqr_dump_1_3 sqr_dump_1_4

sqr_dump_2!! Found some nice older photo’s while making backups. Wasn’t soon-ish like I said but soon enough.

#1723758927


[ music | hiphop ]

Please forgive because I have zyned, and will zyn again

Cover Art

#1723020840


New logo dropped!!

#1722452920


[ golang ]

Templ is now a recognized language on GitHub. Lets fucking Gooooo. Still the best HTML templating langue I have used. Django is also pretty good though, but not as good or as fast.

temple github screenshot

#1722283789


[ mb_dev ]

So… this regex broke my site… Because it is a ‘Youtube URL’ but is has no ID so it breaks things and panics. I should really learn regex. But not now, hotfix for the win.

faulty regex screenshot

#1721423976


[ music | core ]

Pathetic

Cover Art

I like how all this artists cover arts are different levels of deranged.