ID.nl logo
Zo kun je programmeren in Python - Deel 5
© Reshift Digital
Zekerheid & gemak

Zo kun je programmeren in Python - Deel 5

In de href="https://computertotaal.nl/artikelen/pc/zo-kun-je-programmeren-in-python-deel-4/" rel="noopener noreferrer" target="_blank">vorige les</a> toonden we allerlei manieren om de uitvoer van tekst op het scherm aan te passen. In deze les zetten we de stap van je scherm naar bestanden: we gaan gegevens uit bestanden lezen en naar bestanden schrijven. Daarnaast leer je reageren op exceptions: foutmeldingen die Python je geeft als er iets misgaat.

Twee lessen geleden gebruikte je de functie input om wat de gebruiker op zijn toetsenbord intypt te registreren. En in de vorige les toonden we je hoe je met de functie print uitvoer op het scherm toont. Maar in- en uitvoer kan ook via bestanden verlopen. Laten we eens kijken hoe dat gaat.

Hier kun je les vier bekijken.

We beperken ons in deze les tot het lezen en schrijven van tekstbestanden. Je kunt ook met binaire bestanden werken, die willekeurige data in een andere vorm dan tekst kunnen bevatten, maar dat is wat meer werk omdat je de data nog moet interpreteren. Voor de rest werkt dit hetzelfde.

Een tekstbestand lezen

We tonen hier in een voorbeeld hoe je op een Linux-machine zoals een Raspberry Pi met Raspberry Pi OS (tot voor kort Raspbian geheten) het bestand met de lijst van gebruikers uitleest. Ook op macOS werkt dit voorbeeld. Gebruik je Windows, maak dan zelf een bestand aan met de inhoud die we in ons voorbeeld tonen en pas de locatie van het te openen bestand aan in je Python-code.

De eenvoudigste manier om een volledig tekstbestand uit te lezen en op het scherm te tonen, heeft maar twee regels nodig:

with open('/etc/passwd', 'rt') as bestand:

print(bestand.read())

In de eerste regel openen we het bestand met de functie open. Het eerste argument is het bestand dat we willen openen. We hebben hier een volledig pad gebruikt: '/etc/passwd'. Als je een bestand wilt lezen dat in dezelfde directory staat als waarin je de Python-interpreter hebt opgestart, hoef je geen volledig pad door te geven: de bestandsnaam volstaat dan. Met het tweede argument 'rt' geven we aan dat we het bestand willen lezen en dat het om een tekstbestand gaat.

De constructie met with is wat Python een ‘context manager’ noemt. In het with-blok heb je toegang tot het object bestand dat het geopende bestand voorstelt. Na het with-blok wordt het bestand automatisch gesloten, zodat je het niet meer kunt lezen. Dit lijkt vanzelfsprekend, maar dat is het niet: ook zonder with kun je bestanden openen, maar als je dan het bestand na gebruik vergeet te sluiten, kan dit tot problemen leiden. Werk dus nooit met bestanden zonder with.

In de tweede regel roepen we de functie read op het object bestand aan. Deze functie geeft de volledige inhoud van het tekstbestand terug als een string, die we dan met print op het scherm tonen. Op een typisch Linux-systeem ziet de uitvoer er als volgt uit (we tonen hier maar enkele regels):

root:x:0:0:root:/root:/bin/bash

daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin

bin:x:2:2:bin:/bin:/usr/sbin/nologin

Enzovoort

Een tekstbestand regel voor regel lezen

Maar wat als we niet het hele bestand in één keer willen inlezen, maar regel voor regel, bijvoorbeeld omdat we willen testen of de regels aan specifieke voorwaarden voldoen? Geen probleem, ook dat is in Python heel eenvoudig. In plaats van de functie read op je bestand toe te passen, ga je dan met een for-lus door de elementen van het bestand. Het tekstbestand dat je van de functie open terugkrijgt, gedraagt zich immers als een lijst met als elementen de opeenvolgende regels in het bestand.

Een string splitsen

