#1741337104
[ music | pop ]
J’sors qu’avec des geeks ou dеs dealos
preview of 20 sec instead of 30 sec, strange
▄▄▄·▪ ▐ ▄ ▄▄▄ . ▐█ ▄███ •█▌▐█▀▄.▀· ██▀·▐█·▐█▐▐▌▐▀▀▪▄ ▐█▪·•▐█▌██▐█▌▐█▄▄▌ .▀ ▀▀▀▀▀ █▪ ▀▀▀
https://pine32.be - © pine32.be 2025
Welcome! - 74 total posts. [RSS]
A funny little cycle. [LATEST]
#1741337104
J’sors qu’avec des geeks ou dеs dealos
preview of 20 sec instead of 30 sec, strange
#1740428162
Mood
#1740225625
Turns out that HTTP/0.9 is thing. No headers, no methods, no status codes, only GET. It is so simple you can easily make a request manually. Firefox still supports it apparently.
echo -e "GET /\r" | nc pine32.be 80
#1739535870
The first post was on 04/02/2024, missed the anniversary but better late than never. My goal was to make 1 post per week. I have made 70 posts this year (not including this one). So it looks like I hit my goal on average, but it was not really consistent, so that could be better. Nevertheless the goal of this blog was to make posting as easy as possible and I think it succeeded in that manner.
Development has slowed down but I still have some plans to add things like syntax highlighting for code blocks. There is nothing that I am missing at the moment, only some small nice-to-haves. I also want to keep it small, so I am keeping feature creep in check.
#1738273490
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
Last post of the year, more music
(Sounds way better in lossless)
#1734968642
Funny neo Japan woman
No lyrics caption this time, idk what they are saying
#1734385699
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
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.
#1733042840
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
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
No, Billy, I haven’t done that dance since my wife died
#1731188466
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
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
Can’t get enough of this guy, makes me want to get into drumming.
#1729278424
This is peak internet for me. Everybody should have a site like this instead of social media.
#1728621397
3-6-5-3-6-5-3-6-5-3-6-5-3-6-5-3-6-5-3-6-5…
#1728318672
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
DOWNTEMPO
#1727195369
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
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
Brussels based proto-techno
#1726662585
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
sqr_dump_2!! Found some nice older photo’s while making backups. Wasn’t soon-ish like I said but soon enough.
#1723758927
Please forgive because I have zyned, and will zyn again