1 Punkte von GN⁺ 2024-10-05 | 1 Kommentare | Auf WhatsApp teilen
  • Um die Gewohnheit zu reduzieren, morgens endlos durch Nachrichten und Social Media auf dem Handy zu scrollen, wird jeden Tag mit einem Nadeldrucker eine personalisierte Titelseite auf Papier ausgedruckt
  • Der Aufbau ist mit Star NP-10, Raspberry Pi Zero W, Parallelport-USB-Adapter und Netzteil einfach; auf dem Pi wird der Drucker als Gerät /dev/usb/lp0 angesprochen
  • Der alte Drucker akzeptiert keinen normalen Unicode, sondern einen eingeschränkten Zeichensatz, der eher Code Page 437 entspricht; in PHP werden Hex-Werte daher direkt gesendet, um Linien, Kästen und Temperatursymbole zu drucken
  • Die Daten kommen aus Open-Meteo, twelvedata, NYTimes und Reddit JSON; Wetter, Aktien, News-Überschriften und Reddit-Posts werden auf die Papierbreite formatiert
  • Per cron läuft das Ganze jeden Tag gegen 8 Uhr automatisch, und eine endliche Nachrichtenseite auf einem Blatt ersetzt das unendliche Scrollen auf Websites und in Apps

Eine Titelseite auf Papier statt eines Bildschirms bauen

  • Ziel war es, die Gewohnheit zu verringern, morgens das Handy zu öffnen und durch verschiedene Nachrichten- und Social-Media-Seiten zu scrollen, ohne dabei auf aktuelle Informationen zu verzichten
  • Umgesetzt wurde das, indem ein bei eBay gekaufter Nadeldrucker genutzt wird, um jeden Tag eine personalisierte Titelseite auszudrucken
  • Der vollständige Quellcode ist im GitHub repo veröffentlicht

Auswahl und Anschluss der Hardware

  • Die benötigten Komponenten sind relativ einfach
  • Der verwendete Drucker ist ein Star NP-10, offenbar ein Modell aus der Mitte der 1980er-Jahre
    • Jeder Nadeldrucker mit Parallelport könnte funktionieren
    • Der übliche Preis lag bei etwa 80 bis 120 US-Dollar, aber wegen des Hinweises „Funktionszustand unklar“ wurde er für ungefähr die Hälfte gekauft
  • Nach etwas Reinigung und einer Justierung der Farbbandkassette konnte erfolgreich eine Testseite gedruckt werden
  • Der Raspberry Pi ist mit dem WLAN verbunden und über den USB-Adapter an den Parallelport des Druckers angeschlossen
    • Nach dem Login per ssh wurde bestätigt, dass der Drucker unter /dev/usb/lp0 erkannt wurde

Daten direkt an den Drucker senden

  • Zunächst wurde geprüft, ob überhaupt gedruckt werden kann, indem roher Text direkt aus der Shell gesendet wurde
echo "Hello, world!" > /dev/usb/lp0
  • Wegen eines Dateizugriffsfehlers wurde das Berechtigungsproblem mit chmod umgangen
sudo chmod 666 /dev/usb/lp0
  • Danach wurde an /dev/usb/lp0 gesendeter Text vom Drucker ausgegeben
  • In PHP wurde das später erweitert, indem die Druckerdatei mit fopen() geöffnet und Text hineingeschrieben wurde
  • Beim Test mit normalen Sätzen, Leerzeichen und Unicode-Art zeigte sich, dass der unterstützte Zeichenumfang des Druckers begrenzt ist

Der Zeichensatz des Star NP-10

  • Mit einem gescannten Star NP-10 Benutzerhandbuch wurde nachvollzogen, wie der Drucker arbeitet
  • Dieser Drucker akzeptiert nur einen sehr spezifischen Zeichensatz
    • Er basiert lose auf Code Page 437 des IBM PC
    • Enthalten sind Standard-Alphanumerik sowie einige Sonderzeichen, Linien- und Box-Zeichen
  • In PHP können Hex-Werte als Strings aufgebaut und direkt an den Drucker gesendet werden
$horizontalDouble = "\xCD";
$deg = "\xF8";

echo str_repeat($horizontalDouble, 24);
echo '78' . $deg . 'F' . PHP_EOL;
  • Damit lassen sich nicht nur normaler Text, sondern auch dekorative Zeichen wie Linien, Kästen und Temperatursymbole drucken