Maar als we die regels een voor een gaan inlezen, moeten we er ook iets mee doen. Zoals je ziet, bevat het bestand /etc/passwd op elke regel allerlei informatie over de gebruiker, telkens afgescheiden door een dubbele punt. We willen elk van die gegevens afzonderlijk uitlezen. Dat gaat eenvoudig met de functie split die we op een string kunnen uitvoeren. Bijvoorbeeld:

>>> 'root:x:0:0:root:/root:/bin/bash'.split(':')

['root', 'x', '0', '0', 'root', '/root', '/bin/bash']

Je ziet hier dat we aan de functie split het teken meegeven dat de verschillende componenten van de string afscheidt: ':'. Het resultaat is een lijst met strings die onderdeel uitmaken van onze lange string, zonder de afscheidingstekens ':'.

De opeenvolgende componenten in de regels van het bestand /etc/passwd hebben overigens de volgende betekenis: gebruikersnaam, ongebruikt, ID van de gebruiker, ID van de groep, volledige gebruikersnaam, persoonlijke map van de gebruiker, shell van de gebruiker.

Een lijst uitpakken

Je kunt nu naar de elementen in de gesplitste string verwijzen met een index, bijvoorbeeld:

>>> informatie = 'root:x:0:0:root:/root:/bin/bash'.split(':')

>>> informatie[0]

'root'

>>> informatie[6]

'/bin/bash'

Maar dat is niet heel duidelijk. Zo willen we informatie[0] eigenlijk gebruiker noemen en informatie[6] de naam shell geven. Gelukkig kun je in Python de elementen van een lijst eenvoudig in één keer aan enkele variabelen toekennen. Dat heet unpacking. In ons voorbeeld gaat dat als volgt:

>>> gebruiker, *_, naam, directory, shell = 'root:x:0:0:root:/root:/bin/bash'.split(':')

>>> gebruiker

'root'

>>> _

['x', '0', '0']

>>> naam

'root'

>>> directory

'/root'

>>> shell

'/bin/bash'

De notatie * gebruik je om een willekeurig aantal elementen uit te pakken. Omdat we in dit geval niet in deze elementen geïnteresseerd zijn, kennen we ze toe aan de variabele met de naam _, vandaar dat we bij het uitpakken *_ gebruiken. We konden dit hier ook vervangen door gebruiker, _, _, _, naam, directory, shell.

Gegevens uit een tekstbestand filteren

Dan weet je nu genoeg om de volgende opdracht uit te voeren: lees het bestand met wachtwoorden regel per regel in en als de shell geen '/usr/sbin/nologin' of '/bin/false' is, toon je de gebruikersnaam, volledige gebruikersnaam en persoonlijke map.

De code ziet er als volgt uit:

with open('/etc/passwd', 'rt') as bestand:

for regel in bestand:

gebruiker, *_, naam, directory, shell = regel.strip().split(':')

if shell not in ['/bin/false', '/usr/sbin/nologin']:

print(' {1} ({0}): {2} ({3})'.format(gebruiker, naam, directory, shell))

We openen dus het bestand /etc/passwd als tekstbestand om te lezen. Voor elke regel in het bestand pakken we de verschillende elementen uit in enkele variabelen. We kijken dan of de shell niet gelijk is aan de twee eerdergenoemde shells. Als aan die voorwaarde is voldaan, tonen we de gebruiker, zijn volledige naam, zijn persoonlijke map en zijn shell.

Er is slechts één nieuwigheid in deze code: de functie strip. Die verwijdert witruimte en nieuwe regels aan het begin en het einde van een string. Dat hebben we hier nodig omdat de shell op het einde van de regel staat en er daar dus een teken voor een nieuwe regel komt. Zonder die aanroep van strip zou de vergelijking in de regel erna niet werken.

Naar een tekstbestand schrijven

Naar een tekstbestand schrijven, verloopt op een vergelijkbare manier als een tekstbestand lezen. We beginnen een with-blok waarin we het bestand openen en daarin schrijven we naar het bestand:

with open('bestand.txt', 'wt') as bestand:

bestand.write('Dit is de eerste regel.\n')

bestand.write('Dit is de tweede regel.\n')

