Connect with us

Künstliche Intelligenz

EU-Energielabel im Check: So finden Sie langlebige Smartphones und Tablets


Unübersehbar prangt es seit 20. Juni an jedem Smartphone und Tablet, egal ob auf der virtuellen Ladentheke oder im stationären Handel: das EU-Energielabel. Auch den Verkaufskartons liegt es bei. Die von Kühlschränken, Fernsehern und Spülmaschinen bekannte Ampelskala ordnet die Energieeffizienz der Geräte von A bis G. Der sogenannte Energieeffizienzindex (EEI) nimmt den größten Raum auf dem Label ein, ist aber nicht die einzige relevante Information. Daneben macht das Label auch Angaben, wie robust und reparierbar das Gerät ist, sowie weitere zur Laufzeit und Langlebigkeit des Akkus. Wir haben uns angeschaut, wie die Bewertungen zustande kommen und ob das Energielabel bei der Kaufentscheidung hilft.

  • Seit 20. Juni ist das Energielabel für Smartphone und Tablet Pflicht.
  • Es zeigt neben der Energieeffizienz auch Infos zu Reparierbarkeit und Widerstandsfähigkeit an.
  • Die zugehörige „Europäische Produktdatenbank für die Energieverbrauchskennzeichnung“ (EPREL) liefert spannende Zusatzinfos, ist aber wenig benutzerfreundlich.

Rechtliche Grundlage des Energielabels sind die Ökodesign-Anforderungen der EU. Mit diesen macht die Union unter anderem auch Vorgaben zur Update- und Ersatzteilversorgung für Smartphones und Tablets. Während sich diese Markthürden an die Hersteller der Geräte richten, soll das Energielabel Verbrauchern helfen, eine umweltfreundlichere Wahl zu treffen. So will die EU erreichen, dass Smartphones und Tablets länger genutzt werden.

Das Label muss gut sichtbar in der Nähe von Smartphones, Foldables und Tablets angebracht werden, auch in Prospekten und im Onlinehandel muss es auf den ersten Blick zu erkennen sein. Für Feature Phones gibt es das Label nicht, da sich die im Verkauf befindlichen Geräte im Hinblick auf ihre Energieeffizienz nur geringfügig unterscheiden. Über einen QR-Code auf dem Label hat man Zugriff auf alle wichtigen technischen Gerätedaten. Diese muss der Hersteller in eine Datenbank einpflegen, die auch die Marktüberwachungsbehörden nutzen, um die Einstufungen zu prüfen.


Das war die Leseprobe unseres heise-Plus-Artikels „EU-Energielabel im Check: So finden Sie langlebige Smartphones und Tablets“.
Mit einem heise-Plus-Abo können Sie den ganzen Artikel lesen.



Source link

Künstliche Intelligenz

LaunchAngels: Was sich hinter Apples neuen Start-„Engeln“ verbirgt


In macOS 26 alias Tahoe ist eine neue Kategorie von Launch-Arten hinzugekommen, über die Apple bislang schweigt: Auf LaunchDaemons und LaunchAgents treffen die sogenannten LaunchAngels. Ein entsprechendes Verzeichnis findet sich im Ordner /System/Library, wie Mac & i-Autor und macOS-Experte Howard Oakley entdeckt hat. Es ist noch nicht viel darüber bekannt, was es damit auf sich hat. Klar ist nur, dass die Technik aktuell für drei Apple-eigene Routinen zum Einsatz kommt.

Während Daemons Hintergrundprozesse sind, die unabhängig agieren, als root bereits vor dem Login laufen, indirekt mit Nutzerprozessen interagieren und von launchd verwaltet werden, laufen Agents zwar unter der Kontrolle von launchd, werden aber vom Nutzer angefordert und interagieren mit Prozessen und Daemons direkt. Die Verwaltung erfolgt über plist-Dateien. Das ist bei Angels genauso.