Abgerufene Daten und APIs

  • Auf der persönlichen Titelseite gibt es vier Bereiche
    • Wetter
    • Aktien
    • wichtige News-Überschriften
    • Top-Reddit-Posts
  • Da es sich um ein experimentelles Projekt handelt, sollten die Datenkosten niedrig bleiben und möglichst kostenlose APIs verwendet werden; die benötigten APIs wurden im Repository public-apis mit frei verfügbaren APIs gefunden
  • Verwendet wurden folgende Datenquellen
    • Open-Meteo: Wetterdaten, kein API-Key erforderlich
    • twelvedata: Aktiendaten, großzügige Free-Tier
    • NYTimes: News-Überschriften, für das Projekt ausreichende Free-Tier
    • Reddit JSON: Reddit-Posts, kostenlos, erfordert aber User-Agent-Spoofing
  • Das PHP-Skript holt die Payloads von jedem API-Endpunkt und fasst nur die benötigten Daten in einem großen Array zusammen
    • Verwendet werden nur bestimmte Aktien, bestimmte Nachrichtentypen und Posts aus bestimmten Subreddits
    • Wenn in einem der Bereiche keine anzeigbaren Daten vorhanden sind, beendet sich das Skript frühzeitig und wird später erneut ausgeführt

So werden die News-Daten gefiltert

  • NYTimes-Daten werden als fehlgeschlagen behandelt, wenn in der API-Antwort results nicht vorhanden ist
  • Von den Artikeln werden nur Einträge zum Drucken gesammelt, die folgende Bedingungen erfüllen
    • type ist Article
    • section ist einer von U.S., World, Weather, Arts
    • Es werden nur Einträge hinzugefügt, solange die Höchstzahl MAXNEWS nicht erreicht ist
  • NEWS, NEWSKEY und MAXNEWS sind am Anfang des Skripts als Konstanten definiert, damit sie leicht geändert werden können

Ausgabeformat passend für Papier

  • Statt nur Abschnittsüberschriften zu drucken, wird oben eine umrahmte Box mit aktuellem Datum, Wochentag und dem Namen der Titelseite erstellt
  • Das Layout wird auf Basis der Seitenbreite des Druckers von 80 Zeichen berechnet
    • Hex-Zeichen
    • str_repeat
    • fester Wert für die Seitenbreite
  • Abschnittsüberschriften werden durch die Kombination aus Linienzeichen und Text ausgegeben
str_repeat($horizontalSingle, 3) . " WEATHER " . str_repeat($horizontalSingle, (PAGEWIDTH - 9)) . "\n";
  • Wetter und Aktien sind kurz genug, um in einer Zeile ausgegeben zu werden, ohne den Papierrand zu erreichen
  • News-Überschriften und Reddit-Posts enthalten oft längere Texte und brauchen deshalb eine eigene Zeilenumbruch-Logik

Zeilenumbruch für lange Texte

  • Der Drucker kann lange Zeilen automatisch in der nächsten Zeile fortsetzen
  • Um aber zu vermeiden, dass Wörter mitten im Wort getrennt werden, wurde eine Funktion implementiert, die Strings anhand einer maximalen Zeilenlänge aufteilt
  • Die Funktion splitString() teilt Wörter anhand von Leerzeichen und gibt ein Array zurück, bei dem jede Zeile PAGEWIDTH nicht überschreitet
    • Wenn ein einzelnes Wort länger als die maximale Länge ist, wird dieses Wort abgeschnitten und so verarbeitet
  • Für Reddit-Posts wird das zurückgegebene Zeilen-Array durchlaufen und an den Drucker geschrieben
foreach (splitString($redditPost) as $line) {
    fwrite($printer, $line) . "\n";
}

Automatisierung und Nutzungserfahrung

  • Manuell lässt sich das Ganze mit php print.php ausführen
  • Im Alltag wird es über einen cron-Job automatisiert
    • Jeden Tag gegen 8 Uhr morgens wird die personalisierte Titelseite gedruckt
    • Das ausgedruckte Blatt wird abgerissen und beim Kaffee gelesen
  • Die endliche Nachrichtenmenge auf einem einzelnen Blatt fühlt sich besser an, als endlos durch Websites und Social Apps zu scrollen
  • Ein wichtiger Reiz des Projekts war auch der Prozess selbst, alte physische Hardware mit neuer Technologie zu verbinden