bestand.write('Dit is de derde regel.\n')

Op het einde van elke regel moet je zelf een teken voor een nieuwe regel toevoegen: \n. Een andere manier om een regel naar een tekstbestand te schrijven, is met de functie print, die automatisch een nieuwe regel toevoegt:

print('Dit is de eerste regel.', file=bestand)

Merk op dat we het bestand openen met als tweede argument 'wt', waarmee we aangeven dat we naar het bestand willen schrijven. Op deze manier overschrijven we alle al bestaande inhoud van het bestand, dus let hiermee op!

Als je deze situatie wilt vermijden, kun je open aanroepen met de bestandsmodus 'xt'. Als het bestand nog niet bestaat, doet die hetzelfde als 'wt': je kunt naar het bestand schrijven. Maar als het bestand al bestaat, krijg je een foutmelding:

with open('bestand.txt', 'xt') as bestand:

print('Dit is een test.', file=bestand)

with open('bestand.txt', 'xt') as bestand:

print('Dit is nog een test.', file=bestand)

Traceback (most recent call last):

File "<pyshell>", line 1, in <module>

FileExistsError: [Errno 17] File exists: 'bestand.txt'

Een andere interessante bestandsmodus is 'at' (van ‘append’): hiermee voeg je aan het einde van een bestaand tekstbestand regels toe.

Exceptions afhandelen

In het voorbeeld hierboven zou je waarschijnlijk de foutmelding dat het bestand al bestaat op een nettere manier willen afhandelen. Wat we tot nu toe een foutmelding genoemd hebben, heet in Python een exception. Er bestaan verschillende types exceptions en in je Python-code kun je eenvoudig het optreden van exceptions afvangen. Dat gaat als volgt:

try:

with open('bestand.txt', 'xt') as bestand:

print('Dit is nog een test.', file=bestand)

except FileExistsError:

print('FOUT: Het bestand bestaat al.')

De code binnen het try-blok wordt uitgevoerd zoals normaal. Maar als er binnen dit blok een exception voorkomt, gaat het programma door naar het except-blok. Daarin hebben we aangegeven dat we alleen in de exceptions van het type FileExistsError geïnteresseerd zijn. In het geval er zo een voorkomt, tonen we onze eigen foutmelding. Daarna gaat het programma verder na het except-blok.

Als je meerdere types exceptions wilt afvangen, voeg je meerdere except-blokken toe met elk het andere type exception. Als je voor meerdere types exceptions dezelfde code wilt uitvoeren, dan zet je die exceptions tussen haakjes, zoals hier:

except (ZeroDivisionError, ValueError):

En als je op alle mogelijke exceptions hetzelfde wilt reageren, voeg je gewoon een except-blok zonder de naam van een exception toe, al is dat niet zo vaak zinvol.

Samenvatting

In deze les hebben we geleerd hoe we tekstbestanden kunnen inlezen en strings in onderdelen kunnen splitsen. Ook in de andere richting kun je nu met tekstbestanden werken: je kunt willekeurige tekst naar een bestand schrijven. En doordat je hebt geleerd hoe je exceptions kunt afvangen, hoeven de gebruikers van je programma geen cryptische foutmeldingen van Python meer te krijgen. Omdat je met deze kennis al complexere Python-programma’s kunt schrijven, leer je in de volgende les hoe je je programma meer kunt structureren in functies en modules.

Opdracht

Vraag de gebruiker om een regel zoals root:x:0:0:root:/root:/bin/bash voor gebruik in een wachtwoordbestand op te geven. Schrijf de belangrijkste elementen van de regel naar een afzonderlijke regel in een bestand, in de vorm: Gebruiker: root Naam: root Directory: /root Shell: /bin/bash Zorg dat je programma een heldere foutmelding geeft als de regel niet de correcte vorm voor een wachtwoordbestand heeft.

Uitwerking