Aktuell gibt es im System (macOS 26.0.1) drei LaunchAngels: GameOverlayUI, Posterboard und AccessibilityUIServer. Letzteres hilft bei Eingabehilfen und ist direkt mit dem Prozess Accessibility verbunden. GameOverlayUI hat mit dem neuen Game-Overlay-System zu tun, das Apple nun Spielen gönnt. PosterBoard scheint mit der Konfiguration des Lockscreen zu tun zu haben, etwa um dort Kurzbefehle zu platzieren – allerdings scheint es sich dabei noch um einen Test zu enthalten. Der Key „_ExperimentalNonLaunching“ ist hierfür gesetzt.

Oakley entdeckte auch, dass alle drei LaunchAngels Referenzen zu RunningBoard haben, einem Life-Cycle-Management-Werkzeug. Diese gibt es für Agents und Daemons bislang nicht. Es bleibt abzuwarten, was Apple mit den LaunchAngels künftig plant – und warum der Hersteller dafür eine neue Kategorie der Startwerkzeuge eingeführt hat. Es gibt derzeit keinen Weg, eigene Angels zu definieren, das Verzeichnis ist geschützt.

Unklar ist auch noch, ob LaunchAngels im Library-Ordner des Nutzers funktionieren oder eben nur systemweit. Letzteres müsste implementiert werden, sofern Apple die Technik für Drittanbieter-Apps als neue Form von Diensten öffnet. Welche Vorteile dies für Entwickler hätte, ist ebenfalls noch nicht gesagt. Durch den Schutz können Angels jedenfalls bislang nicht missbraucht werden.


(bsc)



Source link

Weiterlesen

Künstliche Intelligenz

Asynchrone Programmierung – Teil 1: C++ komfortabel mit Boost.Asio


Mit Boost.Asio gibt es eine altbekannte und dennoch moderne, effiziente und mächtige Bibliothek für die asynchrone Programmierung in C++. Je nach C++-Version können Entwicklerinnen und Entwickler damit auf verschiedene Arten asynchron programmieren, ohne dabei auf komplizierte und fehleranfällige Threading-Mechanismen zurückgreifen zu müssen.


Martin Meeser

Martin Meeser

Martin Meeser ist selbständiger Diplominformatiker (Uni) und bietet Dienstleistungen zum Thema Softwareentwicklung an: Individual-Software-Entwicklung, Beratung zu Prozessen und Schulungen. In zahlreichen Projekten betreute er bisher Kunden unter anderem aus den Bereichen Automotive, Finance, Raumfahrt, Radioastronomie und Medizintechnik.

Dieser Artikel bildet den Auftakt einer Reihe zur asynchronen Programmierung in verschiedenen Sprachen – außer Python, das vor Kurzem erst vorgestellt wurde.

Auf Linux-Systemen kann man Boost in einer aktuellen Version über die diversen Paketverwaltungen beziehen, unter Ubuntu ist das beispielsweise mit apitude aktuell die Version 1.83:

sudo apt-get install libboost-all-dev

Möchte man die neueste Version (aktuell 1.89) einsetzen oder arbeitet unter Windows, lädt man Boost von der Homepage und baut es selbst. Die entsprechenden Anleitungen finden sich beim Anbieter. Es gibt auch eine baugleiche, reine Asio-Bibliothek – ohne Boost-Abhängigkeiten und mit einem anderen Namespace, die hier aber nicht betrachtet wird.

Grundsätzlich erfordert asynchrone Programmierung ein verwaltendes System, das die API sowie die Mechanismen bereitstellt und den Programmablauf orchestriert. Hier hat sich allgemein der Begriff „Event Loop“ etabliert, Boost.Asio spricht jedoch von „Context“. Der geläufige Ansatz ist es, einen io_context zu verwenden, wie folgendes Beispiel zeigt:


#include 
#include 

int main()
{
    boost::asio::io_context io_context;
    boost::asio::post(io_context, []()
    {
        std::cout << "Hello World from async context!" << std::endl;
    });

    // async execution startet nach dem Aufruf von io_context.run()
    io_context.run(); // run() blockiert bis keine Arbeit mehr vorliegt
}


Listing 1: Einfaches Beispiel zur Verwendung eines Kontextes