1 Kommentare

 
GN⁺ 2024-10-05
Kommentare auf Hacker News
  • Ich habe etwas Ähnliches mit einem Bondrucker ausprobiert: Ein USB-Thermo-Bondrucker kostet etwa 75 Dollar und lässt sich mit Python leicht steuern.
    Bilder und QR-Codes auszugeben ist unkompliziert, und dank der automatischen Schneidefunktion lassen sich Nachrichten gut voneinander trennen.
    Man kann auch die interne Klingel auslösen und ihn so wie eine zusätzliche Benachrichtigung nutzen; außerdem gibt es einen Ausgang zur Steuerung einer Kassenschublade, den ich vielleicht mit etwas wie einer Beleuchtung verbinden will.
    Ich habe ihn für E-Mails eingerichtet und lasse mir jeden Morgen meinen Tagesplan ausdrucken.
    Zusammen mit physischen Bedienelementen wie Buttons oder einem NFC-Reader passt die Schnittstelle ziemlich gut. Zum Beispiel eine NFC-Karte zum Ausdrucken des Tagesplans, eine NFC-Karte zum Ausdrucken ungelesener E-Mails – man gibt sozusagen „Befehle“ und bekommt einen Ausdruck zurück.
    Es ist eine unterhaltsame Methode, Bildschirmzeit zu reduzieren, aber ironischerweise habe ich wohl mehr Zeit vor dem Bildschirm verbracht, um das zu programmieren und einzurichten, als ich dadurch eingespart habe.

    • Bondrucker machen Spaß, aber man sollte aufpassen, kein schädliches Thermopapier zu kaufen.
      https://www.consumerreports.org/cro/news/2014/03/the-health-...
    • Mein Thermodrucker druckt jeden Morgen ebenfalls das Wetter aus und gibt eine Benachrichtigung aus, wenn ein wichtiges Gerät aus dem Netzwerk verschwindet.
    • Bondrucker machen wirklich Spaß. Vor ein paar Jahren habe ich mit einem ähnlichen Setup ein Projekt gemacht, das GitHub-Tickets ausdruckt, und es war ziemlich ähnlich zu dem Setup, das ich jetzt mit einem Nadeldrucker verwende.
    • Mich würde interessieren, welchen Drucker du verwendest. Ich überlege, mir einen zu kaufen, und wusste nichts von den erwähnten Benachrichtigungsfunktionen und externen Steuerungsmöglichkeiten.
  • Heute habe ich mich plötzlich etwas gefragt.
    Eines der Dinge, die diese Person macht, ist im Grunde nur ein Echo nach /dev/lp0, und früher hat man das tatsächlich so gemacht. Man schob Text in die Schnittstelle, und der Drucker druckte ihn aus.
    Heutige Drucker sind viel schicker, aber sie sind immer noch Drucker mit einem langen Erbe. Auch frühe HP-Laserdrucker druckten, wenn man Daten über die Leitung schickte, in Courier 10 mit 66 Zeilen pro Seite. Der Apple LaserWriter war wohl die Ausnahme, weil er ein dedizierter PostScript-Drucker war; bei ihm hätte man stattdessen PostScript hineingeschoben.
    Mit der Weiterentwicklung der Drucker wurden die Sprachen, die man ihnen schickte, komplexer, aber trotzdem blieb eine lange Abwärtskompatibilität erhalten.
    Wenn man also heute einen USB-Drucker an den Computer anschließt und ls > /dev/usbXXX ausführt: Wird das dann noch gedruckt? Funktioniert das immer noch einfach so?
    Wenn man einem EPSON EPSON-MX-80-Escape-Codes schickt, geht das weiterhin? Keine der Antworten würde mich überraschen, aber moderne Drucker sind für mich ziemlich Blackboxes, daher frage ich mich, ob das jemand weiß.
    Manche erinnern sich vielleicht auch noch an die Freude, Berichte so hinzufummeln, dass sie auf vorgedruckte mehrlagige NCR-Formulare passten.

    • Ich habe es gerade unter OS X getestet, und anscheinend werden Drucker dort nicht wie beschrieben unter /dev/ exponiert. Stattdessen gibt es auch unter OS X lp, sodass man etwas wie echo "Hello printer" | lp -d verwenden kann; den Namen findet man mit lpstat -p.
      Mit einem neuen Drucker getestet: Es funktioniert tatsächlich.
    • Die beiden folgenden Varianten haben bei mir funktioniert:
      printf 'hello\f' > /dev/usb/lp0
      printf 'hello\f' | nc -N $printer_ip 9100
      Das war mit einem Brother-Laserdrucker; neben dem Online-Handbuch ist ein Programmierhandbuch verlinkt. Die Sprache ist PCL, aber für einfache Ausgaben muss man nicht viel darüber wissen.
      Die beiden obigen Beispiele verwenden kein CUPS. Wie in einem anderen Kommentar erwähnt, muss der Drucker zuerst in CUPS registriert sein, wenn man die Programme lp/lpr verwenden will.
      Bei ls > erwartet der Drucker DOS-Zeilenumbrüche. \n bewegt nur in die nächste Zeile und macht keinen „Carriage Return“, daher muss man es durch sed 's/$/\r/' pipen oder nc -C verwenden.
      Bei einer USB-Verbindung kann man mehrmals ausgeben und daraus eine Seite machen; das Papier kommt erst heraus, wenn man einen Form Feed sendet. Bei einer TCP-Verbindung wird die Seite gedruckt, wenn die Verbindung geschlossen wird.
    • Ich habe einen vor ein paar Jahren neu gekauften Epson LX-350; er wird per USB angeschlossen und hat auch serielle/parallele Ports. Über USB tauchte er ungefähr als /dev/usblp0 auf, und es funktionierte, einfach mit cat dorthin zu schreiben.
      Kunden, die so ein Produkt neu kaufen, wollen vermutlich Kompatibilität mit Prozessen, die sie seit 30 bis 50 Jahren verwenden; erwartungsgemäß unterstützt er ESC/P 2 und auch IBM-Escape-Codes. Ich fand das überraschend, weil die alten Nadeldrucker, die ich in den 90ern benutzt habe, meiner Erinnerung nach keine IBM-Codes unterstützten.
      Noch erstaunlicher war, dass mein MacBook einen eingebauten Treiber für generische Epson-Drucker hatte und dieser funktionierte. Die Qualität war nicht besonders und er druckte als Grafik, aber immerhin gab es ihn.
      Zu aktuellen Tintenstrahl- und Laserdruckern weiß ich es nicht. Ein Epson-Tintenstrahldrucker, den ich vor etwa 20 Jahren benutzt habe, unterstützte rohe ESC/P-Codes.
    • Mit Netzwerkdruckern geht das ebenfalls. Wenn man per netcat ein PDF an den offenen Port schickt, wird es gedruckt.
      https://retrohacker.substack.com/p/bye-cups-printing-with-ne...
    • In den Computerräumen der Schulen in den 1990ern gab es noch Nadeldrucker, und sie waren auf allen Computern im Netzwerk als Standarddrucker eingerichtet.
      Ein häufiger Benutzerfehler war: Jemand wollte ein Word-Dokument drucken, daraufhin wurde PostScript an den Nadeldrucker geschickt, und der Drucker druckte es brav als PostScript-Quelltext aus und verschwendete Papier und Farbband, bis jemand ihn stoppte.
  • Matrixdrucker können je nach Modell ziemlich viel. Schriftarten wechseln, fett, unterstrichen, manchmal kursiv, Zeichen in doppelter Breite/Höhe und sogar Grafik. Allerdings haben Grafiken meist eine vergleichsweise niedrige Auflösung, etwa 90 oder 180 DPI.
    Früher habe ich einmal für etwas Ähnliches wie ein Escape-Room-Spiel eine Box gebaut, die nur einen parallelen Druckeranschluss hatte. Wenn man sie an den Drucker anschloss, bezog ein winziger PIC-Mikrocontroller über eine Steuerleitung des Parallelports parasitäre Versorgung und schickte mit nur ein paar Hundert µA Hinweise an den Drucker.

    • Früher gab es eines der frühen Desktop-Publishing-Programme namens Fancy Font von SoftCraft. Es war ein CP/M- und später DOS-Programm, also kein WYSIWYG-Seitenlayout-Tool wie PageMaker, sondern nutzte Textdokumente, die mit einer einfachen Markup-Sprache formatiert wurden.
      Anfangs nutzte es den hochauflösenden Grafikmodus von Epson-Matrixdruckern. Diese Drucker konnten die Walze in Schritten von nur einem Drittel des Abstands zwischen den Pins des Druckkopfs feinjustieren und erreichten so die dreifache vertikale Auflösung dessen, was mit dem Kopf allein möglich war.
      Fancy Font renderte den Text auf dem Computer und schickte ihn dann als Grafik in diesem speziellen Hochauflösungsmodus, sodass man mit Heimausrüstung der frühen 1980er einem Schriftsatz-Ergebnis so nahe wie möglich kam.
      Spätere Versionen hatten auch Treiber für frühe Laserdrucker wie den ursprünglichen HP LaserJet, aber mit dem Erscheinen des Mac war die Zukunft solcher Systeme ziemlich absehbar.
    • Mein Vater hatte in den 90ern einen 4-Farb-Matrixdrucker. Der Ausdruck des Pharaonenkopfs aus Deluxe Paint II dauerte unglaublich lange, sah aber tatsächlich ziemlich hübsch aus.
      Allerdings war das Papier nach dem Druck stark gewellt. Den Drucker habe ich noch, aber ich weiß nicht, wo man noch ein 4-Farb-Farbband bekommen könnte.
    • Ich erinnere mich daran, riesige Banner im Querformat auf endloses Rollenpapier gedruckt zu haben. Das war so ähnlich wie die ASCII-Art, die heute Befehle wie figlet im Terminal erzeugen. Vielleicht unterstützt es sogar noch Druckerausgabe.
    • Aus Designperspektive wollte ich das noch weiter erkunden. Im Handbuch gibt es wirklich Dutzende Seiten zu Dingen wie Schriftgrößen, Hervorhebung, Kursivschrift, Tief-/Hochstellung.
      Vielleicht probiere ich das in Version 2.0 aus.
    • Es wäre interessant, ein Terminal zu haben, das ESC/P versteht und mehrere Schriftarten sowie Dinge wie CPI unterstützt.
  • Ich hatte diese Maschine einige Jahre lang an einen Newsfeed angeschlossen.[1] Es ist der Mechanismus eines Model 14 Teletype Tape Printer, steht immer noch in meinem Wohnzimmer, und das Band läuft in einen Drahtkorb.
    Gesteuert wird er von einem Python-Programm auf einem alten EeePC-Subnotebook.
    [1] https://aetherltd.com/refurbishing14.html

    • Wirklich großartig. Ich wollte mir so ein Gerät immer einmal besorgen, um Ticker Tape nachzuahmen, das laufend aktualisierte Aktien-/Krypto-Preise ausdruckt.
      Den Namen EeePC habe ich auch wirklich lange nicht mehr gehört; das weckte Erinnerungen.
  • Das wirkt wie eine wirklich hervorragende Produktidee. Die Vorstellung, jeden Morgen einen personalisierten, und zwar nicht von MSN oder Ähnlichem, sondern wirklich von mir ausgewählten Offline-Newsfeed zu bekommen, ist klasse.
    Wenn man damit dann auch noch den Wecker durch einen Matrixdrucker ersetzen könnte, wäre es noch besser.
    Das PHP an meine Nachrichtenquellen anzupassen, würde ich leicht hinbekommen, aber ich weiß nicht, wie ich allein mit der Hardwareseite anfangen sollte. So dürfte es ziemlich vielen gehen.
    Wenn es auf den Markt käme, würde ich es wohl kaufen, selbst wenn es deutlich teurer wäre als ein alter Drucker.

    • Als jemand, der früher etwas Ähnliches gemacht hat: Es ist tatsächlich ziemlich einfach. Man schließt den Drucker an und schreibt einfach in das Ausgabegerät. Wenn man davon ausgeht, dass es unter Linux läuft, ist diese Ausgabe einfach eine Datei.
      Der schwierigste Teil ist der Anschluss des Druckers; dafür braucht man eventuell ein Adapterkabel.
  • Hübsch. Das erinnert mich an die kurze Zeit, in der ich einmal bei einem Radiosender gearbeitet habe. Die Details habe ich fast vergessen, aber ich glaube, das System wählte automatisch eine bestimmte Associated-Press-Nummer an, holte die neuesten Schlagzeilen und schickte sie dann an einen Matrixdrucker.
    Das war Ende der 90er und lief unter MS-DOS.
    Damals konnte man bei den meisten Druckern die Schriftart per Steuercode einstellen, und viele Drucker hatten auch proportionale Schriftarten.

  • Gefällt mir. Ich überlege gerade, mir eine Wochenend-Papierzeitung wie die FT Weekend zu abonnieren, weil ich auf dem Handy viel zu oft Nachrichten lese.
    Nachrichten sind oft nicht besonders nützlich und erzeugen nur negative Gefühle. Auf Papier, und dann nur einmal pro Woche, würden sich Nachrichten vermutlich entspannter anfühlen.
    Diese Methode, täglich Nachrichten auf Papier auszudrucken, scheint eine gute Zwischenlösung zu sein.
    Außerdem gefällt mir der Matrixdrucker wirklich. Gibt es vielleicht einen Open-Source-Drucker, der sich gut für solche Hacks eignet?

    • Die FT kann ich schwer empfehlen.
      Ich wollte die Papierzeitung abonnieren, habe aber nie eine Ausgabe bekommen, und erst nach etwa drei Telefonaten und zehn E-Mails, als ich Kündigung und Rückerstattung verlangte, hieß es, man werde mein Ticket eskalieren. Da waren bereits drei Wochen vergangen und ich hatte viel Zeit investiert.
      Deshalb interessiert es mich auch sehr, mir Internetnachrichten selbst auszudrucken, um nicht ständig auf einen Bildschirm zu schauen.
  • Ich drucke seit einiger Zeit „Dreiseiten-Karten“. Auf einer Seite ist ein Bild, auf der anderen ein QR-Code, der zu einem Dokument führt.
    https://mastodon.social/@UP8/111013706271196029
    Die „dritte“ Seite ist die Website, auf die der QR-Code verweist.
    Fotos wurden mir langweilig, also habe ich mir eine Figur ausgedacht, die mit einem billigen Objektiv herumläuft, die Blende immer mindestens auf f/18 schließt, stark nachbearbeitet und farbkorrigiert und in einem Seitenverhältnis fotografiert, das zwar üblich ist, sich aber unüblich anfühlt. Die Idee ist, es so wirken zu lassen, als würde sie eine seltsame Kamera aus einer alternativen Zeitlinie benutzen.
    Als ich anfing, diese Serie auszudrucken, kam ich zu dem Schluss, dass man aus 4x6 durch Zuschneiden leicht 4x5 machen kann; statt zu schneiden, könnte man aber auch einen Zoll Platz lassen, um auf der Vorderseite QR-Code und Dokument unterzubringen. Ebenso entsteht Platz für ein Dokument, wenn man 5x7 zu einem 5x5-Quadrat zuschneidet.
    Ich habe ein paar Kisten Glanzpapier, auf dessen Rückseite man nicht drucken kann, und will es auf diese Weise verwenden. Später habe ich auch erfahren, dass es bei Instagram einen 4x5-Standard gibt und dass Sportfotos, die mit guten Objektiven aufgenommen wurden, in diesem Format wirklich gut aussehen.
    Ich bin mir nur unsicher, wie das Dokument aussehen soll. Ich schwanke zwischen einer Variante, die an der aktuellen Gestaltung nur das Nötigste ändert, einem falschen Matrixdrucker-Effekt, der wie ein alter Drucker wirkt, der in diese Fantasiekamera eingebaut sein könnte, oder einer Umsetzung, die die Stärken eines Tintenstrahldruckers möglichst gut ausnutzt.

    • Ich würde das gern verstehen, aber ich habe das Gefühl, dass entweder der Text selbst oder ich sehr viel Kontext vermissen. Fast jeder Absatz wirkt völlig unabhängig vom vorherigen.
  • Wenn man sagt: „Das ist ein Experimentierprojekt, daher wollte ich die Kosten für diese Daten sehr niedrig, möglichst kostenlos halten“, gibt es auch NewsCatcher. Für Open-Source-Side-Projects ist es kostenlos.
    https://docs.google.com/forms/d/e/1FAIpQLSejrsj4a1ZQkIasiKCt...

  • Etwas verwandt: Ich nutze ein kleines Skript, das jeden Morgen auf dem MacBook die Titelseite der NYTimes öffnet.
    d=$(date +%d)
    m=$(date +%m)
    y=$(date +%Y)
    wget -q [https://static01.nyt.com/images/$y/$m/$d/nytfrontpage/scan.p...](<https://static01.nyt.com/images/$y/$m/$d/nytfrontpage/scan.pdf>;) && open ./scan.pdf