regel = input('Voer een regel voor het wachtwoordbestand in: ') try: gebruiker, _, _, _, naam, directory, shell = regel.strip().split(':') with open('wachtwoordbestand', 'wt') as bestand: print('Gebruiker: {}'.format(gebruiker), file=bestand) print('Naam: {}'.format(naam), file=bestand) print('Directory: {}'.format(directory), file=bestand) print('Shell: {}'.format(shell), file=bestand) except ValueError: print('Voer de regel in de volgende vorm in:') print('gebruiker:x:0:0:naam:directory:shell') Dit is een rechtstreekse combinatie van alles wat je in deze les geleerd hebt. Let op: we hebben hier wel gebruiker, _, _, _, naam, directory, shell nodig en niet de kortere versie gebruiker, *_, naam, directory, shell. Met die laatste regel garanderen we immers niet dat de regel uit exact zeven elementen bestaat.

Cheatsheet

exception: een foutmelding in Python pad: de locatie van een bestand, met alle bovenliggende directorynamen erbij

▼ Volgende artikel
Waar voor je geld: 5 luxe Amerikaanse koelkasten met een ijsmaker
© Ivan Guia - stock.adobe.com
Huis

Waar voor je geld: 5 luxe Amerikaanse koelkasten met een ijsmaker

Bij ID.nl zijn we dol op kwaliteitsproducten waar je niet de hoofdprijs voor betaalt. Een paar keer per week speuren we binnen een bepaald thema naar zulke deals. Ben je op zoek naar een superdeluxe koelkast met een ijsblokjesmaker? Vandaag hebben we vijf interessante modellen voor je gespot.

Amerikaanse koelkasten bieden veel ruimte voor al je etenswaren en bieden een ruime vriesmogelijkheid. De door ons gevonden koelkasten hebben allemaal een eigen ijsblokjesmaker in de kastdeur geïntegreerd, zodat je snel en gemakkelijk ijs in je drinken kunt doen, mocht je daar nu behoefte aan hebben met deze frissere dagen natuurlijk.

Samsung RS6HA8891SL

Deze chique Amerikaanse koelkast is van alle gemakken voorzien. Zo springt het forse aanraakscherm op de rechterdeur direct in het oog. Dat fungeert als een soort 'familiehub' binnen het huishouden. Zo bestel je bijvoorbeeld boodschappen, beheer je de gezinsagenda, voer je handsfree telefoongesprekken en bedien je muziek via het scherm. Sta je in de supermarkt en weet je niet of je een vers kuipje boter of nieuwe fles cola nodig hebt? Dankzij de geïntegreerde camera bekijk je altijd en overal de inhoud van je koelkast. Dat werkt via een app op je smartphone.

Het koelgedeelte aan de rechterkant heeft een inhoud van 389 liter, terwijl je links ook nog flink wat voedingswaren kunt invriezen. Het vriescompartiment is goed voor een inhoud van 225 liter. Fijn is dat de Samsung RS6HA8891SL geen ijs ontwikkelt, want dit model ondersteunt No Frost. Gebruik het bedieningspaneel aan de rechterzijde om koud water en ijsblokjes te tappen. Mooi meegenomen is het geringe geluidsniveau van 36 decibel, waardoor je hem dicht bij de woonkamer of eettafel kunt neerzetten. Deze koelkast is in een zilverkleurige en zwarte behuizing te koop.

LG GSLC41PYPE

Met een totale inhoud van 641 liter kun je heel wat eten en drinken in de LG GSLC41PYPE kwijt. De koel- en vriesruimte hebben een inhoud van respectievelijk 420 en 221 liter. Dankzij meerdere lades, planken en deurvakken berg je alle voedingswaren overzichtelijk op. Vul de geïntegreerde tank met 4,3 liter water en tap aan de voorzijde ijsklontjes of ijswater. Het is dus niet nodig om dit apparaat aan de waterleiding te koppelen.

Het betreft een Amerikaans model met twee deuren. Houd dan ook rekening met een ruime omvang van 91,3 × 179 × 73,5 centimeter. Zowel het vries- als koelgedeelte hebben ledverlichting, waardoor je alle producten ziet liggen. Zoals je van deze luxe koelkast mag verwachten, is er geen sprake van ijsvorming. De GSLC41PYPE ondersteunt namelijk No Frost. Tot slot is de stille werking van 36 decibel een pluspunt. Geïnteresseerden kiezen tussen een zilverkleurige en zwarte uitvoering.