post() reiht das Funktionsobjekt, das als Parameter übergeben wird – hier ein Lambda – in die Warteschlange des Kontexts ein und springt sofort zurück.

Der Kontext startet durch den Aufruf von io_context.run() und beginnt nun, die Funktionen der Reihe nach abzuarbeiten. In dem Beispiel wird „Hello World…“ also erst nach io_context.run() ausgegeben.

So initialisiert man das Programm, ohne dass asynchrone Mechanismen auf ein nicht fertig initialisiertes System einwirken. Das vermeidet Fehler, die unter bestimmten Umständen auftreten und schwer zu finden sind, beispielsweise zufällige Nachrichten aus einem anderen Prozess oder eine hohe Auslastung der CPU durch ein anderes Programm.

Die Methode io_context.run() endet, sobald keine Aufgaben mehr vorhanden sind oder io_context.stop() aufgerufen wird. io_context.run() kann man nur einmal pro Thread verwenden. Es ist aber möglich, run() mit dem gleichen io_context aus mehreren Threads aufzurufen.

Im Fall von Listing 1 übergibt der io_context die Arbeit einem Thread, was eine nebenläufige (concurrent) Ausführung bedeutet. In Listing 2 wird io_context.run() von mehreren Threads aus aufgerufen. Übergibt man nun Aufgaben an den Kontext, dann führt dieser die Aufgaben sofort auf einem der Threads aus. Diese Ausführung ist wirklich parallel. Sind alle Threads bereits mit Arbeit ausgelastet, wird die neue Aufgabe in eine Warteschlange eingereiht. Sobald einer der Threads seine Aufgabe abgeschlossen hat, teilt Context ihm Arbeit aus der Warteschlange zu.


#include 
#include 
#include 
#include 

int main()
{
    boost::asio::io_context io_context;

    int n = 4;
    std::vector<:thread> threads(n);
    for (int i = 0; i < n; i++)
    {
        threads[i] = std::thread([&io_context](){ io_context.run();});
    }

    // ... parallel asynchrone Aktionen hier

    for (auto& t : threads)
    {
        if (t.joinable()){ t.join(); }
    }
}


Listing 2: Verwendung von mehreren Threads in einem io_context

Hier erahnt man bereits die Stärke des asynchronen Programmierstils: Die ausführenden Einheiten sind abgelöst von einem konkreten Thread. Asynchrone Programme skalieren nativ und nutzen so viele Ressourcen, wie zur Verfügung stehen.

Nach meiner Erfahrung ist in der Regel ein Thread völlig ausreichend, während mehrere Threads vor allem bei Serversystemen oder ganz speziellen Aufgaben interessant sind, beispielweise zur Berechnung großer Primzahlen oder anderer algorithmischer Probleme. Je mehr Threads (bzw. CPU-Kerne) dem Kontext zur Verfügung stehen, desto mehr Teil-Berechnungen können parallel erfolgen – ohne jede Veränderung des Programms. Entwickler können sich vollständig auf die Funktionalität konzentrieren.

Es ist möglich, das Verhalten von io_context.run() zu verändern, indem man einen work_guard verwendet, wie in Listing 3 zu sehen ist.


#include 
#include 

int main()
{
    boost::asio::io_context io_context;
    boost::asio::executor_work_guard<:asio::io_context::executor_type>
    work_guard(io_context.get_executor());

    boost::asio::post(io_context, []()
    {
        std::cout << "Hello World from async context." << std::endl;
    });

    boost::asio::signal_set signals(io_context, SIGINT, SIGTERM);
    signals.async_wait([&io_context /*&work_guard*/]
        (const boost::system::error_code& ec, int signal)
        {
            io_context.stop(); // bricht sofort alles ab
            // work_guard.reset(); // bricht ab, wenn alles fertig ist
        });

    io_context.run();
}


Listing 3: executor_work_guard kann verhindern, dass run() zurückspringt, wenn context keine Arbeit mehr hat.

