[Wayback/Archive] FemFM – 〝50% vrouw in je oor, of we zappen door!〞 werd in 2024 gelanceerd vlak voor de Women’s History Month en Internationale Vrouwendag door Felienne Hermans.
Felienne is bekend van bijvoorbeeld haar promotieonderzoek naar de impact van Excel op de samenleving, maar vooral van haar drive te onderzoeken hoe zo veel mogelijk mensen – ongeacht hun achtergrond – kunnen leren programmeren), Joy of Coding, de Hedy programmeertaal (met veel support voor andere alfabetten dan wat we in de westerse wereld gebruiken) en haar boek The Programmer’s Brain: What every programmer needs to know about cognition.
Ze is enorm goed in haar werk, en komt daarmee regelmatig in aanraking met vooringenomenheid over vrouwen. Daar verbaast ze zich terecht over, en ook dat het lastig om content (op allerlei soorten gebieden) te consumeren gemaakt door vrouwen. Dat overkwam haar bijvoorbeeld bij het luisteren naar muziek op de Nederlandse radio: daar kwamen veel meer mannelijke artiesten aan bod dan vrouwelijke.
Vandaar FemFM, en Felienne zou Felienne niet zijn als de source code niet openbaar was, dus hier wat linkjes:
[Wayback/Archive] FemFM – Felienne Hermans blog posts:
- [Wayback/Archive] FemFM – De TL;DR – Felienne Hermans
- [Wayback/Archive] FemFM – Gender van artiesten bepalen – Felienne Hermans
- [Wayback/Archive] FemFM – Radiodata verzamelen – Felienne Hermans
- [Wayback/Archive] FemFM – Is het erg dat zenders weinig vrouwen draaien? – Felienne Hermans
- [Wayback/Archive] FemFM – Het idee – Felienne Hermans
Belangrijkste stukken broncode van [Wayback/Archive] GitHub – Felienne/FemFM: Meta radio station playing as many women as possible!:
- [Wayback/Archive] FemFM/femfm.py at main · Felienne/FemFM · GitHub logica rondom de meta FemFM zender met methoden als:
genereer_uitvoer
met de zap logica (reminder for self: bij “geen muziek” blijft ie op de zender, ook als daar enorm kletsverhaal is) en bijvoorbeeld de output"De artiest THE INDIEN op Radio 3 in het programma Sophie Hijlkema van omroep AvroTros is onbekend in onze database. Zappen maar!"
.huidig_liedje_op_radio
huidig_programma
is_vrouw
zap_naar
is denk ik voor voor verbetering vatbaar: zap door totdat er een liedje van een vrouw is of je alle kanalen geprobeerd hebt in plaats van naar het eerstvolgende kanaal
- [Wayback/Archive] FemFM/main.py at main · Felienne/FemFM · GitHub logica rondom flow en hoe de webpagina en iframe met media mini-player zich tot elkaar verhouden, routering van URL naar functionaliteit, met onder meer:
player
die de mini-player URL voor een kanaal teruggeeftnu_op
die laat zien wat er nu op het kanaal speelt
Let op, er is ook een voormalige Radio 6 die via NPO Radio 2 Soul & Jazz tegenwoordig NPO Soul & Jazz heet):
- De mini-player heb ik nog nergens kunnen vinden
- [Wayback/Archive] www.nporadio2.nl/soulenjazz/api/tracks
- https://www.nporadio2.nl/soulenjazz/api/miniplayer/info?channel=npo-radio-2-soul-jazz
Idem, maar dan FunX:
Idem, maar dan SterrenNL:
- [Wayback/Archive] radioplayer.nporadio.nl/mini-player/sterrennl
- [Wayback/Archive] www.nporadio5.nl/sterrennl/api/tracks
Er zijn ook URL parameters zoals bijvoorbeeld in
https://radioplayer.nporadio.nl/mini-player/3fm/?source=studiostardust&player=rp_external&gdpr=1&gdpr_consent=
- [Wayback/Archive] FemFM/templates/media.html at main · Felienne/FemFM · GitHub met (tijdens het schrijven van deze blog post) 2 links:
- [WaybackSave/Archive] 353 – Graven in code en api’s – Felienne Hermans analyseerde de radio-genderkloof – Met Nerds om Tafel | Podcast on Spotify (met een enorme Spotify bias; daar zou ik eerder links naar de Met Nerds om Tafel web-site verwachten, daarom staan die verderop)
- [Wayback/Archive] Muziekradio is vooral meer van en voor mannen | NPO Radio 1
Felienne Hermans, hoogleraar Vakdidactiek van de Informatica aan de Vrije Universiteit Amsterdam, heeft een programma ontwikkeld om te achterhalen hoeveel vrouwen we op de radio horen.
met Wayback MP3 audio (geen video download, want NPO gebruikt de Bitmovin player met MPEG-DASH mini video-fragmenten, ik neem aan vanwege DRM (Digital rights management))
- [Wayback/Archive] FemFM/templates/nu_op.html at main · Felienne/FemFM · GitHub die een pagina met mini-player iframe, beschrijving huidige content en overzicht met statistieken toont
triggerClickInsideIframe
klikt op de play button van de mini-player in de iframe; bij mij gaat dat meestal goed in anonieme browser vensters, maar door de enorme hoeveelheid extensions die ik draai (vanwege ads, JavaScript adversaries en dergelijke) gaat dat bij mij in een normaal browservenster meestal mis (meer van mijn leermomenten in de Tweets verderop)- Wat speelt er
- Statistieken
Ik mis hier een handmatige “zap” knop die naar het volgende kanaal gaat.
MNOT links:
- [Wayback/Archive] 353 – Graven in code en api’s – Felienne Hermans analyseerde de radio-genderkloof – Met Nerds om Tafel
- [Wayback/Archive] Mnot353 transcript met:
Chapters
0:00:43 Onderzoek FemFM.nl & Taylor Swift | Internationale Vrouwendag
0:02:35 Muzikale discussies: Avril Lavigne & Taylor Swift
0:04:18 Programmeren van FemFM.nl radiozender
0:06:07 Technische uitdagingen & scripts schrijven
0:08:14 Genderherkenning in Music Brains database
0:10:41 Analyse van HTML-pagina’s & Beautiful Soup
0:11:34 Afluisteren van API’s & omzeilen van beveiliging
0:13:09 Afluisteren van API-keys & Talpa’s beveiliging
0:15:04 Analyseren van radiozenders & DAB-antennes
0:17:09 Ondervertegenwoordiging van vrouwen op radio
0:18:35 Persoonlijke ervaringen & feminisme in IT
0:20:29 Zoektocht naar gender-evenwicht op festivals
0:30:35 Muziekdiversiteit bij Groot Nieuws
0:36:42 Vrouwelijk perspectief in de media
0:40:51 Reacties op het aankaarten van ongelijkheid
0:49:37 Reflexen in gesprek tussen mannen en vrouwen
0:55:11 FemmeFemme en de rol van vrouwen op de radio
- [Wayback/Archive] Mnot353 transcript met:
- [Wayback/Archive] Felienne Hermans Archieven – Met Nerds om Tafel
Tweets:
- [Wayback/Archive] Met Nerds om Tafel on X: “Henk’s ergste nachtmerrie: @Felienne daagt radiozenders uit en lanceert #FemFM Image may be NSFW.
Clik here to view.Image may be NSFW.
Clik here to view., de radiozender met Image may be NSFW.
Clik here to view.% vrouwelijke artiesten! Image may be NSFW.
Clik here to view.Vaarwel genderkloven in IT en muziek. Luister & zie hoe jouw playlist transformeert! Image may be NSFW.
Clik here to view.#VrouwenInTech #Empowerment #Gelijkheid”
Image may be NSFW.
Clik here to view.[Wayback/Archive] _ai2z5Ck0uivRzGz.jpg (720×720)
Video’s:
- [Wayback/Archive] video.twimg.com/ext_tw_video/1767572617479716864/pu/vid/avc1/320×320/Wl63QquKPgrVPhOp.mp4
- [Wayback/Archive] video.twimg.com/ext_tw_video/1767572617479716864/pu/vid/avc1/540×540/Qc0zGQlGCTvTKsJN.mp4
- [Wayback/Archive] video.twimg.com/ext_tw_video/1767572617479716864/pu/vid/avc1/720×720/2VKfEcoEKuVTHEwl.mp4
[Wayback/Archive] cdn.syndication.twimg.com/tweet-result?id=1767573026281824543&token=!
- [Wayback/Archive] Jeroen Wiert Pluimers @wiert@mastodon.social on X: “@MetNerdsOmTafel @MiFare_lady @Felienne Shownotes:”
[Wayback/Archive] 353 – Graven in code en api’s – Felienne Hermans analyseerde de radio-genderkloof – Met Nerds om Tafel
- [Wayback/Archive] Jeroen Wiert Pluimers @wiert@mastodon.social on X: “@MetNerdsOmTafel @MiFare_lady @Felienne Transcript:
metnerdsomtafel.nl/wp-content/uploads/2024/03/mnot353-render-001.html
Dit fragment begint vlak na [44:04]. Eigenlijk moet iedereen de hele uitzending luisteren, want het is echt goud!”
- [Wayback/Archive] Jeroen Wiert Pluimers @wiert@mastodon.social on X: “@MetNerdsOmTafel @MiFare_lady @Felienne Alleen al Alleen al
femfm.nl
is briljant.”
[Wayback/Archive] FemFM – 〝50% vrouw in je oor, of we zappen door!〞
- [Wayback/Archive] Jeroen Wiert Pluimers @wiert@mastodon.social on X: “@MetNerdsOmTafel @MiFare_lady @Felienne (die link is met http, en dus *zonder* https; reminder to self: uitzoeken of dat met TLS kan vanwege alle embedded frames, want dan zou cross-site wel eens een probleem kunnen zijn) Broncode:
github.com/Felienne/FemFM
Forks:github.com/Felienne/FemFM/forks
“
- [Wayback/Archive] Jeroen Wiert Pluimers @wiert@mastodon.social on X: “@MetNerdsOmTafel @MiFare_lady @Felienne Notities voor mezelf: – als je standaard JavaScript uit hebt staan dan moet dat dus zowel voor de site als alle frames met mini-players aanstaan. – De lijst met mini-player URLs staat op
github.com/Felienne/FemFM/blob/main/main.py
“
[Wayback/Archive] FemFM/main.py at main · Felienne/FemFM · GitHub
- [Wayback/Archive] Jeroen Wiert Pluimers @wiert@mastodon.social on X: “@MetNerdsOmTafel @MiFare_lady @Felienne – De Q-music mini-player vraagt embedded heel vaak om accepteren van cookies en blokkeert dan het spelen. Dat is hopelijk iets wat met `triggerClickInsideIframe` in
github.com/Felienne/FemFM/blob/main/templates/media.html
opgelost kan worden. Dat kan ook liggen aan alle ad- en scriptblock extensies die ik heb.”
[Wayback/Archive] FemFM/templates/media.html at main · Felienne/FemFM · GitHub
- [Wayback/Archive] Jeroen Wiert Pluimers @wiert@mastodon.social on X: “@MetNerdsOmTafel @MiFare_lady @Felienne – de API URLs voor de diverse zenders om het huidige track op te halen staan in github.com/Felienne/FemFM/blob/main/femfm.py onder `huidig_liedje_op_radio`”
[Wayback/Archive] FemFM/femfm.py at main · Felienne/FemFM · GitHub
- [Wayback/Archive] Jeroen Wiert Pluimers @wiert@mastodon.social on X: “@MetNerdsOmTafel @MiFare_lady @Felienne – in hetzelfde bestand onder `huidig_programma` zie je dat via
www.oorboekje.nl
het huidige programma wordt opgehaald. Die gebruikt andere kanaalnamen, maar dat wordt door `zenders_slug` opgelost. Handig!”
Oorboekje speelt aac streams af van de diverse omroepen.
- [Wayback/Archive] Jeroen Wiert Pluimers @wiert@mastodon.social on X: “@MetNerdsOmTafel @MiFare_lady @Felienne – Tijdens nieuws/reclame op Radio 2 zapt de site vaak opnieuw naar Radio 2 en stopt dan met spelen. Het automatisch klikken van `triggerClickInsideIframe` werkt dus niet altijd goed bij mij. “Het is nu 11:06 en er speelt geen liedje op Radio 2. Even wachten nog…!””
- [Wayback/Archive] Jeroen Wiert Pluimers @wiert@mastodon.social on X: “@MetNerdsOmTafel @MiFare_lady @Felienne – De functie `triggerClickInsideIframe` zit zowel in
github.com/Felienne/FemFM/blob/main/templates/media.html
als ingithub.com/Felienne/FemFM/blob/main/templates/nu_op.html
– Wellicht wordt die te snel aangeroepen: hier gaat het geregeld mis met name als de PC traag is door memory-pressure.”
- [Wayback/Archive] Jeroen Wiert Pluimers @wiert@mastodon.social on X: “@MetNerdsOmTafel @MiFare_lady @Felienne – Ook sokt
partnerplayer.juke.nl/radio-10/stations/stations-radio-10/radio-10?autoplay=true
bij mij altijd als je op de play knop drukt. Dit gaat wel goed voor 538 en Sky die van dezelfde player site gebruik maken. Bijzonder (:” (s/sokt/stokt/) - [Wayback/Archive] Jeroen Wiert Pluimers @wiert@mastodon.social on X: “@MetNerdsOmTafel @MiFare_lady @Felienne – de `iframe` wordt geladen in
github.com/Felienne/FemFM/blob/main/templates/nu_op.html
en gegenereerd ingithub.com/Felienne/FemFM/blob/main/main.py
via `iframe=player(kanaal)`”
- [Wayback/Archive] Jeroen Wiert Pluimers @wiert@mastodon.social on X: “@MetNerdsOmTafel @MiFare_lady @Felienne – – Bij nader inzien gaan
partnerplayer.juke.nl/sky-radio/stations/stations-sky-radio/sky-radio?autoplay=true
enpartnerplayer.juke.nl/radio-538-player/stations/stations-radio-538/radio-538?autoplay=true…
ook mis. In een anoniem venster zonder browser extensions gaat dat wel goed. Het ligt dus aan mijn browser, dus voorlopig hiervoor een anoniem venster gebruiken.”
- [Wayback/Archive] Jeroen Wiert Pluimers @wiert@mastodon.social on X: “@MetNerdsOmTafel @MiFare_lady @Felienne – Radio 10 geeft bij elke refresh van het iframe *dezelfde* reclame in een anoniem browser venster. Irritant.”
- [Wayback/Archive] Jeroen Wiert Pluimers @wiert@mastodon.social on X: “@MetNerdsOmTafel @MiFare_lady @Felienne – In een anoniem venster speelt Radio Veronica niet altijd af en moet ik handmatig de play knop klikken. Gelukkig zapt FemFM na verloop van tijd (als de song afgelopen is en er een mannelijke artiest komt) vanzelf door naar een andere zender. De stilte is overigens niet storend.”
MP3 URLs van veel Nederlandse zenders:
- https://icecast.omroep.nl/radio1-bb-mp3
- https://icecast.omroep.nl/radio2-bb-mp3
- https://icecast.omroep.nl/3fm-bb-mp3
- https://icecast.omroep.nl/radio4-bb-mp3
- https://icecast.omroep.nl/radio5-bb-mp3
- https://icecast.omroep.nl/radio6-bb-mp3 (NPO Soul en Jazz)
- https://icecast.omroep.nl/npoblend-bb-mp3
- https://icecast.omroep.nl/funx-bb-mp3
- https://icecast.omroep.nl/radio2-sterrennl-mp3
- https://playerservices.streamtheworld.com/api/livestream-redirect/RADIO538.mp3
- https://playerservices.streamtheworld.com/api/livestream-redirect/RADIO10.mp3
- https://playerservices.streamtheworld.com/api/livestream-redirect/VERONICA.mp3
- https://icecast-qmusicnl-cdp.triple-it.nl/Qmusic_nl_live_96.mp3
- https://playerservices.streamtheworld.com/api/livestream-redirect/SKYRADIO.mp3
- https://stream.100p.nl/100pctnl.mp3
- https://stream.gal.io/arrow
- https://stream.slam.nl/slam_mp3
- https://playerservices.streamtheworld.com/api/livestream-redirect/SUBLIME.mp3
- https://192radio.stream-server.nl/stream
- https://ice.cr6.streamzilla.xlcdn.com:8000/sz=nhnieuws=NHRadio_mp3
- https://playerservices.streamtheworld.com/api/livestream-redirect/KINK.mp3
- https://server-23.stream-server.nl:18438/;listen.pls (IndieXL)
- https://mcp-1.streampanel.nl:8020/lxclassics_mp3
- https://stream.40upradio.nl/40up
- https://s22.myradiostream.com/7728/listen.mp3 (80s hitradio)
- https://stream.arrowcaz.nl/caz128kmp3
- https://stream.bnr.nl/bnr_mp3_128_20
- https://mediaserv73.live-streams.nl:18002/stream (49)
- https://icecast-qmusicnl-cdp.triple-it.nl/Joe_nl.mp3
- https://playerservices.streamtheworld.com/api/livestream-redirect/KINK_DNA.mp3 (Kink 80’s)
- https://playerservices.streamtheworld.com/api/livestream-redirect/JUKE_S02_SC.mp3 (LINDA radio)
- https://sslive.zeilsteen.com/;
Van de NPO zenders zijn ook .m3u en .xspf playlist links, zie bijvoorbeeld de gearchiveerde NPO Icecast Streaming Media Server (2015)
Meer streaming URLs, ook van Belgische en andere Europese zenders op [Wayback/Archive] Webradiozenders Streaming URL’s.
Andere interessante NPO gerelateerde URLs:
- [Wayback/Archive] Icecast Streaming Media Server
- [Wayback/Archive] Icecast Streaming Media Server:
/admin.html
- [Wayback] icecast.omroep.nl/admin/listmounts.xsl
- [Wayback] icecast.omroep.nl/admin/managerelays.xsl
- [Wayback] icecast.omroep.nl/admin/function.xsl?perform=updatecfg
- [Wayback] icecast.omroep.nl/admin/logs.xsl
- [Wayback/Archive] Icecast Streaming Media Server:
/index.html
- [Wayback/Archive] Icecast Streaming Media Server:
/status.xsl
- [Wayback/Archive] Icecast Streaming Media Server:
/server_version.xsl
- [Wayback/Archive] Icecast Streaming Media Server:
- [Wayback/Archive] status.nporadio.nl
- [Wayback/Archive] Subdomain Finder scan of nporadio.nl – C99.nl
- [Wayback/Archive] Radio luisteren | Alle radiozenders op één plek | JUKE.nl
- [Wayback/Archive] Alle radiostations online beluisteren Image may be NSFW.
Clik here to view.MP3streams.nl
- [Wayback/Archive] Roofman
- [Wayback/Archive] Oorboekje – Het spoorboekje voor de radio
- [Wayback/Archive] links:https://icecast.omroep.nl – Google Search
- [Wayback/Archive] The Webstation Internet Radio and TV Database (naar onderen bladeren of naar “2018” zoeken)
- [Wayback/Archive] streaming:urls – Hosting (pagina bestaat niet meer, laatst gearchiveerde is ruim 10 jaar oud, dus deel informatie is verouderd)
Icecast
Streaming is vaak gebaseerd op Icecast.
JavaScript Icecast streaming clients
- [Wayback/Archive] GitHub – eshaz/icecast-metadata-js: Browser and NodeJS packages for playing and reading Icecast compatible streaming audio with realtime metadata updates.
Icecast Metadata JS is a collection of Javascript modules for streaming audio playback with metadata.
Be ware of issues around HTTP and HTTPS Mixed Content (as icecast often is only available over http) and CORS (Cross-Origin Response Sharing) which is important if the icecast server is on a different domain than the webserver (which usually is the case).
- [Wayback/Archive] Icecast Metadata JS Demo (React)
- [Wayback/Archive] Icecast Metadata JS Demo (HTML demos)
- [Wayback/Archive] icecast-metadata-js/src/icecast-metadata-player at master · eshaz/icecast-metadata-js · GitHub (obtains metadata from stream while playing the stream)
- [Wayback/Archive] icecast-metadata-js/src/icecast-metadata-stats at master · eshaz/icecast-metadata-js · GitHub (can obtain metadata from stream without playing the stream)
- [Wayback/Archive] Icecast Metadata JS Demo (bare minimum demo)
Via
Python Icecast streaming server
- [Wayback/Archive] python icecast source streamer · GitHub
- [Wayback/Archive] GitHub – turlando/airhead at python
Note that since then this repository got rewritten to use Clojure (on the Java platform): [Wayback/Archive] GitHub – turlando/airhead: A REST application to run a radio where the listeners build the library and pick the tracks.
- Via [Wayback/Archive] icecast python – Google Search
Python Icecast client
- [Wayback/Archive] miniaudio · PyPI
- [Wayback/Archive] GitHub – irmen/pyminiaudio: python interface to the miniaudio audio playback, recording, decoding and conversion library
It depends on [Wayback/Archive] GitHub – mackron/miniaudio: Audio playback and capture library written in C, in a single source file.
- Via [Wayback/Archive] How to receive “icecast” internet radio stream for immediate playback with Python? – Stack Overflow (thanks [Wayback/Archive] Irmen de Jong and [Wayback/Archive] ch4rl1e97)
--
jeroen