ETNA AKV578IZWA

Voor een Amerikaanse koelkast valt de prijs van dit exemplaar van ETNA erg mee. Kies tussen een zwarte en zilverkleurige behuizing. Ruim twintig consumenten beoordelen het apparaat met een gemiddelde score van een 9,3. Zij waarderen onder meer de ijs- en waterdispenser aan de voorzijde. Dankzij de geïntegreerde watertank van 4,5 liter is er geen aansluiting op de waterleiding vereist. Andere benoemde voordelen zijn de fraaie verlichting, prettige indeling, grote handgreep en mooie vormgeving. Bovendien is ontdooien dankzij No Frost nooit nodig.

Zodra je de rechterdeur open doet, heb je toegang tot een koelgedeelte van 334 liter. Gebruik twee lades, vier legplanken en drie deurvakken om producten koel te bewaren. Daarnaast levert ETNA een handig rek met plek voor vijf flessen mee. De vriezer heeft een respectabele inhoud van 165 liter. Met behulp van vier planken en twee lades verdeel je de ingevroren etenswaren netjes in deze ruimte. De voorkant heeft boven de waterdispenser een bescheiden bedieningspaneel. Daarmee stel je voor beide compartimenten de gewenste temperatuur in. Verder activeer je desgewenst het deuralarm en de ecomodus.

Lees ook: 🧊 Houd je eten langer vers: zo deel je je koelkast optimaal in

Hisense RS818N4TIC

Voor een Amerikaans model vallen de energiekosten van de Hisense RS818N4TIC mee. Ga op jaarbasis uit van een stroomverbruik van zo'n 221 kilowattuur. Een ander pluspunt is het lage geluidsniveau van 36 decibel. Deze koelkast leent zich met een riante totaalinhoud van 632 liter perfect voor een ruim gezin. Er is 417 liter toegewezen aan het koelgedeelte, terwijl de resterende 215 liter aan de vrieskast is toebedeeld. Wees trouwens niet bang voor ijsvorming, want dit apparaat ondersteunt de techniek No Frost.

Je koppelt deze slimme koelkast eventueel aan wifi. Vraag vervolgens op elke plek de apparaatstatus op. Zo kun je met een app op je smartphone de temperatuur reguleren. Zodra je de deur van het koel- of vriesgedeelte open doet, gaat er een felle ledlamp branden. Hierdoor zie je niets over het hoofd. Hisense levert een rek voor vijf flessen mee, zodat je frisdrank en wijn efficiënt kunt opbergen. Tot slot is de gecombineerde ijs- en waterdispenser aan de voorzijde een pluspunt. Hiervoor is er een watertank van 4,5 liter ingebouwd. Deze koelkast is verkrijgbaar in een zilverkleurige en zwarte behuizing. Lees hier enkele reviews van andere consumenten.

LG GSXE90EVDD

De onlangs verschenen LG GSXE90EVDD heeft een deur-in-deur-functie. Open het glazen deurtje en pak heel snel de producten die je het vaakst gebruikt, zoals melk, kwark of yoghurt. Voor toegang tot het volledige koelvak van 407 liter kun je uiteraard ook de reguliere deur gebruiken. Aan gebruiksgemak is er bepaald geen gebrek, want de linkerkant heeft een dispenser. Kies hiermee tussen ijsblokjes, ijswater en water. Door een aansluiting op de waterleiding hoef je niet steeds een watertank handmatig te vullen. De vriezer heeft een capaciteit van 192 liter en ondersteunt No Frost. Beide compartimenten bevatten ledverlichting.

Veel Amerikaanse koelkasten hebben een behoorlijk energieverbruik, maar dat is bij dit model te overzien. De GSXE90EVDD vereist ongeveer 276 kilowattuur stroom per jaar. Met een opgegeven geluidsniveau van slechts 35 decibel is deze koelkast zéér stil. Nuttig voor wie het apparaat vlak bij de woonkamer of keukentafel positioneert. Dankzij een koppeling met het draadloze thuisnetwerk volg je de apparaatstatus in een smartphone-app. Is er onverhoopt een storing, dan kun je hiermee wellicht het probleem oplossen.