Nun springt io_context.run() erst dann zurück, wenn zum einen io_context.stop() aufgerufen wurde – in diesem Fall kommen bereits vorgesehene Aufgaben nicht mehr zur Ausführung und gerade laufende werden mit einem Abbruch-Fehler gestoppt. Zum anderen springt die Funktion zurück, wenn work_guard.reset() aufgerufen wurde – dann arbeitet das Programm alle gerade laufenden und auch alle vorgesehenen Aufgaben noch ab.

Bei letzterem sollten Entwicklerinnen und Entwickler darauf achten, dass sie innerhalb der eingereihten Einheiten keine neuen Aufgaben hinzufügen – denn sonst gerät der Code in eine asynchrone Endlosschleife und io_context.run() wird niemals enden.

Es gibt noch zwei weitere Kontexte in Boost.Asio: thread_pool (siehe Listing 4) und system_context (siehe Listing 5).


#include 
#include 

int main()
{
    boost::asio::thread_pool thread_pool(16);
    boost::asio::post(thread_pool, []()
    {
        std::cout << "Hello World from async context!" << std::endl;
    });

    // thread_pool.stop(); // bricht alle Arbeit im Pool sofort ab
    thread_pool.join(); // wartet bis alle Arbeit abgeschlossen ist


Listing 4: Beispielhafte Verwendung eines thread_pool

Der thread_pool ist eine einfache und empfohlene Alternative, wenn Entwickler mehrere Threads verwenden möchten und keine feingranulare Steuerung der einzelnen Threads benötigen. Eines muss man jedoch berücksichtigen: Im Gegensatz zum io_context startet thread_pool direkt nach der Konstruktion. Ansonsten verhält es sich analog zum io_context: Mit der Methode thread_pool.stop() brechen Entwickler die Ausführung sofort ab, mit thread_pool.join() beendet das Programm aber noch alle Aufgaben. Wurde vorher stop() aufgerufen, dann springt join() sofort zurück.

Der system_context ist von überall immer verfügbar – er muss nicht gestartet oder gestoppt werden. Er ist eine gute Wahl, wenn Entwickler an einem bestimmten Punkt ohne großen Aufwand und Vorbereitung – aber auch ohne eigene Steuerung – asynchrone Operationen ausführen möchten.


#include 
#include 

int main()
{
    boost::asio::system_context system_context;
    boost::asio::post(system_context, []()
    {
        std::cout << "Hello World from async context!" << std::endl;
    });
}


Listing 5: Beispielhafte Verwendung von system_context



Source link

Weiterlesen

Künstliche Intelligenz

Goldene Momente, klare Formen und stille Geschichten: Die Bilder der Woche 41


Ein gutes Foto ist selten zufällig entstanden. Es entsteht im Zusammenspiel aus Geduld, Beobachtung und einem feinen Gespür für Licht und Stimmung. In dieser Woche haben die Fotografinnen und Fotografen unserer c’t-Fotogalerie eine beeindruckende Vielfalt fotografischer Sichtweisen eingefangen. Natur in herbstlicher Ruhe, urbane Formspiele und stille Begegnungen, voller Ausdruck. Jede Aufnahme zeugt von einer individuellen Handschrift – technisch präzise und dabei emotional offen für Interpretation.



Herbstzeit – Kürbiszeit

(Bild: MR1701)

Wenn das Herbstlicht über einem Feld voller Kürbisse liegt, dann verbindet sich Farbe mit Stimmung. Die Früchte leuchten in sattem Orange bis zum Waldrand, während der Hintergrund sanft in dunkleren Tönen versinkt. Die kräftigen Farben und das Spiel von Schärfe und Unschärfe erzeugen eine Tiefe, die den Blick fast in Bewegung versetzt. Galeriefotograf MR1701 zeigt, wie detailreich und klar eine Szenerie wirken kann, wenn Licht und Perspektive präzise eingesetzt werden. Das klassische Herbstmotiv fängt Wärme und Vergänglichkeit ein.



Heart of Gold

(Bild: Zika)

Im goldenen Gegenlicht des Morgens begegnen sich zwei Haubentaucher – zart, fast silhouettenhaft. Die spiegelnde Wasserfläche glüht in Gelb- und Bernsteintönen, das Licht lässt die Szenerie wie eine poetische Miniatur erscheinen. Hier verschmelzen Naturbeobachtung und Emotion zu einer stimmungsvollen Einheit. Fotograf Zika ist hier eine Aufnahme gelungen, die durch präzise Belichtung und gezielte Reduktion überzeugt: Licht wird zur Sprache, Stille zur Aussage.



Blowing in the Wind

(Bild: Fotopublikation)

Ein starker Windstoß verwandelt das Porträt einer jungen Frau in Moers in ein energiegeladenes Streetfoto. Das Haar wirbelt durchs Bild, verdeckt das Gesicht und bricht damit das klassische Verständnis von Kontrolle und Pose. Der Schwarz-Weiß-Look verstärkt die grafische Wirkung – Linien, Kontraste und Texturen treten in den Vordergrund. Durch die Hände in den Taschen wirkt die Aufnahme beiläufig und betont die Natürlichkeit des Moments.



Vicia faba auf Grün

(Bild: vicia-faba)

Grün in all seinen Schattierungen – hier wird das Auge buchstäblich in Farbe getaucht. Bohnen, Blätter und Kräuter bilden ein fein komponiertes Arrangement, das an ein Stillleben erinnert. Die harmonische Farbpalette sorgt für Ruhe, während die unterschiedlichen Formen und Texturen für visuelle Spannung sorgen. Ein beeindruckendes Beispiel dafür, wie gekonnte Komposition und Lichtwahl selbst alltägliche Elemente zu Kunst erheben können.



Licht trifft Form

(Bild: Karsten Gieselmann)

Aus der Untersicht betrachtet wird eine Wendeltreppe zum grafischen Kunstwerk: Sie windet sich elegant empor, ihre Linien schlagen weiche Bögen, bis sie im hellen Zentrum verschwinden. Das starke Schwarz-Weiß betont die Geometrie und die Kurven fließen in rhythmischer Wiederholung. Das Auge wird magisch in den hellen Kreis geführt – ein klassisches Beispiel für Architektur als abstrakte Form. Technisch präzise, kompositorisch stark – ein Paradebeispiel für modernes Architekturfotodesign.



Erstarrt

(Bild: aaliyah_NaturPix)

So nah, dass man die Struktur beinah spüren kann. Das Auge eines Reptils erscheint wie ein geheimnisvolles Universum aus Farbe und Form. Intensive Kontraste aus Gelb und Schwarz, feine Linien, die die Haut durchziehen, und jede einzelne Schuppe, die wie ein individuell gezeichnetes Muster wirkt, ergeben ein faszinierendes Gesamtbild. Der extreme Ausschnitt erzeugt eine beinah beklemmende Nähe und zeigt, wie aus einem Tierporträt ein eindrückliches Studienobjekt wird.

Galeriefotografin Aaliyah Schenk berichtet zu der Aufnahme: „Dieses Bild schoss ich im Eifalia-Schmetterlingsgarten. Durch die Zweige, auf der Suche nach einem Motiv, starrte mich das Auge einer Schildkröte an. Die Farben der Iris faszinierten mich. Ich bewegte mich langsam und vorsichtig auf die Schildkröte zu, um sie nicht zu erschrecken. Dann schoss ich das Bild aus nächster Nähe.“



GI – Turm

(Bild: JensLe)

Die beiden Leuchttürme von Gatteville le Phare in der Normandie sind wie ungleiche Zwillinge in der Küstenlandschaft. Im warmen Licht der untergehenden Sonne stehen sie wie Zeugen maritimer Geschichte. Der vordere, gedrungene Turm vermittelt Ruhe und Halt, während der hohe, schlanke Nachbarturm in die Höhe strebt. Das Meer glüht sanft, spiegelt Himmel und Horizont und verbindet so Architektur und Natur in einer einzigen, ruhigen Geste. Ein stimmungsvolles Beispiel für Landschaftsfotografie, das mit feinem Gespür für Lichtbalance und Farbverlauf beeindruckt.

Die Bilder der Woche im Überblick:


Samstag: Herbstzeit – Kürbiszeit (Bild:

MR1701

)


(vat)



Source link

Weiterlesen

Beliebt