▼ Volgende artikel
De leukste techcadeaus voor de feestdagen (of voor jezelf natuurlijk)
© ID.nl
Huis

De leukste techcadeaus voor de feestdagen (of voor jezelf natuurlijk)

Op zoek naar (last-minute) inspiratie voor de feestdagen? We hebben 17 gadgets en techcadeaus voor je gespot waarmee je iedereen blij maakt. Uiteraard denken we ook aan je portemonnee: we hebben gekeken naar cadeaus van maximaal ongeveer 200 euro. Fijne feestdagen!

Xiaomi Watch S4

De stijlvol vormgegeven Xiaomi Watch S4 oogt misschien als een regulier horloge, maar het is wel degelijk een smartwatch. Deze wearable is in drie chique uitvoeringen te koop. Het ronde amoledscherm van 466 × 466 pixels heeft een prettig formaat van 1,43 inch. Bovendien is de behuizing volledig waterdicht. Volgens de fabrikant houdt de accu van 486 mAh het bij normaal gebruik ongeveer twee weken vol. Je kunt hem dus dag en nacht dragen. Voor actieve personen komen de 150 sportmodi goed van pas. Verder zitten er onder meer een kompas, slaapmonitor en hartslagsensor in. Leuk is dat je hem helemaal kunt personaliseren: in het menu kun je kiezen tussen ruim tweehonderd wijzerplaten.

WiZ Gradient Light Bars

Meer sfeer in huis? Dan is deze slimme verlichtingsset van WiZ hét cadeau bij uitstek. Je kunt beide objecten verticaal en horizontaal plaatsen. In combinatie met de los verkrijgbare HDMI Sync Box synchroniseren de lampen zelfs met de kleuren van jouw televisie. Als alternatief reageren de WiZ Gradient Light Bars op de beat van de muziek. Daarnaast kun je in een app ook eigen lichtschema's instellen. Hierin pas je de kleuren en dimniveaus naar eigen wens aan.

Ultimate Ears Megaboom 4

De Ultimate Ears Megaboom 4 is een robuuste bluetooth-speaker met een krachtig geluid. Ondanks de relatief grote behuizing van 8,7 × 22,5 × 8,7 centimeter weegt het apparaat nog geen kilo. Hij kan mee naar buiten, want hij is volledig water- en stofdicht. Met een opgegeven accuduur tot twintig uur luister je altijd en overal naar goede muziek. Twee actieve audiodrivers en evenzoveel passieve basradiators zorgen voor een vol geluid. Je kunt kiezen tussen een zwarte, blauwe, rode en paarse behuizing.

Shelly Plug S Gen3

Met de Shelly Plug S Gen3 maak je ieder apparaat slim. Dit stopcontact meld je eenvoudig aan op het draadloze thuisnetwerk. Sluit bijvoorbeeld een lamp of verwarming aan en bedien de boel met een app op je smartphone. Pluspunten zijn de ondersteuning voor de universele Matter-standaard en de aanwezige energiemeter. De maximale belasting bedraagt 2500 watt. Wil je meerdere 'domme' apparaten op afstand bedienen? Er is ook een 4-pack verkrijgbaar.

Philips 32PFS6109/12

Misschien leuk om iemand een slaapkamer-tv cadeau te doen? Wie goed zoekt, vindt de Philips 32PFS6109/12 voor minder dan tweehonderd euro. Een heus koopje, want dit is een smart-tv van een gerenommeerd merk. Vanuit het Titan OS-smartplatform open je diverse populaire apps, zoals Disney+, Amazon Prime Video, YouTube en natuurlijk Netflix. Kijk vervolgens naar series en films in een respectabele beeldkwaliteit van 1920 × 1080 pixels. Ontvang je televisiekanalen via de kabel of satelliet, dan zijn de juiste tuners al aanwezig. Ten slotte kun je via drie HDMI-poorten ook externe videobronnen aansluiten, zoals een gameconsole, blu-ray-speler en tv-ontvanger.

Teufel Real Blue NC 3

De Duitse audiospecialist Teufel bracht eerder dit jaar de derde generatie van zijn Real Blue NC uit. Naast de aanwezigheid van actieve ruisonderdrukking vallen de zachte kussens ook nog eens volledig over je oren. Dankzij de twee genoemde kenmerken hoor je niet of nauwelijks geluiden uit de omgeving. Deze bluetooth-koptelefoon ondersteunt een accuduur tot maximaal 59 uur. Zet je noise cancelling uit, dan bedraagt de maximale luistertijd zelfs 98 uur. Volgens Teufel leveren de 40mm-audiodrivers een helder geluid en stevige bas. Er is ook een microfoon ingebouwd, waardoor je handsfree kunt bellen. Dit product is in een zwarte, witte en blauwe uitvoering te koop.

Logitech Zone 300

Wie regelmatig aan videovergaderingen deelneemt, heeft veel baat bij een goede headset. Met de betaalbare Logitech Zone 300 kunnen digitale gesprekspartners elkaar duidelijk verstaan. De bekende hardwarefabrikant fabriceert dit vederlichte model in drie smaken, namelijk zwart, wit en roze. Via bluetooth maak je verbinding met een pc, laptop, tablet of smartphone. De maximale gesprekstijd op een enkele batterijlading is ongeveer zestien uur.

ACT AC5151

Zie je een familielid of vriend(in) regelmatig op het touchpad van een laptop priegelen? Geef diegene dan deze comfortabele muis van ACT cadeau. Stop de bijgesloten ontvanger in een vrije usb-poort en bedien de muis vervolgens draadloos. Bovenop bevindt zich een zogeheten dpi-switch. Daarmee pas je eenvoudig de gevoeligheid van de cursor aan. Deze muis is geschikt voor rechtshandige personen.

Audio-Technica AT-SP3X

Deze elegante speakerset van Audio-Technica zal op geen enkel bureau misstaan. Het bekende audiomerk fabriceert dit product in een zwarte (AT-SP3X) en witte (AT-SP3XWH) behuizing. Dankzij de ingebouwde versterker verbind je de AT-SP3X rechtstreeks met apparaten, zoals een pc of laptop. Daarnaast is er een bluetooth-ontvanger geïntegreerd. Koppel dus een tablet of smartphone en stream draadloos je favoriete Spotify-afspeellijsten. Je luistert vervolgens naar goede muziek in stereokwaliteit. Het opgegeven uitgangsvermogen bedraagt dertig watt.

TP-Link Tapo RV30 Max

TP-Link bewijst dat een robotstofzuiger niet peperduur hoeft te zijn. De Tapo RV30 Max creëert op eigen houtje een plattegrond van jouw huis en maakt de boel vervolgens schoon. Naast het opzuigen van zand, haren, kruimels en overig vuil dweilt de robot ook nog eens je vloer. Is de batterij bijna leeg, dan keert het apparaat vanzelf terug naar de lader. Tegen een meerprijs is er ook een Plus-versie met een automatisch leegstation te koop.

Epson EcoTank ET-2860

Vermoedelijk zul je niet gauw een goedkopere inkttankprinter vinden. De Epson EcoTank ET-2860 maakt geen gebruik van dure cartridges: je vult met de bijgesloten flessenset eigenhandig vier inktreservoirs aan de voorzijde. Hierdoor is printen véél goedkoper. Ideaal voor mensen die graag foto's afdrukken. Met een behoorlijke printresolutie van 5760 × 1440 dpi ogen de kiekjes erg scherp. Koppel de EcoTank ET-2860 aan het draadloze thuisnetwerk en verstuur vanaf alle pc's, laptops, tablets en smartphones afdruktaken. Tot slot kan dit apparaat ook nog kopiëren en scannen.

Google Nest Mini

Even een lamp dimmen, de thermostaat een graadje hoger zetten of het laatste nieuws volgen. Met deze goedkope smartspeaker van Google kan het allemaal. De ronde behuizing luistert via een microfoon naar jouw spraakopdrachten. Vervolgens bedien je ieder smarthome-apparaat met Google Assistent-ondersteuning. Uiteraard luister je als je dat wilt ook gewoon naar muziek. De Nest Mini is in een licht en donker jasje te koop.

Huawei Band 10

Geef de Huawei Band 10 cadeau aan iemand met sportieve voornemens. Deze activity-tracker houdt nauwlettend het aantal gezette stappen en de hartslag in de gaten. Verder is de polsassistent waterbestendig, waardoor je ook allerlei zwemgegevens kunt registreren. Je leest het ruime amoledscherm van 1,47 inch zowel 's avonds als overdag moeiteloos af. Wie het apparaatje met een Android-toestel verbindt, ziet verschillende notificaties voorbijkomen. De Band 10 is in verschillende kleurstellingen te koop, namelijk wit, blauw, paars, groen, roze en zwart. De twee laatstgenoemde uitvoeringen zijn het goedkoopst.

DJI Neo

Met de piepkleine DJI Neo schiet je haarscherpe beelden! Deze drone van 135 gram stijgt probleemloos op vanaf jouw handpalm. De geïntegreerde videocamera ondersteunt een respectabele resolutie van 3840 × 2160 pixels, zodat je vanuit de lucht gedetailleerde opnames kunt maken. Het is zelfs mogelijk om automatisch een persoon, dier, voertuig of ander bewegend voorwerp te volgen. Op een enkele acculading bedraagt de maximale vluchttijd achttien minuten. Houd er rekening mee dat de fabrikant bij het basismodel geen afstandsbediening meelevert. Je installeert voor de bediening een app op je smartphone.

JBL Sense Lite

Deze sportieve in-ears blijven tijdens iedere wandeling, hardloopsessie en fitnesstraining stevig op hun plek zitten. De behuizing bevat namelijk een oorhaakje. De JBL Sense Lite is IP54-gecertificeerd. Een beetje regen of zweet kan dus geen kwaad. Je bent tijdens handsfree gesprekken luid en duidelijk te horen, want beide oordopjes hebben twee microfoons. De batterij gaat maximaal acht uur mee. Een pluspunt is dat je de inwendige accu's met de bijgesloten oplaadcase nog eens driemaal volledig kunt opladen. En dat zonder netstroom! Je past met de JBL Headphones-app diverse equalizerinstellingen naar eigen smaak aan. Kies tussen een zwarte, beige, witte, paarse en blauwe uitvoering.

View post on TikTok

Fresh 'n Rebel Party Loud M

Bouw met deze krachtige partyspeaker op iedere locatie een feestje. Door de waterdichte constructie is een regenbui geen enkel probleem. Bovendien ben je niet afhankelijk van netstroom. Een volgeladen accu is volgens de fabrikant goed voor een speeltijd tot twintig uur. De Fresh 'n Rebel Party Loud M heeft bovenop een eenvoudig bedieningspaneel. Schroef zo nodig het basniveau verder op en switch tussen zes verlichtingsschema's. Een leuk extraatje is dat je aan de achterzijde een microfoon of gitaar kunt inpluggen. Kortom, een ideale partner voor een geslaagde karaoke-avond!

Xiaomi TV Box S (3rd Gen)

De Xiaomi TV Box S (3rd Gen) is een betaalbare mediaspeler die elke 'domme' televisie of verouderde smart-tv slim maakt. Sluit dit kleine apparaatje aan op een HDMI-poort van de beeldbuis en verbind hem met wifi. Vervolgens start je vanuit het Google TV-menu je favoriete video-apps. De compacte afstandsbediening heeft aparte knoppen voor Netflix, Amazon Prime Video en YouTube. Zoek je een specifieke film of serie? Activeer dan de spraakfunctie om de betreffende titel vlot te vinden. De Xiaomi TV Box S geeft de streams in een scherpe beeldkwaliteit van maximaal 3840 × 2160 pixels aan de televisie door. Veel kijkplezier!